• 基于Java的斗地主游戏案例开发(做牌、洗牌、发牌、看牌


    1. package Game;
    2. import java.util.ArrayList;
    3. import java.util.Collections;
    4. public class PokerGame01 {
    5. //牌盒
    6. //♥3 ♣3
    7. static ArrayList list = new ArrayList<>();
    8. //静态代码块
    9. //特点:随着类的加载而在加载的,而且只执行一次。
    10. static {
    11. //准备牌
    12. // "♦", "♣", "♥", "♠"
    13. // "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"
    14. String[] color = {"♦", "♣", "♥", "♠"};
    15. String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
    16. for (String c : color) {
    17. //c表示每一个牌的花色
    18. for (String n : number) {
    19. //n表示每一种牌号
    20. list.add(c + n);
    21. }
    22. }
    23. list.add("大王");
    24. list.add("小王");
    25. }
    26. public PokerGame01() {
    27. // 洗牌
    28. Collections.shuffle(list);
    29. // 发牌
    30. //定义4个集合,其中3个选手的牌,还要一个是用来存储地主多出来的3张牌
    31. ArrayList dizhu = new ArrayList<>();
    32. ArrayList player1 = new ArrayList<>();
    33. ArrayList player2 = new ArrayList<>();
    34. ArrayList player3 = new ArrayList<>();
    35. for (int i = 0; i < list.size(); i++) {
    36. //根据索引找到牌号,本质是要把前三张牌给地主
    37. String poke = list.get(i);//得到了第i张牌
    38. if (i <= 2) {
    39. dizhu.add(poke);//前三张给地主
    40. //依次轮流给3个选手发牌
    41. } else if (i % 3 == 0) {
    42. player1.add(poke);
    43. } else if (i % 3 == 1) {
    44. player2.add(poke);
    45. } else {
    46. player3.add(poke);
    47. }
    48. }
    49. //看牌
    50. lookpoke("张三",player1);
    51. lookpoke("李四",player2);
    52. lookpoke("王五",player3);
    53. }
    54. public void lookpoke(String name, ArrayList list) {
    55. System.out.print(name + ": ");
    56. for (String poke : list) {
    57. //循环遍历得到每一张牌
    58. System.out.print(poke + " ");
    59. }
    60. System.out.println();
    61. }
    62. }

    排序的

    1. package Game;
    2. import java.util.*;
    3. public class PokerGame02 {
    4. //牌盒
    5. //♥3 ♣3
    6. //键是序号,牌是值
    7. //此时只要把牌跟序号产生对应关系即可,不需要按照序号进行排序,所以只需HashMap即可
    8. static HashMap hm = new HashMap<>();
    9. //用来存储序号的单列集合
    10. static ArrayList list = new ArrayList<>();
    11. //静态代码块
    12. //特点:随着类的加载而在加载的,而且只执行一次。
    13. static {
    14. //准备牌
    15. // "♦", "♣", "♥", "♠"
    16. // "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"
    17. String[] color = {"♦", "♣", "♥", "♠"};
    18. String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
    19. /*
    20. {1=♦3, 2=♦4, 3=♦5, 4=♦6, 5=♦7, 6=♦8, 7=♦9, 8=♦10, 9=♦J, 10=♦Q, 11=♦K, 12=♦A, 13=♦2, 14=♣3,
    21. 15=♣4, 16=♣5, 17=♣6, 18=♣7, 19=♣8, 20=♣9, 21=♣10, 22=♣J, 23=♣Q, 24=♣K, 25=♣A, 26=♣2, 27=♥3,
    22. 28=♥4, 29=♥5, 30=♥6, 31=♥7, 32=♥8, 33=♥9, 34=♥10, 35=♥J, 36=♥Q, 37=♥K, 38=♥A, 39=♥2, 40=♠3,
    23. 41=♠4, 42=♠5, 43=♠6, 44=♠7, 45=♠8, 46=♠9, 47=♠10, 48=♠J, 49=♠Q, 50=♠K, 51=♠A, 52=♠2}
    24. 很明显可以看出没有按照顺序起好牌 应该先把数字一样的放在一起,而不是把花色一样的放在一起
    25. 解决: 交换color和number即可
    26. */
    27. //定义一个序号
    28. int num = 1;
    29. for (String n : number) {
    30. //n表示每一种牌号
    31. for (String c : color) {
    32. //c表示每一个牌的花色
    33. hm.put(num, c + n);
    34. list.add(num);
    35. num++;
    36. }
    37. }
    38. hm.put(num, "小王");
    39. list.add(num);
    40. num++;
    41. hm.put(num, "大王");
    42. list.add(num);
    43. }
    44. public PokerGame02() {
    45. // 洗牌
    46. Collections.shuffle(list);
    47. // 发牌
    48. /*
    49. [39, 35, 7]
    50. [28, 31, 15, 54, 14, 24, 3, 46, 43, 22, 37, 41, 29, 45, 16, 30, 48]
    51. [33, 49, 11, 13, 38, 27, 25, 50, 20, 9, 1, 32, 19, 10, 44, 21, 40]
    52. [53, 8, 34, 36, 17, 42, 5, 18, 2, 23, 12, 26, 4, 47, 6, 51, 52]
    53. ArrayList集合存储的索引是乱序的,我们本质是要根据序号也就是索引去到map集合里面找到牌,所以序号要有序
    54. */
    55. /*
    56. [5, 10, 34]
    57. [2, 4, 7, 8, 13, 17, 18, 19, 20, 22, 27, 35, 37, 38, 39, 40, 42]
    58. [1, 9, 14, 16, 23, 24, 28, 29, 30, 31, 32, 36, 41, 43, 46, 51, 52]
    59. [3, 6, 11, 12, 15, 21, 25, 26, 33, 44, 45, 47, 48, 49, 50, 53, 54]
    60. */
    61. //定义4个集合,其中3个选手的牌,还要一个是用来存储地主多出来的3张牌
    62. TreeSet dizhu = new TreeSet<>();
    63. TreeSet player1 = new TreeSet<>();
    64. TreeSet player2 = new TreeSet<>();
    65. TreeSet player3 = new TreeSet<>();
    66. //获取所有的键,把这些键放入单列集合当中
    67. // Set integers1 = hm.keySet();
    68. for (int i = 0; i < list.size(); i++) {
    69. //根据索引找到牌的序号,本质是要把前三张牌的序号给地主
    70. int number = list.get(i); //得到了第i张牌的序号
    71. if (i <= 2) {
    72. dizhu.add(number); //前三张牌的序号给地主
    73. // integers1.add(poke);
    74. //依次轮流给3个选手发牌
    75. } else if (i % 3 == 0) {
    76. player1.add(number);
    77. } else if (i % 3 == 1) {
    78. player2.add(number);
    79. } else {
    80. player3.add(number);
    81. }
    82. }
    83. //看牌
    84. lookpoke("底牌",dizhu);
    85. lookpoke("张三",player1);
    86. lookpoke("李四",player2);
    87. lookpoke("王五",player3);
    88. // look("赵六",integers1);
    89. }
    90. /*
    91. * 参数一:玩家的名字
    92. * 参数二:牌的序号
    93. * */
    94. public void lookpoke(String name, TreeSet ts) {
    95. System.out.print(name + ": ");
    96. for (int num : ts) {
    97. //num就是代表的是序号,遍历方法1 通过键找值的方式遍历map集合
    98. //遍历TreeSet集合得到每一个序号,再拿着序号到Map集合中去找真正的牌
    99. String poke = hm.get(num);//通过键(序号)拿到了每一张牌(值)
    100. System.out.print(poke + " ");
    101. }
    102. System.out.println();
    103. }
    104. //遍历单列集合,得到每一个键;
    105. /* public void look(String name, Set<Integer> key) {
    106. System.out.print(name+": ");
    107. //遍历单列集合,得到每一个键
    108. for (int num : key) {
    109. //num代表就是序号
    110. //通过序号(键)去找到map集合里面的值
    111. String value = hm.get(num);
    112. System.out.print(value+" ");
    113. }
    114. System.out.println();
    115. }*/
    116. }

    1. package Game;
    2. import java.util.ArrayList;
    3. import java.util.Collections;
    4. import java.util.Comparator;
    5. import java.util.HashMap;
    6. public class PokerGame03 {
    7. //牌盒
    8. //♥3 ♣3
    9. static ArrayList list = new ArrayList<>();
    10. //创建一个集合,用来添加牌的价值,牌号是键,价值是值
    11. static HashMap hm = new HashMap<>();
    12. //静态代码块
    13. //特点:随着类的加载而在加载的,而且只执行一次。
    14. static {
    15. //准备牌
    16. // "♦", "♣", "♥", "♠"
    17. // "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"
    18. String[] color = {"♦", "♣", "♥", "♠"};
    19. String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
    20. for (String c : color) {
    21. //c表示每一个牌的花色
    22. for (String n : number) {
    23. //n表示每一种牌号
    24. list.add(c + n);
    25. }
    26. }
    27. list.add(" 大王");
    28. list.add(" 小王");
    29. //指定牌的价值
    30. //牌上的数字到Map集合中判断是否存在
    31. //存在,获取价值
    32. //不存在,本身的数字就是价值
    33. hm.put("J", 11);
    34. hm.put("Q", 12);
    35. hm.put("K", 13);
    36. hm.put("A", 14);
    37. hm.put("2", 15);
    38. hm.put("小王", 50);
    39. hm.put("大王", 100);
    40. }
    41. public PokerGame03() {
    42. // 洗牌
    43. Collections.shuffle(list);
    44. // 发牌
    45. //定义4个集合,其中3个选手的牌,还要一个是用来存储地主多出来的3张牌
    46. ArrayList dizhu = new ArrayList<>();
    47. ArrayList player1 = new ArrayList<>();
    48. ArrayList player2 = new ArrayList<>();
    49. ArrayList player3 = new ArrayList<>();
    50. for (int i = 0; i < list.size(); i++) {
    51. //根据索引找到牌号,本质是要把前三张牌给地主
    52. String poke = list.get(i);//得到了第i张牌
    53. if (i <= 2) {
    54. dizhu.add(poke);//前三张给地主
    55. //依次轮流给3个选手发牌
    56. } else if (i % 3 == 0) {
    57. player1.add(poke);
    58. } else if (i % 3 == 1) {
    59. player2.add(poke);
    60. } else {
    61. player3.add(poke);
    62. }
    63. }
    64. //排序
    65. order(dizhu);
    66. order(player1);
    67. order(player2);
    68. order(player3);
    69. //看牌
    70. lookpoke("张三",player1);
    71. lookpoke("李四",player2);
    72. lookpoke("王五",player3);
    73. lookpoke("底牌",dizhu);
    74. }
    75. //利用牌的价值进行排序
    76. //参数:集合
    77. //♥5 ♥3 ♥6 ♥7 ♥9
    78. private void order(ArrayList list) {
    79. Collections.sort(list, new Comparator() {
    80. @Override
    81. public int compare(String o1, String o2) {
    82. //o1:表示当前要插入到有序序列中的牌
    83. //o2:表示已经在有序序列中存在的牌
    84. //负数:o1小 插入到前面
    85. //正数:o1大 插入到后面
    86. //0:o1的数字跟o2的数字是一样的,需要按照花色再次排序
    87. //1.计算o1的花色和价值
    88. String color1 = o1.substring(0, 1);;//♥3中的♥
    89. //价值
    90. int value1 = getValue(o1);
    91. //2.计算o2的花色和价值
    92. String color2= o1.substring(0, 1);//♥3中的♥
    93. //价值
    94. int value2 = getValue(o2);
    95. //3.比较o1和o2的价值 ♥3 ♠3
    96. int i = value1 - value2;
    97. return i == 0 ? color1.compareTo(color2) : i;
    98. }
    99. });
    100. }
    101. //计算牌的价值
    102. //参数:牌
    103. //返回值:价值
    104. public int getValue(String poker) { //♥3
    105. //获取牌上的数字
    106. String number = poker.substring(1);//比如♥3中的3
    107. //把这里截取出来的结果,让这个结果再Map集合中存在
    108. /*
    109. hm.put("J", 11);
    110. hm.put("Q", 12);
    111. hm.put("K", 13);
    112. hm.put("A", 14);
    113. hm.put("2", 15);
    114. hm.put("小王", 50);
    115. hm.put("大王", 100);
    116. */
    117. //如果不存在类型转换 如"3"的价值就值3
    118. //如果存在在map集合里面拿出对应的价值即可
    119. //拿着数字到map集合中判断是否存在
    120. if (hm.containsKey(number)) {
    121. //存在,获取价值
    122. return hm.get(number);
    123. } else {
    124. //不存在,类型转换
    125. return Integer.parseInt(number);
    126. }
    127. }
    128. public void lookpoke(String name, ArrayList list) {
    129. System.out.print(name + ": ");
    130. for (String poke : list) {
    131. //循环遍历得到每一张牌
    132. System.out.print(poke + " ");
    133. }
    134. System.out.println();
    135. }
    136. }

  • 相关阅读:
    SpringMVC之入门
    简述直线模组的发展前景
    基于Python实现k-means算法和混合高斯模型
    docker命令
    Leo赠书活动-03期 【ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践 】
    APM32F0XX/STM32F0XX停机模式功耗测试
    《CTF攻防世界web题》之我什么都不会(1)
    [工具]工控机磁盘容量监控通知工具
    Bootstrap5 表格
    RNA脂质体纳米颗粒|雷公藤内酯醇脂质体纳米颗粒负载RNA核糖核酸|规格信息
  • 原文地址:https://blog.csdn.net/weixin_65752158/article/details/140422669