规则解析
游戏使用一副除去大小王的扑克牌,共4个花色52张牌。
1、豹子(AAA最大,222最小)。
2、同花顺(AKQ最大,A23最小)。
3、同花(AKJ最大,352最小)。
4、顺子(AKQ最大,234最小)。
5、对子(AAK最大,223最小)。
6、单张(AKJ最大,352最小)。
1------->6依次变小,如豹子赢同花顺,同花顺赢同花。
玩“诈金花”可能牌小诈走牌大,是实力、勇气和智谋的较量,是冒险家的游戏。
代码如何去写
首先对游戏进行分析,可想而知,现实生活中,扎金花怎么玩。无非就是找到一副牌,洗牌发牌,比较大小,判定输赢,那么我们可以将代码分为四个大块。
1、找到一副牌
生成一个包含52张牌的集合,其中包含大小和花色。
代码部分:
//生成52张牌的集合
private static void createPoker(ArrayList<String> poker) {
String[] mun = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13" };
String[] flow = { "0", "红桃", "黑桃", "梅花", "方块" };
// 循环得到52张牌,花色和点数用空格隔开
for (int i = 1; i <= 13; i++) {
for (int j = 1; j <= 4; j++) {
poker.add(flow[j] + " " + mun[i]);
}
}
}
2、洗牌发牌
编写一个ShufflingPoker的方法,其中有三个参数,分别是玩家一的集合、玩家二的集合、52张牌的集合,通过随机函数,将52张牌随机选取6张,分别给玩家一和玩家二,从而达成洗牌发牌操作。
代码部分:
//给玩家1和玩家2随机分发三张牌
private static void ShufflingPoker(ArrayList<String> playerOne, ArrayList<String> playerTow,ArrayList<String> poker) {
// 清空集合
playerOne.clear();
playerTow.clear();
// 定义标记
int[] flag = new int[52];
// 生成随机数
Random rd = new Random();
// 生成3个随机牌,前三个给playOne,后三个给palyTow
for (int i = 1; i <= 6; i++) {
int p = rd.nextInt(52);
if (i <= 3) {
if (flag[p] != 1) {
playerOne.add(poker.get(p));
flag[p] = 1;
} else {
i--;
}
} else {
if (flag[p] != 1) {
playerTow.add(poker.get(p));
flag[p] = 1;
} else {
i--;
}
}
}
}
3、比较大小
先给两副牌判定等级,豹子>同花顺>同花>顺子>对子>单张,分别将等级分为1,2,3,4,5,6个等级。
//判断玩家的等级
private static int DecisionLevel(ArrayList<String> player) {
// 得到三张牌
String p1 = player.get(0);
String p2 = player.get(1);
String p3 = player.get(2);
// 切割
String[] word1 = p1.split(" ");
String[] word2 = p2.split(" ");
String[] word3 = p3.split(" ");
// 得到三张牌的点数
int num1 = Integer.parseInt(word1[1]);
int num2 = Integer.parseInt(word2[1]);
int num3 = Integer.parseInt(word3[1]);
// 得到三张牌的花色
String flower1 = word1[0];
String flower2 = word2[0];
String flower3 = word3[0];
// 判断点数是否顺子,顺子输出true,非顺子输出false
boolean isContinuity = getContinuity(num1, num2, num3);
// 判断是否为同花,是true,否false
boolean isSame = getSome(flower1, flower2, flower3);
// 判断是豹子
if (num1 == num2 && num1 == num3) {
return 1;
}
// 判断是同花顺
else if (isSame == true && isContinuity == true) {
return 2;
}
// 判断是同花 非 同花顺
else if (isSame == true && isContinuity == false) {
return 3;
}
// 判断是顺子 非 同花顺
else if (isSame == false && isContinuity == true) {
return 4;
}
// 判断是对子
else if (num1 == num2 || num1 == num3 || num2 == num3) {
return 5;
}
else {
return 6;
}
}
同等级之间进行比较,以都是跑豹子为例:
// 如果都是豹子,判断大小
if (grade1 == 1) {
if (tnum1 == 1) {
tnum1 = 14;
tnum2 = 14;
tnum3 = 14;
}
if (num1 == 1) {
num1 = 14;
num2 = 14;
num3 = 14;
}
if (num1 > tnum1) {
return 1;
} else {
return 2;
}
}
4、判定输赢:
// 输出输赢
if (VictoryPalyer == 1) {
System.out.println("玩家1赢了");
}
if (VictoryPalyer == 2) {
System.out.println("玩家2赢了");
}
总体代码浏览
//main方法
public static void main(String[] args) {
ArrayList<String> poker = new ArrayList<String>();
ArrayList<String> playerOne = new ArrayList<String>();
ArrayList<String> playerTow = new ArrayList<String>();
// 生成扑克牌
createPoker(poker);
// 发牌
ShufflingPoker(playerOne, playerTow, poker);
// 比较大小
int VictoryPalyer = ComparePoker(playerOne, playerTow);
// 重新定义牌输出
AgainDef(playerOne, playerTow);
System.out.print("玩家1: ");
for (String string : playerOne) {
System.out.print(string + "\t");
}
System.out.println();
System.out.print("玩家2: ");
for (String string : playerTow) {
System.out.print(string + "\t");
}
System.out.println();
// 输出输赢
if (VictoryPalyer == 1) {
System.out.println("玩家1赢了");
}
if (VictoryPalyer == 2) {
System.out.println("玩家2赢了");
}
}
//判断方法
private static void AgainDef(ArrayList<String> playerOne, ArrayList<String> playerTow) {
String p1 = playerOne.get(0);
String p2 = playerOne.get(1);
String p3 = playerOne.get(2);
// 切割
String[] word1 = p1.split(" ");
String[] word2 = p2.split(" ");
String[] word3 = p3.split(" ");
// 得到三张牌的点数
int num1 = Integer.parseInt(word1[1]);
int num2 = Integer.parseInt(word2[1]);
int num3 = Integer.parseInt(word3[1]);
// 得到三张牌的花色
String flower1 = word1[0];
String flower2 = word2[0];
String flower3 = word3[0];
// 得到三张牌
String pp1 = playerTow.get(0);
String pp2 = playerTow.get(1);
String pp3 = playerTow.get(2);
// 切割
String[] wword1 = pp1.split(" ");
String[] wword2 = pp2.split(" ");
String[] wword3 = pp3.split(" ");
// 得到三张牌的点数
int tnum1 = Integer.parseInt(wword1[1]);
int tnum2 = Integer.parseInt(wword2[1]);
int tnum3 = Integer.parseInt(wword3[1]);
// 得到三张牌的花色
String tflower1 = wword1[0];
String tflower2 = wword2[0];
String tflower3 = wword3[0];
playerOne.clear();
playerTow.clear();
if (num1 == 1) {
playerOne.add(flower1 + "A");
} else if (num1 == 11) {
playerOne.add(flower1 + "J");
} else if (num1 == 12) {
playerOne.add(flower1 + "Q");
} else if (num1 == 13) {
playerOne.add(flower1 + "k");
} else {
playerOne.add(flower1 + num1);
}
if (num2 == 1) {
playerOne.add(flower2 + "A");
} else if (num2 == 11) {
playerOne.add(flower2 + "J");
} else if (num2 == 12) {
playerOne.add(flower2 + "Q");
} else if (num2 == 13) {
playerOne.add(flower2 + "k");
} else {
playerOne.add(flower2 + num2);
}
if (num3 == 1) {
playerOne.add(flower3 + "A");
} else if (num3 == 11) {
playerOne.add(flower3 + "J");
} else if (num3 == 12) {
playerOne.add(flower3 + "Q");
} else if (num3 == 13) {
playerOne.add(flower3 + "k");
} else {
playerOne.add(flower3 + num3);
}
if (tnum1 == 1) {
playerTow.add(tflower1 + "A");
} else if (tnum1 == 11) {
playerTow.add(tflower1 + "J");
} else if (tnum1 == 12) {
playerTow.add(tflower1 + "Q");
} else if (tnum1 == 13) {
playerTow.add(tflower1 + "K");
} else {
playerTow.add(tflower1 + tnum1);
}
if (tnum2 == 1) {
playerTow.add(tflower2 + "A");
} else if (tnum2 == 11) {
playerTow.add(tflower2 + "J");
} else if (tnum2 == 12) {
playerTow.add(tflower2 + "Q");
} else if (tnum2 == 13) {
playerTow.add(tflower2 + "K");
} else {
playerTow.add(tflower2 + tnum2);
}
if (tnum3 == 1) {
playerTow.add(tflower3 + "A");
} else if (tnum3 == 11) {
playerTow.add(tflower3 + "J");
} else if (tnum3 == 12) {
playerTow.add(tflower3 + "Q");
} else if (tnum3 == 13) {
playerTow.add(tflower3 + "K");
} else {
playerTow.add(tflower3 + tnum3);
}
}
运行
本作品采用知识共享署名 4.0 国际许可协议进行许可。
转载:https://blog.csdn.net/xl_gjp_LOVER/article/details/106316842
查看评论