IT序号网

斗地主洗牌发牌测试类知识解答

developer 2021年05月25日 编程语言 154 0
 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 }

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。