1. 程式人生 > >模擬鬥地主洗牌發牌

模擬鬥地主洗牌發牌

hash 依次 system shuff 運行 add 準備 獲取 pri

(一)案例介紹: 按照鬥地主的規則,完成洗牌發牌的動作。 具體規則: 1.組裝54張撲克牌 2.將54張撲克牌的順序打亂 3.三個玩家參與遊戲,三人交替摸牌,沒人17張牌,最後三張留作底牌。 4.查看三人各自手中的牌(按照牌的大小排序)、底牌 手中撲克牌從大到小的擺放順序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3 (二)案例需求分析 1.準備牌 完成數字與牌的映射關系 使用雙列Map(HashMap)集合,完成一個數字與字符串字牌的對應關系(相當於一個字典)。 2.洗牌 通過數字完成洗牌發牌 3.發牌 將每個人以及底牌設計為ArrayList,將最後3張牌直接存放於底牌,剩余牌通過對3取模依次發牌。 存放的過程中要求數字大小與鬥地主規則的大小對應。 將代表不同字牌的數字分配給不同的玩家與底牌。 4.看牌 通過Map集合找打對應字符展示。 通過查詢字牌與數字的對應關系,由數字轉成紙牌字符串再進行展示。
 1
import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.HashMap; 4 import java.util.TreeSet; 5 6 public class Porker { 7 8 public static void main(String[] args) { 9 //聲明一個索引用於存儲牌 10 int index = 0; 11 //聲明花色集合 12 String [] color = {"方塊","紅桃","梅花","黑桃"};
13 //聲明牌數字集合 14 String [] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; 15 //創建一個集合用於存儲54張牌 16 HashMap<Integer, String> SumPorker = new HashMap<Integer, String>(); 17 for (String c : num) { 18 for (String n : color) { 19 String value = n + c;
20 SumPorker.put(index, value); 21 index++; 22 } 23 } 24 //添加大小王 25 SumPorker.put(index++, "Lk"); 26 SumPorker.put(index, "BK"); 27 printporker(SumPorker); 28 //創建一個集合,存儲54張牌的序號 29 ArrayList<Integer> SPindex = new ArrayList<Integer>(); 30 for (int i = 0; i < 54; i++) { 31 SPindex.add(i); 32 } 33 //打亂牌--洗牌 34 Collections.shuffle(SPindex); 35 //新建3個玩家和一個底牌,即TreeSet集合 36 TreeSet<Integer> play_1 = new TreeSet<Integer>(); 37 TreeSet<Integer> play_2 = new TreeSet<Integer>(); 38 TreeSet<Integer> play_3 = new TreeSet<Integer>(); 39 TreeSet<Integer> endPorker = new TreeSet<Integer>(); 40 for (int i = 0; i < SPindex.size(); i++) { 41 if (i>=SPindex.size()-3) 42 endPorker.add(SPindex.get(i)); 43 else if(i%3 == 1) 44 play_3.add(SPindex.get(i)); 45 else if(i%3 ==0) 46 play_2.add(SPindex.get(i)); 47 else 48 play_1.add(SPindex.get(i)); 49 } 50 System.out.println("玩家1:"); 51 END_1(play_1,SumPorker); 52 System.out.println("玩家2:"); 53 END_1(play_2,SumPorker); 54 System.out.println("玩家3:"); 55 END_1(play_3,SumPorker); 56 System.out.println("底牌:"); 57 END_1(endPorker,SumPorker); 58 } 59 //獲取洗牌後的牌 60 public static void END_1(TreeSet<Integer> gamer,HashMap<Integer,String> sumHashMap){ 61 for (int i : gamer) { 62 System.out.print(sumHashMap.get(i)+"\t"); 63 } 64 System.out.println(); 65 } 66 //輸出撲克牌 67 public static void printporker(HashMap<Integer, String> SumPorker){ 68 System.out.println("撲克牌:"); 69 for (int i = 0; i < SumPorker.size(); i++) { 70 if (i % 4 == 0) { 71 System.out.println(); 72 } 73 System.out.print(SumPorker.get(i)+"\t"); 74 } 75 System.out.println(); 76 } 77 78 }

運行結果:

 1 撲克牌:
 2 
 3 方塊3    紅桃3    梅花3    黑桃3    
 4 方塊4    紅桃4    梅花4    黑桃4    
 5 方塊5    紅桃5    梅花5    黑桃5    
 6 方塊6    紅桃6    梅花6    黑桃6    
 7 方塊7    紅桃7    梅花7    黑桃7    
 8 方塊8    紅桃8    梅花8    黑桃8    
 9 方塊9    紅桃9    梅花9    黑桃9    
10 方塊10    紅桃10    梅花10    黑桃10    
11 方塊J    紅桃J    梅花J    黑桃J    
12 方塊Q    紅桃Q    梅花Q    黑桃Q    
13 方塊K    紅桃K    梅花K    黑桃K    
14 方塊A    紅桃A    梅花A    黑桃A    
15 方塊2    紅桃2    梅花2    黑桃2    
16 Lk    BK    
17 玩家1:
18 紅桃4    方塊5    紅桃5    梅花5    方塊6    紅桃7    梅花9    黑桃9    方塊10    方塊Q    紅桃Q    梅花K    方塊A    紅桃A    梅花A    紅桃2    BK    
19 玩家2:
20 黑桃3    黑桃4    梅花7    黑桃7    方塊8    梅花8    方塊9    紅桃9    紅桃10    梅花10    黑桃10    黑桃J    黑桃Q    方塊K    黑桃K    梅花2    黑桃2    
21 玩家3:
22 方塊3    紅桃3    梅花3    方塊4    梅花4    紅桃6    梅花6    黑桃6    方塊7    紅桃8    黑桃8    紅桃J    梅花J    紅桃K    黑桃A    方塊2    Lk    
23 底牌:
24 黑桃5    方塊J    梅花Q    

模擬鬥地主洗牌發牌