/* 劉意教程示例:*/package cn.onecool.cot; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; /* * 思路: * A:建立一個HashMap集合初始化一副牌 * B:建立一個ArrayList集合,在這個集合中保存在A中的HashMap中存放的那副牌的存放編號 * C:建立花色數組和點數數組 * D:從0開始往HashMap裏面存儲編號,並存儲對應的牌,同時往ArrayList裏面存儲編號便可(ArrayList中存放的編號用於洗牌時將牌打亂)。 * E:洗牌(洗的是ArrayList中存放的牌的編號) * F:發牌(發的也是編號,爲了保證編號是排序的,就建立TreeSet集合接收,不然看牌時,發的牌順序都是亂的,不符合現實) * G:看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌) */ public class PokerDemo { public static void main(String[] args) { // 建立一個HashMap集合,這個Map是存放整個一副牌的。 HashMap<Integer, String> hm = new HashMap<Integer, String>(); // 建立一個ArrayList集合,這個List只存放牌的編號,洗牌時將這個List中的編號打亂便可實現洗牌了。 ArrayList<Integer> array = new ArrayList<Integer>(); // 建立花色數組和點數數組 // 定義一個花色數組 String[] colors = { "♠", "♥", "♣", "♦" };//根據實際,存放牌的花色:梅花、方片、黑桃、紅桃 // 定義一個點數數組 String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; // 從0開始往HashMap裏面存儲編號,並存儲對應的牌,同時往ArrayList裏面存儲編號便可。 int index = 0; for (String number : numbers) { for (String color : colors) { String poker = color.concat(number);//調用String的concat方法,實現字符串的鏈接,最後造成如,紅桃三、黑桃4.....這個地方也可直接 用字符串鏈接操做:String poker = color + number; hm.put(index, poker); array.add(index); index++; } } hm.put(index, "小王"); array.add(index); index++; hm.put(index, "大王"); array.add(index); // 洗牌(洗的是編號) Collections.shuffle(array); //調用Colections類的方法實現洗牌 // 發牌(發的也是編號,爲了保證編號是排序的,就建立TreeSet集合接收) TreeSet<Integer> fengQingYang = new TreeSet<Integer>(); TreeSet<Integer> linQingXia = new TreeSet<Integer>(); TreeSet<Integer> liuYi = new TreeSet<Integer>(); TreeSet<Integer> diPai = new TreeSet<Integer>(); for (int x = 0; x < array.size(); x++) { if (x >= array.size() - 3) {//發牌時,有3張底牌是不用發的。 diPai.add(array.get(x)); } else if (x % 3 == 0) {//發牌的原理:一共3人,每一圈發牌時每人發一張,總共除了底牌,每人發17張牌。第一張發給A,第二張發給B,第三張發 給C,如此循環,直到發完。生第一次發牌時,x=0, x%3==0,x此時A得牌;而後x=1,x%3==1,B得牌;而後x=2,x%3==2,C得牌。 。。以此類推,發完爲止(注意,有幾我的打牌,這裏的被除數就是幾,好比4人遊戲即對x%4做相應的判斷。) fengQingYang.add(array.get(x)); } else if (x % 3 == 1) {//B得一張牌 linQingXia.add(array.get(x)); } else if (x % 3 == 2) {//C得一張牌 liuYi.add(array.get(x)); } } // 看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌) lookPoker("風清揚", fengQingYang, hm); lookPoker("林青霞", linQingXia, hm); lookPoker("劉意", liuYi, hm); lookPoker("底牌", diPai, hm); } // 寫看牌的功能 public static void lookPoker(String name, TreeSet<Integer> ts, HashMap<Integer, String> hm) { System.out.print(name + "的牌是:"); for (Integer key : ts) { String value = hm.get(key); System.out.print(value + " "); } System.out.println(); } }