1 /* 2 模擬斗地主的發牌功能(發牌完畢后發到手上的牌是有順序的) 3 分析: 4 A:創建一個HashMap集合 5 B:創建一個ArrayList集合 6 C:創建兩個字符串,一個是花色,一個是牌的數字 (發牌得有一盒牌) 7 為了方便以后的排序,創建這兩個字符串的時候,按照大小順序排列(斗地主中的大小順序) 8 大小王除外 9 D:把這兩個字符串放進HashMap集合中(拼接一起 花色+牌號) 同時給每個放進去牌進行編碼0--52並存儲 10 同時也給ArrayList集合中存儲編碼,大小王在這些編碼完成后再進行編碼 53 , 54 11 E:洗牌 12 F:發牌,其實發的是編號,由於要排序,所以創建TreeSet集合,斗地主是3人和底牌3張,對應4個集合, 13 a:利用取模的方法給3個人發牌,x%3=0;x%3=1;x%3=2 14 b:底牌發開始的3張 15 G:看牌,因為要使用3次這個功能,所以設定一個方法: 16 a:返回類型:void 17 b:參數列表:String name(玩家名字) ; TreeSet<Integer> i(牌的編號) ; HashMap<Integer,String> hm(牌) 18 */ 19 20 package zl_MapDemo; 21 22 import java.util.ArrayList; 23 import java.util.Collections; 24 import java.util.HashMap; 25 import java.util.TreeSet; 26 27 public class PokerDemo { 28 public static void main(String[] args) { 29 30 //創建一個HashMap集合 31 HashMap<Integer , String> poker = new HashMap<Integer , String>(); 32 33 //創建一個ArrayList集合 34 ArrayList<Integer> index = new ArrayList<Integer>(); 35 36 //創建兩個字符串,一個是花色,一個是牌的數字 (發牌得有一盒牌) 37 String[] colors = {"♦","♣","♥","♠"}; 38 39 String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", 40 "K", "A", "2", }; 41 //把這兩個字符串放進HashMap集合中(拼接一起 花色+牌號)同時給每個放進去牌進行編碼0--52並存儲 42 int count = 0; 43 for(String number : numbers){ 44 for(String color : colors){ 45 //拼接 46 String pk = color.concat(number); 47 //把編碼和牌存儲到HashMap中 48 poker.put(count, pk); 49 50 //把編碼存到ArrayList中 51 index.add(count); 52 53 count ++; 54 } 55 } 56 //給大小王編碼並存儲 57 poker.put(count, "小王"); 58 index.add(count); 59 count ++; 60 poker.put(count, "大王"); 61 index.add(count); 62 63 //洗牌 64 Collections.shuffle(index); 65 66 //發牌,由於要排序,所以創建TreeSet集合,斗地主是3人和底牌3張,對應4個集合, 67 TreeSet<Integer> player1 = new TreeSet<Integer>(); 68 TreeSet<Integer> player2 = new TreeSet<Integer>(); 69 TreeSet<Integer> player3 = new TreeSet<Integer>(); 70 TreeSet<Integer> dipai = new TreeSet<Integer>(); 71 72 //a:利用取模的方法給3個人發牌,x%3=0;x%3=1;x%3=2 b:底牌剩下的3張 73 //此時ArrayList中已經存儲了0-54的編碼 74 for(int x = 0 ;x < index.size() ; x ++){ 75 if(x >= index.size() - 3){ 76 dipai.add(index.get(x));//給底牌發ArrayList前3個編號,不能dipai.add(x),這樣給底牌的是0,1,2 77 } 78 else if(x % 3 == 0){ 79 player1.add(index.get(x)); 80 } 81 else if(x % 3 == 1){ 82 player2.add(index.get(x)); 83 } 84 else if(x % 3 == 2){ 85 player3.add(index.get(x)); 86 } 87 } 88 89 //看牌 90 lookpoker("玩家1", player1, poker); 91 lookpoker("玩家2", player2, poker); 92 lookpoker("玩家3", player3, poker); 93 lookpoker("底牌", dipai, poker); 94 } 95 96 //創建一個看牌的方法,a:返回類型:void 97 //b:參數列表:String name(玩家名字) ; TreeSet<Integer> i(牌的編號) ; HashMap<Integer,String> hm(牌) 98 public static void lookpoker(String name,TreeSet<Integer> i ,HashMap<Integer,String> hm) { 99 //首先是名字 100 System.out.print(name+"的牌是:"); 101 //其次是牌,遍歷 102 for(Integer key : i){ 103 //TreeSet的值就是HashMap的鍵,所以可以得到對應的值,也就是牌 104 String result = hm.get(key); 105 //輸出看到的牌 106 System.out.print(result+" "); 107 } 108 System.out.println(" "); 109 110 } 111 112 }