diff --git a/javaSE-day04/src/com/inmind/test04/Test14.java b/javaSE-day04/src/com/inmind/test04/Test14.java index c96179e..f74e6f7 100644 --- a/javaSE-day04/src/com/inmind/test04/Test14.java +++ b/javaSE-day04/src/com/inmind/test04/Test14.java @@ -1,4 +1,10 @@ package com.inmind.test04; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; + /* 按照斗地主的规则,完成洗牌发牌的动作。 (双列集合实现,不要使用自定义类) @@ -17,4 +23,99 @@ package com.inmind.test04; 注意:最后打印牌时,要有排序的效果 */ public class Test14 { + public static void main(String[] args) { + //1.准备54张牌(花色+数字) + HashMap pokerMap = new HashMap<>(); + //创建List来保存键值,针对键值进行打乱,摸牌,最后再根据键找值,拿到真正的牌即可 + ArrayList keys = new ArrayList<>(); + + String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; + String[] colors = { "♣", "♦","♥","♠"}; + + int index = 1; + for (String num : nums) { + for (String color : colors) { + String poker = color + num; + //将花色和排序整数,作为一个键值对,保存到map中 + pokerMap.put(index, poker); + keys.add(index); + index++; + } + } + + //添加大小王 + pokerMap.put(index, "小王"); + keys.add(index); + index++; + pokerMap.put(index, "大王"); + keys.add(index); + index++; + System.out.println(pokerMap.size()); + System.out.println(pokerMap); + System.out.println(keys); + + //2.洗牌(打乱顺序) + Collections.shuffle(keys); + System.out.println(keys); + + //3.创建3个集合对象保存每个玩家的牌,创建1个集合保存底牌(摸牌就是模指定的键即可,因为后期可以键(1~54)找值) + ArrayList player1 = new ArrayList<>(); + ArrayList player2 = new ArrayList<>(); + ArrayList player3 = new ArrayList<>(); + ArrayList dipai = new ArrayList<>(); + + /* + 按顺序,轮着抓 + 玩家1 0 3 6 index%3 == 0 + 玩家2 1 4 7 index%3 == 1 + 玩家3 2 5 8 index%3 == 2 + + 最后三张牌都给底牌 + */ + + for (int i = 0; i < keys.size(); i++) { + Integer key = keys.get(i); + //最后三张都给底牌,其他的判断下分别发给我每个玩家 + if (i >= 51) {//最后三张都给底牌 + dipai.add(key); + } else { + switch (i%3) { + case 0: + player1.add(key); + break; + case 1: + player2.add(key); + break; + case 2: + player3.add(key); + break; + } + } + } + + //4.打印集合的内容 + showPokers("玩家1",player1,pokerMap); + showPokers("玩家2",player2,pokerMap); + showPokers("玩家3",player3,pokerMap); + showPokers("底牌",dipai,pokerMap); + } + + //定义一个方法,来接收每个玩家手中的键值集合,根据双列集合找到对应的值,拼接展示即可 + public static void showPokers(String name, ArrayList keys, HashMap pokerMap) { + //先排序,遍历keys,找到值,拼接 + Collections.sort(keys, new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + return o2-o1; + } + });//自然排序 + + String pokers = ""; + for (Integer key : keys) { + String poker = pokerMap.get(key); + pokers += poker + " "; + } + + System.out.println(name+":"+pokers); + } }