package chapter6.demo64; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Main { public static void main(String[] args) { /* 第一步:准备扑克牌的基本元素 */ // 准备4种花色 ArrayList colors = new ArrayList(); colors.add("♠"); colors.add("♥"); colors.add("♣"); colors.add("♦"); // 准备13种点数(2-10,J,Q,K,A) ArrayList point = new ArrayList(); for (int i = 2; i <= 10; i++) { point.add(i + ""); } point.add("J"); point.add("Q"); point.add("K"); point.add("A"); /* 第二步:组装54张扑克牌 */ // 用HashMap将每张牌的编号(0-53)与具体牌面对应起来 HashMap map = new HashMap(); int index = 0; // 牌的编号,从0开始 // 两层循环,生成52张普通牌(13点数 × 4花色) for (String number : point) { for (String color : colors) { // 将花色与数字组合,形成52张牌,并赋予其编号 map.put(index++, color + number); } } // 加入大小王,编号为52和53 map.put(index++, "小☺"); map.put(index++, "大☻"); /* 第三步:洗牌准备 */ // 准备一个数字序列,代表54张牌 ArrayList cards = new ArrayList(); for (int i = 0; i <= 53; i++) { cards.add(i); // 此时的cards顺序为0-53 } // 使用shuffle方法打乱牌的顺序(洗牌) Collections.shuffle(cards); /* 第四步:发牌 */ // 创建4个集合,分别存储三个玩家的牌和底牌 ArrayList iPlayer = new ArrayList(); // 玩家1的牌 ArrayList iPlayer2 = new ArrayList(); // 玩家2的牌 ArrayList iPlayer3 = new ArrayList(); // 玩家3的牌 ArrayList iSecretCards = new ArrayList(); // 底牌 // 发牌规则:留3张底牌,其余轮流发给3个玩家 for (int i = 0; i < cards.size(); i++) { if (i >= 51) { iSecretCards.add(cards.get(i));// 留取3张底牌 } else { if (i % 3 == 0) { iPlayer.add(cards.get(i)); // 与3取余为0的牌发给玩家1 } else if (i % 3 == 1) { iPlayer2.add(cards.get(i)); // 与3取余为1的牌发给玩家2 } else { iPlayer3.add(cards.get(i)); // 其余的牌发给玩家3 } } } /* 第五步:整理手牌 */ // 对每个玩家手中的牌排序 Collections.sort(iPlayer); Collections.sort(iPlayer2); Collections.sort(iPlayer3); /* 第六步:转换牌面并显示 */ // iPlayer 中的存储的是每个玩家拥有的牌的编号(0-53) // 将玩家手中的牌号转换为具体的牌面 ArrayList sPlayer = new ArrayList(); ArrayList sPlayer2 = new ArrayList(); ArrayList sPlayer3 = new ArrayList(); ArrayList sSecretCards = new ArrayList(); // 根据牌号,从map中找出对应的牌面 for (Integer key : iPlayer) { sPlayer.add(map.get(key)); } for (Integer key : iPlayer2) { sPlayer2.add(map.get(key)); } for (Integer key : iPlayer3) { sPlayer3.add(map.get(key)); } for (Integer key : iSecretCards) { sSecretCards.add(map.get(key)); } // 展示每个玩家的牌 System.out.println("玩家1:" + sPlayer); System.out.println("玩家2:" + sPlayer2); System.out.println("玩家3:" + sPlayer3); System.out.println("底牌:" + sSecretCards); } }