扎金花代码项目

规则解析

游戏使用一副除去大小王的扑克牌,共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 国际许可协议进行许可。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值