1 package com.hxl; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.HashMap; 6 import java.util.TreeSet; 7 8 /** 9 * 这是一个斗地主洗牌发牌的测试类 10 * 11 * @author Schiller_Hu 12 * @version v1.0 13 * @since 2018.2.20 14 * 15 */ 16 17 public class Test { 18 public static void main(String[] args) { 19 // 定义花色数组 20 String[] color = { "黑桃", "红桃", "梅花", "方块" }; 21 // 定义点数数组 22 String[] point = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", 23 "K", "A", "2" }; 24 // 定义ArrayList集合,存储卡牌对应的唯一的编号 25 ArrayList<Integer> cardNums = new ArrayList<Integer>(); 26 // 实例化HashMap存储映射关系,序号与对应卡牌 27 HashMap<Integer, String> cardMaps = new HashMap<Integer, String>(); 28 // 编号变量 29 int num = 0; 30 // 组合点数与花色,生成所有卡牌,存入键值对与单列集合ArrayList中 31 for (int i = 0; i < point.length; i++) { 32 for (int j = 0; j < color.length; j++) { 33 cardMaps.put(num, color[j] + point[i]); 34 cardNums.add(num); 35 num++; 36 } 37 } 38 // 再加上大小王 39 cardMaps.put(num, "小王"); 40 cardNums.add(num); 41 num++; 42 cardMaps.put(num, "大王"); 43 cardNums.add(num); 44 45 // 洗牌,打乱ArrayList中元素的编号,在按该乱序发牌 46 Collections.shuffle(cardNums); 47 48 // 先定义存放四份牌的容器,分别是玩家1、玩家2、玩家3、底牌(发剩下的3张牌) 49 TreeSet<Integer> player1 = new TreeSet<Integer>(); 50 TreeSet<Integer> player2 = new TreeSet<Integer>(); 51 TreeSet<Integer> player3 = new TreeSet<Integer>(); 52 TreeSet<Integer> diPai = new TreeSet<Integer>(); 53 54 // 给三个人发牌,留3张做底牌,就是发编号 55 for (int i = 0; i < cardNums.size(); i++) { 56 if (i >= cardNums.size() - 3) { 57 diPai.add(cardNums.get(i)); 58 } else if (i % 3 == 0) { 59 player1.add(cardNums.get(i)); 60 } else if (i % 3 == 1) { 61 player2.add(cardNums.get(i)); 62 } else if (i % 3 == 2) { 63 player3.add(cardNums.get(i)); 64 } 65 } 66 // 看牌 67 lookCards("玩家1", player1, cardMaps); 68 lookCards("玩家2", player2, cardMaps); 69 lookCards("玩家3", player3, cardMaps); 70 lookCards("底牌", diPai, cardMaps); 71 } 72 73 /** 74 * 看牌方法,我们得到的是牌的编号,要还原为牌的花色点数本身 75 * 76 * @param name 77 * 玩家名称 78 * @param cardNums 79 * 该玩家所获得的编号集合 80 * @param cardMaps 81 * 编号与卡牌的映射集合 82 */ 83 public static void lookCards(String name, TreeSet<Integer> player, 84 HashMap<Integer, String> cardMaps) { 85 System.out.print(name + ":"); 86 for (Integer i : player) { 87 System.out.print(cardMaps.get(i) + ","); 88 } 89 System.out.println(); 90 } 91 }