java 18 - 12 模擬斗地主洗牌、發牌,並對發的牌進行排序


 

  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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM