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

Posted hqjava

tags:

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

 1 //模拟斗地主发牌洗牌
 2 
 3 //导包
 4 
 5 import java.util.ArrayList;
 6 import java.util.Collections;
 7 import java.util.HashMap;
 8 
 9 public class Test {
10     public static void main(String[] args) {
11         //1.创建一副牌
12         HashMap<Integer, String> pk = new HashMap<>();//存整副牌
13         ArrayList<Integer> mark = new ArrayList<>();//存牌号()
14 
15         //将大小王加入到整副牌中
16         pk.put(0, "大王");
17         pk.put(1, "小王");
18         mark.add(0);
19         mark.add(1);
20 
21         String[] colors = {"♠", "♥", "♣", "♦"};//花色
22         String[] nums = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};//牌的大小顺序
23 
24         int index = 2;//大小王已经加进去了所以从索引2开始加入
25         //双循环,外层为花色,内层为牌的大小,,外4内13
26         for (String num : nums) {
27             for (String color : colors) {
28                 String pker = color + num;//将花色+牌数赋值给字符串
29                 pk.put(index, pker);//再将字符串加入到整副牌中
30                 mark.add(index);//将索引加入牌号中
31                 index++;
32             }
33         }
34 
35         //2.洗牌
36         Collections.shuffle(mark);//将牌号顺序打乱
37 
38         //3.发牌
39         ArrayList<Integer> list1 = new ArrayList<>();//存玩家一(0,3,6...)
40         ArrayList<Integer> list2 = new ArrayList<>();//存玩家二(1,4,7...)
41         ArrayList<Integer> list3 = new ArrayList<>();//存玩家三(2,5,8...)
42         ArrayList<Integer> list4 = new ArrayList<>();//存底牌(51,52,53)
43 
44         for (int i = 0; i < mark.size(); i++) {
45             Integer num = mark.get(i);//将牌号赋值给变量
46             if (i >= 51) {
47                 list4.add(num);//将合适的牌号存入玩家对应玩家中
48             } else if (i % 3 == 0) {
49                 list1.add(num);
50             } else if (i % 3 == 1) {
51                 list2.add(num);
52             } else if (i % 3 == 2) {
53                 list3.add(num);
54             }
55         }
56 
57         //将三个玩家牌进行排序
58         Collections.sort(list1);
59         Collections.sort(list2);
60         Collections.sort(list3);
61 
62         //4.看牌
63         showPK("玩家一", list1, pk);//将牌号和整副牌传过去
64         showPK("玩家二", list2, pk);
65         showPK("玩家三", list3, pk);
66         showPK("底  牌", list4, pk);
67     }
68 
69     private static void showPK(String name, ArrayList<Integer> player, HashMap<Integer, String> pookerMap) {
70         System.out.print(name + ":  ");
71         //循环玩家存储的牌号,在利用牌号去整副牌取出对应的牌
72         for (Integer pookerNum : player) {
73             String thisPooker = pookerMap.get(pookerNum);
74             System.out.print(thisPooker + "	");
75         }
76         System.out.println();
77     }
78 }

玩家一: 大王 ♥2 ♣2 ♥A ♥K ♥Q ♣J ♠8 ♥8 ♣8 ♦8 ♠7 ♣7 ♥6 ♣5 ♥4 ♠3
玩家二: 小王 ♠2 ♦2 ♣A ♠Q ♣Q ♥J ♥10 ♠9 ♥9 ♦9 ♥7 ♠6 ♣6 ♦6 ♥5 ♣3
玩家三: ♠A ♦A ♠K ♣K ♦K ♦Q ♠J ♦J ♠10 ♦10 ♣9 ♦7 ♦5 ♠4 ♦4 ♥3 ♦3
底 牌: ♠5 ♣10 ♣4

 

以上是关于java集合--模拟斗地主发牌洗牌的主要内容,如果未能解决你的问题,请参考以下文章

java 18 - 12 模拟斗地主洗牌发牌,并对发的牌进行排序

代码实现:模拟斗地主洗牌和发牌,牌没有排序

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

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

模拟斗地主洗牌发牌-JAVA

Java模拟斗地主发牌和洗牌