java集合案例--模擬鬥地主
阿新 • • 發佈:2021-01-12
案例:模擬鬥地主發牌
需求:使用一個集合物件儲存一副撲克牌,將所有撲克牌的順序打亂,然後分發給用集合表示的三個
玩家和底牌,並列印玩家和底牌的集合內容
步驟
1.買牌 四個花,52張牌。
將花色和數字分別進行組合,生成所有的普通牌,手動新增“小王”,“大王”
2.洗牌和發牌
使用Collections攻擊類的shuffle()方法打亂牌的順序
3.看牌
遍歷牌推,將每一張牌分發到三個玩家集合中
留三張作為底牌
4.看牌
分別列印每個玩家集合的內容
1.買牌
花色和數字分別進行組合,生成所有的普通牌,手動新增“小王”,“大王”
//1.買牌 //1.1定義一個雙列集合,鍵:表示牌的編號 值:表示具體的牌 規則,編號越小,牌越小Map<Integer,String> map = new HashMap<>(); //1.2定義一個單列集合,用來儲存所有牌的編號 List<Integer> list = new ArrayList<>(); //1.3定義兩個陣列用來放牌 String[] colors = {"♥","♠","♦","♣"}; //花色 String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; //牌 //1.3用迴圈巢狀,獲取每一張牌(一個花色有四張牌) int num = 0; for (String number : nums) { //外迴圈一次,內迴圈一圈 外迴圈:獲取所有的牌 for (String color : colors) { //內迴圈: 獲取所有的花色 String poker = number+color; //拼接字串 map.put(num,poker); //新增到雙列集合中 list.add(num); //新增到單列集合中 num++; //編號自增一 } } map.put(num,"小王"); //新增小王 list.add(num++); //先運算 在自增 map.put(num,"大王"); //新增大王 list.add(num++); //先運算 在自增 System.out.println("所有的牌:"+map); System.out.println("所有的編號:"+ list);
2.洗牌和發牌
洗牌
2.1使用Collections攻擊類的shuffle()方法打亂牌的順序
2.2分別建立三個玩家集合物件和底牌集合物件
2.3遍歷牌推的每一張牌,分別將索引對3取模的值為0,1,2的牌存放到三個玩家集合中,將最後三張存放到底牌集合中
發牌
遍歷牌推,將每一張牌分發到三個玩家集合中
留三張作為底牌
//2.洗牌 Collections.shuffle(list); // 打亂單列集合中的編號 System.out.println("洗好牌以後,編號為:"+list); //3.發牌 //3.1建立四個玩家集合,一個集合存放底牌,三個玩家 List duanyu = new ArrayList(); List guojing = new ArrayList(); List yasuo = new ArrayList(); List dipai = new ArrayList(); //3.2具體的發牌動作,將所有和3取模,決定發給誰 for (int i = 0; i <list.size() ; i++) { Integer polerNum = list.get(i); //獲取編號 if(i<3){ dipai.add(polerNum); }else if(i%3==0){ duanyu.add(polerNum); }else if(i%3==1){ guojing.add(polerNum); }else if(i%3==2){ yasuo.add(polerNum); } } // System.out.println("底牌為:"+ dipai); // System.out.println("yasuo的牌:" + yasuo);
3.看牌
1.將玩家集合中的牌按自然順序進行排序 :Collections.sort(List)
2.列印玩家集合中的牌
3.重複上面的操作列印所有玩家的牌和底牌
//4.看牌 //定義一個方法,用來看牌 //方法名:printpoKer //引數列表 List<Integer>,Map<Integer,String> //返回值:String System.out.println("yasuo的牌為:"+printPoker(yasuo,map)); System.out.println("guojing的牌為:"+printPoker(guojing,map)); System.out.println("duanyu的牌為:"+printPoker(duanyu,map)); System.out.println("底牌為:"+printPoker(dipai,map)); } //看牌的方法 public static String printPoker(List<Integer> nums, Map<Integer,String> pokers){ //1.對牌的編號進行升序排列 Collections.sort(nums); //2.遍歷牌的編號集合,獲取到每一個編號 StringBuffer sb = new StringBuffer(); for (Integer num : nums) { //num就是要查詢的具體牌,編號 //3.根據編號到雙列集合中查詢該編號對應的具體牌 String poker=pokers.get(num); //4.將獲取到的牌進行拼接 sb.append(poker+ " "); } //5.將最後拼接結果返回即可 String str = sb.toString(); //因為要返回的是字串, 所以需要轉換成字串 return str.trim(); //去除首尾的空格 } }