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)); } }
,写得不好请见谅,大家有更好的思路,请提出来,共同进步!

浙公网安备 33010602011771号