对于双列集合之map集合,它的相关知识点及拓展咱们都已经差不多学完了。接下来,就是带着大家如何灵活运用map进行一个实战教学,概念加实践相结合,才能让你更好的掌握与理解每一个知识点,废话不多说,我这就开始。
今天就给大家玩个有意思的,日常我们对于斗地主都司空见惯了,随时随地都可以玩儿,今天我要讲的案例就与它有关,不是实现三人斗地主输赢机制哈,这点有兴趣的小伙伴可以私下研究研究,我今天要演示的就是如何通过代码实现斗地主的洗牌发牌动作,而且就用map集合来实现,这个对于你们而言,难么?难度肯定有。
但是没关系,我会一步一步帮助大家分析,分析完再动手。
首先我们都知道,一副牌有54张,我们就严格按照斗地主的规则,通过代码来完成洗牌发牌动作。
如下是随机模拟了斗地主中三位小伙伴的手牌展示,并按从"大"到"小"的顺序进行排列。
如下是案例的具体规则:
注意:扑克牌从大到小的摆放顺序应为:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3。
接下来,就是对该场景进行分析模拟了。具体如下:
自定义好数字与扑克牌数字的对应映射关系,比如:0=大王,1=小王,2=♥2,3=♠2,4=♦2,5=♣2 ... ...依次类推。具体指定该映射关系,我们可以用到双列集合map,完成数字与扑克牌的对应关系(map字典)。
具体映射关系可参考如下:

洗牌的话就可以通过数字完成洗牌动作。代码层面可通过Collections.shuffle()方法来打乱元素顺序。
将每个人以及底牌设计为一个ArrayList
这一步就是要按照斗地主的排序规则,对各位玩家的手牌进行一个排序处理。
将各自手牌中的数字从map字典中取出对应的字符展示即可。代码实现:通过编号也就是map 的key,直接map.get(key)即可。
组装一副由54张扑克组成的扑克牌,由编号按斗地主牌面值顺序进行排序,说明一下,这样有序排列,目的是最后好按斗地主牌排序输出,如果乱序,怎么知道斗地主的牌面排序是如何呢?完全没有规则,所以从这里就得确定排序规则。
接下来就是对该小点实现步骤分析:
具体该创建map字典完整代码实现如下:
- /**
- * 组装54张扑克牌(扑克字典)
- * 用编号按牌的顺序组装好。
- */
- private Map
buildPorkMap() { -
- //1创建map字典
- Map
pokerMap = new HashMap<>(); -
- //2创建扑克中的 花色集合 与 数字集合
- List
colors = new ArrayList<>(); - List
numbers = new ArrayList<>(); -
- //3列举扑克中的花色与数字
- Collections.addAll(colors, "♦", "♣", "♥", "♠");
- Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
-
- //4大小王特例先存进map字段中
- int count = 0;
- pokerMap.put(count++, "大王");
- pokerMap.put(count++, "小王");
-
- //5组合花色与数字
- for (String number : numbers) {
- for (String color : colors) {
- //花色+数字
- String card = color + number;
- pokerMap.put(count++, card);
- }
- }
-
- return pokerMap;
- }
由于扑克牌中大小王是最大,且不跟花色数字一样,所以就单独进行map写入,大王为0,小王为1,其次就是根据扑克数字集合进行双遍历排列组合,编号就每次加1,这样就保证了同牌面值越大编号则越小,牌面值越小的值越大。
扑克字典顺序(pokerMap)展示如下:

具体完整pokerMap打印如下:
pokerMap:{0=大王, 1=小王, 2=♦2, 3=♣2, 4=♥2, 5=♠2, 6=♦A, 7=♣A, 8=♥A, 9=♠A, 10=♦K, 11=♣K, 12=♥K, 13=♠K, 14=♦Q, 15=♣Q, 16=♥Q, 17=♠Q, 18=♦J, 19=♣J, 20=♥J, 21=♠J, 22=♦10, 23=♣10, 24=♥10, 25=♠10, 26=♦9, 27=♣9, 28=♥9, 29=♠9, 30=♦8, 31=♣8, 32=♥8, 33=♠8, 34=♦7, 35=♣7, 36=♥7, 37=♠7, 38=♦6, 39=♣6, 40=♥6, 41=♠6, 42=♦5, 43=♣5, 44=♥5, 45=♠5, 46=♦4, 47=♣4, 48=♥4, 49=♠4, 50=♦3, 51=♣3, 52=♥3, 53=♠3}
这样你们直观的看, 是不是就一目了然,花色因为不需要考虑顺序,所以对于花色集合防御内循环,外循环有牌面值来固定,对于每一个牌面值它都有4种花色,这是扑克的特点,这大家别忽略掉了。