扑克模拟,牌型判断java版

Posted 际为软件事务所

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扑克模拟,牌型判断java版相关的知识,希望对你有一定的参考价值。

Card类

技术分享
package com.company;




public class Card {
    private String     color;
    private Integer    value;
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public Integer getValue() {
        return value;
    }
    public void setValue(Integer value) {
        this.value = value;
    }
    public String ToString()
    {
        String strValue = "";
        switch(value)
        {
            case 1:
            {
                strValue = "A";
                break;
            }
            case 11:
            {
                strValue = "J";
                break;
            }
            case 12:
            {
                strValue = "Q";
                break;
            }
            case 13:
            {
                strValue = "K";
                break;
            }
            default:
                strValue = value.toString();
                break;
        }
        return color+strValue;
    }

}
View Code

主类

技术分享
package com.company;

import java.util.ArrayList;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;


public class Main {

    public static void Judge(Card[] hands)
    {
        boolean bIsSameColor = false;
        boolean bIsShunzi = false;

        Set<String> setColors = new HashSet<String>();

        for(int i=0; i < hands.length; i++)
        {
            setColors.add(hands[i].getColor());
        }

        if(setColors.size()==1)
        {
            bIsSameColor=true;
            //System.out.println("同花");
        }

        List<Integer> lstValues = new ArrayList<Integer>();
        Set<Integer> setValues = new HashSet<Integer>();

        for(int i=0; i < hands.length; i++)
        {
            lstValues.add(hands[i].getValue());
            setValues.add(hands[i].getValue());
        }
        //顺子,必须满足3个条件
        //1.这手牌先排好序(由大到小)sortHands[5]
        //2.这手牌里面牌值不能有重复项
        //3.如果sortHands[0]-sortHands[4]==4
        Collections.sort(lstValues);
        int nDiff = lstValues.get(4)-lstValues.get(0);
        if(setValues.size()==5&&nDiff==4)
        {
            bIsShunzi = true;
            //System.out.println("顺子");
        }

        if(bIsSameColor&&bIsShunzi)
        {
            System.out.println("同花顺");
        }
        else if(bIsSameColor)
        {
            System.out.println("同花");
        }
        else if(bIsShunzi)
        {
            System.out.println("顺子");
        }
        else if(setValues.size()==5)
        {
            System.out.println("杂牌");
        }

        Map<Integer,List<Card>> map = new HashMap<Integer,List<Card>>();

        for(int i = 0; i < hands.length; i++)
        {

            int nValue = hands[i].getValue();//红桃9
            if(map.containsKey(nValue))
            {
                List<Card> lstCards = map.get(nValue);
                lstCards.add(hands[i]);

            }
            else//不包含
            {
                List<Card> lstCards = new ArrayList<Card>();
                lstCards.add(hands[i]);
                map.put(nValue, lstCards);
            }
        }

        if(map.size()==4)
        {
            System.out.println("一对");
        }
        else if(map.size() == 2)//4带1,3带2
        {
            boolean bIsFourWithOne = false;
            for(Map.Entry<Integer, List<Card>> e : map.entrySet() )
            {
                if(e.getValue().size() == 4)
                {
                    bIsFourWithOne = true;
                }
            }
            if(bIsFourWithOne == true)
            {
                System.out.println("四带一");
            }
            else
            {
                System.out.println("三带二");
            }

//            Map<String,String> map2;
//            map2.add("apple","苹果");
//            map2.add("orange","桔子");
//            map2.values();
        }
        else if(map.size() == 3)//311,221
        {
            boolean bIsThreeOneOne = false;
            for(Map.Entry<Integer, List<Card>> e : map.entrySet() )
            {
                if(e.getValue().size() == 3)
                {
                    bIsThreeOneOne = true;
                }
            }
            if(bIsThreeOneOne == true)
            {
                System.out.println("311");
            }
            else
            {
                System.out.println("221");
            }
        }
//        int i = 7;
//        Card c = card1;

//        (3,[方块3])
//        (5,[红桃5])
//        (9,[黑桃9,草花9,红桃9])
//
//
//
//        (13,[红桃13,方块13])
//        (5,[草花5,黑桃5])
//        (2,[红桃2])
//
//        (4,[黑桃4,草花4,红桃4,方块4])
//        (9,[草花9])
//        //4带1,3带2,311,221,2111
//        map.size()==4//2111
//        if(map.size()==2)
//            abs(map.value[0].size()-map.value[1].size())==3
//            //4带1
//            abs(map.value[0].size()-map.value[1].size())==1
//            //,3带2
//        if(map.size()==3)
//
//            //311,221
    }
    public static void generateHands(Card[] pokes,Card[] hands)
    {
        for(int i = 0; i < hands.length; i++)
        {
            hands[i] = pokes[i];
        }
    }
    public static void outputCards(Card[] pokes)
    {
        for(int i = 0; i < pokes.length; i++)
        {
            if(i%13==0)
                System.out.println();
            System.out.print(pokes[i].ToString()+" ");

        }
    }
    public static void shuffle(Card[] pokes)
    {
        Random r = new Random();

        for(int i = 0; i < pokes.length; i++)
        {
            int n = r.nextInt(i+1);
            Card cTemp;
            cTemp = pokes[i];
            pokes[i] = pokes[n];
            pokes[n] = cTemp;
        }
    }
    public static void main(String[] args) {
        //System.out.println("helloworld");

        String[] Colors = {"红桃","方片","黑桃","草花"};
        Integer[] Values = {1,2,3,4,5,6,7,8,9,10,11,12,13};

        Card[] pokes = new Card[52];
        Card[] hands = new Card[5];

        int nIndex = 0;
        for(int i = 0; i < Colors.length; i++)
        {
            for(int j = 0; j < Values.length; j++)
            {
                pokes[nIndex] = new Card();
                pokes[nIndex].setColor(Colors[i]);
                pokes[nIndex].setValue(Values[j]);
                nIndex++;
            }
        }

        outputCards(pokes);

        shuffle(pokes);

        generateHands(pokes,hands);

        outputCards(hands);

        Judge(hands);
    }
}
View Code

 

以上是关于扑克模拟,牌型判断java版的主要内容,如果未能解决你的问题,请参考以下文章

2022 华为机试真题 C++ 实现 德州扑克

[“斗地主”的技巧:扑克游戏指导].孔维民.扫描版

python——德州扑克

蓝桥杯历届试题:牌型种数

LQ0013 牌型种数DFS

LQ0013 牌型种数DFS