斗地主洗牌发牌测试类

Posted 化身孤岛的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斗地主洗牌发牌测试类相关的知识,希望对你有一定的参考价值。

 1 package com.hxl;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.HashMap;
 6 import java.util.TreeSet;
 7 
 8 /**
 9  * 这是一个斗地主洗牌发牌的测试类
10  * 
11  * @author Schiller_Hu
12  * @version v1.0
13  * @since 2018.2.20
14  * 
15  */
16 
17 public class Test {
18     public static void main(String[] args) {
19         // 定义花色数组
20         String[] color = { "黑桃", "红桃", "梅花", "方块" };
21         // 定义点数数组
22         String[] point = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
23                 "K", "A", "2" };
24         // 定义ArrayList集合,存储卡牌对应的唯一的编号
25         ArrayList<Integer> cardNums = new ArrayList<Integer>();
26         // 实例化HashMap存储映射关系,序号与对应卡牌
27         HashMap<Integer, String> cardMaps = new HashMap<Integer, String>();
28         // 编号变量
29         int num = 0;
30         // 组合点数与花色,生成所有卡牌,存入键值对与单列集合ArrayList中
31         for (int i = 0; i < point.length; i++) {
32             for (int j = 0; j < color.length; j++) {
33                 cardMaps.put(num, color[j] + point[i]);
34                 cardNums.add(num);
35                 num++;
36             }
37         }
38         // 再加上大小王
39         cardMaps.put(num, "小王");
40         cardNums.add(num);
41         num++;
42         cardMaps.put(num, "大王");
43         cardNums.add(num);
44 
45         // 洗牌,打乱ArrayList中元素的编号,在按该乱序发牌
46         Collections.shuffle(cardNums);
47 
48         // 先定义存放四份牌的容器,分别是玩家1、玩家2、玩家3、底牌(发剩下的3张牌)
49         TreeSet<Integer> player1 = new TreeSet<Integer>();
50         TreeSet<Integer> player2 = new TreeSet<Integer>();
51         TreeSet<Integer> player3 = new TreeSet<Integer>();
52         TreeSet<Integer> diPai = new TreeSet<Integer>();
53 
54         // 给三个人发牌,留3张做底牌,就是发编号
55         for (int i = 0; i < cardNums.size(); i++) {
56             if (i >= cardNums.size() - 3) {
57                 diPai.add(cardNums.get(i));
58             } else if (i % 3 == 0) {
59                 player1.add(cardNums.get(i));
60             } else if (i % 3 == 1) {
61                 player2.add(cardNums.get(i));
62             } else if (i % 3 == 2) {
63                 player3.add(cardNums.get(i));
64             }
65         }
66         // 看牌
67         lookCards("玩家1", player1, cardMaps);
68         lookCards("玩家2", player2, cardMaps);
69         lookCards("玩家3", player3, cardMaps);
70         lookCards("底牌", diPai, cardMaps);
71     }
72 
73     /**
74      * 看牌方法,我们得到的是牌的编号,要还原为牌的花色点数本身
75      * 
76      * @param name
77      *            玩家名称
78      * @param cardNums
79      *            该玩家所获得的编号集合
80      * @param cardMaps
81      *            编号与卡牌的映射集合
82      */
83     public static void lookCards(String name, TreeSet<Integer> player,
84             HashMap<Integer, String> cardMaps) {
85         System.out.print(name + ":");
86         for (Integer i : player) {
87             System.out.print(cardMaps.get(i) + ",");
88         }
89         System.out.println();
90     }
91 }

 

以上是关于斗地主洗牌发牌测试类的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList模拟斗地主的洗牌,发牌和看牌

斗地主之洗牌发牌----Java篇

代码实现:模拟斗地主洗牌和发牌并对牌进行排序的代码实现

Map集合HashMap集合LinkedHashMap集合Hashtable集合Collections工具类和模拟斗地主洗牌和发牌

模拟斗地主洗牌发牌(含有排序和不排序的)

java集合--模拟斗地主发牌洗牌