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 }