码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-06-15 14:23:46      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:else   for   取出   imp   nbsp   hashmap   hash   ade   pad   

 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 + "\t");
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集合--模拟斗地主发牌洗牌

标签:else   for   取出   imp   nbsp   hashmap   hash   ade   pad   

原文地址:https://www.cnblogs.com/hqjava/p/13130157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!