package com.inmind.test07; import java.util.*; /* 按照斗地主的规则,完成洗牌发牌的动作。 具体规则: 组装54张扑克牌将 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。 查看三人各自手中的牌(按照牌的大小排序)、底牌 要求:使用双列集合实现 :键为牌的序号(排序),值为牌的名称 可以通过键找值的方式,来排序后看牌 */ public class Test14 { public static void main(String[] args) { //创建一个双列集合,键为牌的序号,值为牌名称 HashMap pokers = new HashMap<>(); //组装牌 String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; String[] colors = {"♦", "♣", "♥","♠" }; //1~54 对应54张牌,54张打乱 ArrayList keys = new ArrayList<>(); int key = 1; for (String num : nums) { for (String color : colors) { pokers.put(key, color + num); keys.add(key++); } } //大小王 pokers.put(key, "小王"); keys.add(key++); pokers.put(key, "大王"); keys.add(key); System.out.println(pokers); System.out.println(keys); //洗牌 Collections.shuffle(keys); System.out.println( keys); //创建4个集合(3个玩家和1个底牌) //创建一个降序的比较器给TreeSet使用 Comparator comparator = new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; } }; TreeSet player1 = new TreeSet<>(comparator); TreeSet player2 = new TreeSet<>(comparator); TreeSet player3 = new TreeSet<>(comparator); TreeSet dipai = new TreeSet<>(comparator); /* 玩家1 0 3 6 %3 = 0 玩家2 1 4 7 %3 = 1 玩家3 2 5 8 %3 = 2 */ for (int i = 0; i < keys.size(); i++) { if (i >= 51) { dipai.add(keys.get(i)); } else { if (i % 3 == 0) { player1.add(keys.get(i)); } else if (i % 3 == 1) { player2.add(keys.get(i)); } else { player3.add(keys.get(i)); } } } //看牌 showPokers("玩家1", player1, pokers); showPokers("玩家2", player2, pokers); showPokers("玩家3", player3, pokers); showPokers("底牌", dipai, pokers); } public static void showPokers(String name, TreeSet pokerKeys, Map pokers) { String content = name + ":"; //遍历键值,双列集合中,键找值 for (Integer pokerKey : pokerKeys) { content += pokers.get(pokerKey) + " "; } System.out.println(content); } }