扑克模拟,牌型判断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

Poke类

package com.company;

import java.sql.Connection;
import java.util.*;

/**
 * Created by ttc on 2017/6/30.
 */
public class Poke {
    String[] colors = {"红桃","黑桃","方片","草花"};
    Integer[] values = {1,2,3,4,5,6,7,8,9,10,11,12,13};
    Card[] cards = new Card[52];//

    public void makeCards()
    {
        //生成52张扑克,印刷扑克
        int index = 0;
        for(int i = 0; i < 4; i++) {
            for (int j = 0; j < 13; j++) {
                cards[index] = new Card();
                cards[index].setValue(values[j]);
                cards[index].setColor(colors[i]);
                index++;
            }
        }
        return;
    }

    public void outputCards()
    {
        int index2 = 0;
        for(Card card : cards)
        {
            if(index2 % 13 == 0)
                System.out.println();

            System.out.print(card.toString()+" ");
            index2++;
        }
    }
    ///5--25
    //5+(0--20)
    //Random  r = new Random();
    //int n = 5 + r.nextInt(20);//生成一个0,到n之间的随机数,不包括n,包括0
    public void shuffle()
    {
        Random random = new Random();
        for(int n = 0; n < 52; n++)
        {
            int index = random.nextInt(n+1);//n之前的某张牌
            //交换cards[n]<---->cards[index];
            Card cardTemp = cards[n];
            cards[n] = cards[index];
            cards[index] = cardTemp;
        }
    }

    //一手牌
    public Card[] getOneHands()
    {
        Card[] cardHands = new Card[5];
//        cardHands[0] = cards[0];
//        cardHands[1] = cards[13];
//        cardHands[2] = cards[26];
//        cardHands[3] = cards[39];
//        cardHands[4] = cards[1];
        for(int i = 0; i < 5; i++)
        {
            cardHands[i] = cards[i];
        }
        return cardHands;
    }

    public void judgeHandType(Card[] hands)
    {
        boolean bIsSameColor = false;
        boolean bIsShunzi = false;
        //先判断这手牌是不是同花
        Set<String> colorSets = new HashSet<String>();
        for(int i = 0; i < hands.length; i++)
        {
            colorSets.add(hands[i].getColor());
        }
        if(colorSets.size()==1)
        {
            bIsSameColor=true;
            //System.out.println("同花");
        }

        Set<Integer> valueSets = new HashSet<Integer>();
        List<Integer> valueLists = new ArrayList<Integer>();
        for(int i = 0; i < hands.length; i++)
        {
            valueSets.add(hands[i].getValue());
            valueLists.add(hands[i].getValue());
        }

        Collections.sort(valueLists);//排序
        int diff = valueLists.get(4) - valueLists.get(0);

        if(diff == 4 && valueSets.size() == 5)
        {
            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(valueSets.size() == 5)//这5张牌不是顺子,并且值都不同
        {
            System.out.println("杂牌");
        }
        else if(valueSets.size() == 4)
        {
            System.out.println("一对");
        }
        else
        {
            //map的key保存的是牌的值,map的值保存的是同样值的牌的列表
            Map<Integer,List<Card>> map = new HashMap<Integer,List<Card>>();
            //将一手牌的数据,从数组结构,转变成map结构

            for(int i = 0; i < hands.length; i++)
            {
                Card card = hands[i];
                //看card这张牌的值是否在map的key中存在
                if(map.containsKey(card.getValue()))//如果存在
                {
                    List<Card> lst = map.get(card.getValue());
                    lst.add(card);
                }
                else//不存在
                {
                    List<Card> lst = new ArrayList<Card>();
                    lst.add(card);
                    map.put(card.getValue(),lst);
                }

            }

            if(map.size() == 2)//4带1,3带2
            {
                boolean bIsFourWithOne = false;
                for(Map.Entry<Integer,List<Card>> entry : map.entrySet())
                {
                    //entry的值是一个List
                    if(entry.getValue().size() == 4)
                    {
                        bIsFourWithOne = true;
                        break;
                    }
                }
                if(bIsFourWithOne == true)
                {
                    System.out.println("四带一");
                }
                else
                {
                    System.out.println("三带二");
                }
            }
            else if(map.size() == 3)//221,311
            {
                boolean bIsThreeOneOne = false;
                for(Map.Entry<Integer,List<Card>> entry : map.entrySet())
                {
                    //entry的值是一个List
                    if(entry.getValue().size() == 3)
                    {
                        bIsThreeOneOne = true;
                        break;
                    }
                }
                if(bIsThreeOneOne == true)
                {
                    System.out.println("三条");
                }
                else
                {
                    System.out.println("两对");
                }
            }
        }

        return;
    }

}
View Code

Main类

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
    // write your code here
        Poke poke = new Poke();
        poke.makeCards();
        poke.outputCards();
        poke.shuffle();
        System.out.println("\n洗牌以后");
        poke.outputCards();

        Card[] hands = poke.getOneHands();
        System.out.println();
        for(int i = 0; i< 5; i++)
        {
            System.out.println(hands[i]);
        }
        System.out.println("\n牌型是:");
        poke.judgeHandType(hands);


    }
}
View Code

 

转载于:https://www.cnblogs.com/ice-river/p/6914937.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值