java 模拟德州扑克

  这里仅仅是模拟比较同花和四条的对比,哈哈哈  我也变成标题党了-_-||

如何比较呢?先比较类型,然后比较牌值大小,话不多说,代码如下:

package com.lzx.demo;



import org.junit.Test;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class TexasPoker {

    public  static  int comparePoker(Poker[] poker,Poker[] poker2){
        int type1=getType(poker);
        int type2=getType(poker2);
        if(type1==type2){
            return  getValueSum(poker)-getValueSum(poker2);
        }else {
            return type1-type2;
        }
    }

    //获取牌的总值
    public static int getValueSum (Poker[] poker){
        int sum = 0;
        for (Poker p:poker) {
            sum+=p.getValue();
        }
        return sum;
    }
    //获取牌的类型值
    public static int getType(Poker[] poker){
        int type=isFlush(poker);
        if(type==9){
            return type;
        }else {
            type=isFour(poker);
             return type;
        }
    }
     //是否是同花顺 是返回同花顺的类型值9
    public static int isFlush(Poker[] poker){
        boolean flag =true;//是否是顺子 默认是
        int type =1;
        int heartsNum=0;//红桃
        int spadeNum=0;//黑桃
        int clubNum=0;//梅花
        int diamondNum=0;//方块
        for (Poker p:poker) {
            switch (p.flowercolor){
                case 1:
                    heartsNum++;
                    break;
                case 2:
                    clubNum++;
                    break;
                case 3:
                    diamondNum++;
                    break;
                case 4:
                    spadeNum++;
                    break;
            }
        }
        //是否同花
        if(heartsNum==5||spadeNum==5||clubNum==5||diamondNum==5){
            type=6;
            //1、排序
            Arrays.sort(poker);
            //2、是否是顺
            for (int i = 0; i <poker.length-1 ; i++) {
                int temp = 1+poker[i].getValue();
                int next = poker[i+1].getValue();
                if(temp!=next){
                   flag=false;
                   return  type;
                }
            }
            type=9;
        }
        return type;
    }
    //是否是4条 是返回四条类型值8
    public  static int  isFour(Poker[] poker){
        Map<String,Integer> map  = new HashMap();
        for (int i = 0; i <poker.length ; i++) {
               Integer num = map.get(poker[i].getName());
               map.put(poker[i].getName(),num==null?1:num+1);
        }
        for (Integer value : map.values()) {
            //四条
           if(value==4){
               //将4条的值放大8倍 提高同类型比较的准确性
               for (int i = 0; i <poker.length ; i++) {
                   poker[i].setValue(poker[i].getValue()<<3);
               }
               return 8;
           }

        }
        return 0;
    }

    private  class  Poker implements Comparable<Poker>{
       private String name;//2 3 4 5...J Q K A
       private int value;//牌值
       private int flowercolor;//花色  1:红桃 2 梅花 3方块 4黑桃
        public Poker(String name,int value, int flowercolor) {
            this.name = name;
            this.value=value;
            this.flowercolor = flowercolor;
        }
        public Poker() {
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value=value;
        }
        public int getFlowercolor() {
            return flowercolor;
        }
        public void setFlowercolor(int flowercolor) {
            this.flowercolor = flowercolor;
        }

        @Override
        public int compareTo(Poker poker) {
            return this.value-poker.value;
        }
    }
    //同花顺比较
    @Test
    public void testone(){
        Poker[] pokers = new Poker[5];
        Poker[] pokers2 = new Poker[5];
        TexasPoker texasPoker = new TexasPoker();
        Poker p  = texasPoker.new Poker("J",11, 1);
        Poker p1  = texasPoker.new Poker("Q",12, 1);
        Poker p2  = texasPoker.new Poker("K",13, 1);
        Poker p3  = texasPoker.new Poker("A",14, 1);
        Poker p4  = texasPoker.new Poker("10",10, 1);
        Poker p5  = texasPoker.new Poker("5",5, 1);
        Poker p6  = texasPoker.new Poker("6",6, 1);
        Poker p7  = texasPoker.new Poker("7",7, 1);
        Poker p8  = texasPoker.new Poker("8",8, 1);
        Poker p9  = texasPoker.new Poker("9",9, 1);
        pokers[0]=p;
        pokers[1]=p1;
        pokers[2]=p2;
        pokers[3]=p3;
        pokers[4]=p4;
        pokers2[0]=p5;
        pokers2[1]=p6;
        pokers2[2]=p7;
        pokers2[3]=p8;
        pokers2[4]=p9;
        System.out.println(comparePoker(pokers,pokers2));
    }
    //同花顺和四条比较
    @Test
    public void test2(){
        Poker[] pokers = new Poker[5];
        Poker[] pokers2 = new Poker[5];
        TexasPoker texasPoker = new TexasPoker();
        Poker p  = texasPoker.new Poker("J",11, 1);
        Poker p1  = texasPoker.new Poker("Q",12, 1);
        Poker p2  = texasPoker.new Poker("K",13, 1);
        Poker p3  = texasPoker.new Poker("A",14, 1);
        Poker p4  = texasPoker.new Poker("10",10, 1);
        Poker p5  = texasPoker.new Poker("4",4, 1);
        Poker p6  = texasPoker.new Poker("4",4, 2);
        Poker p7  = texasPoker.new Poker("4",4, 3);
        Poker p8  = texasPoker.new Poker("4",4, 4);
        Poker p9  = texasPoker.new Poker("9",9, 1);
        pokers[0]=p;
        pokers[1]=p1;
        pokers[2]=p2;
        pokers[3]=p3;
        pokers[4]=p4;
        pokers2[0]=p5;
        pokers2[1]=p6;
        pokers2[2]=p7;
        pokers2[3]=p8;
        pokers2[4]=p9;
        System.out.println(comparePoker(pokers,pokers2));
    }
    //四条比较
    @Test
    public void test3(){
        Poker[] pokers = new Poker[5];
        Poker[] pokers2 = new Poker[5];
        TexasPoker texasPoker = new TexasPoker();
        Poker p  = texasPoker.new Poker("2",2, 1);
        Poker p1  = texasPoker.new Poker("2",2, 2);
        Poker p2  = texasPoker.new Poker("2",2, 3);
        Poker p3  = texasPoker.new Poker("2",2, 4);
        Poker p4  = texasPoker.new Poker("A",14, 1);
        Poker p5  = texasPoker.new Poker("4",4, 1);
        Poker p6  = texasPoker.new Poker("4",4, 2);
        Poker p7  = texasPoker.new Poker("4",4, 3);
        Poker p8  = texasPoker.new Poker("4",4, 4);
        Poker p9  = texasPoker.new Poker("9",9, 1);
        pokers[0]=p;
        pokers[1]=p1;
        pokers[2]=p2;
        pokers[3]=p3;
        pokers[4]=p4;
        pokers2[0]=p5;
        pokers2[1]=p6;
        pokers2[2]=p7;
        pokers2[3]=p8;
        pokers2[4]=p9;
        System.out.println(comparePoker(pokers,pokers2));
    }

}
View Code

,写得不好请见谅,大家有更好的思路,请提出来,共同进步!

posted @ 2018-06-08 17:27  赖召旭  阅读(643)  评论(0)    收藏  举报