1. 程式人生 > 其它 >鬥地主(雙列),使用HashMap,ArrayList,只檢視玩家和底牌,並排序

鬥地主(雙列),使用HashMap,ArrayList,只檢視玩家和底牌,並排序

/*準備牌:
         * 完成數字與紙牌的對映關係,用map集合,完成一個數字與字串紙牌的對應關係
         * 洗牌:
         * 通過數字完成洗牌collections.shuffle
         * 發牌:
         * 將每個玩家和底牌設計為ArrayList,將最後3張牌直接放到底牌list
         * 通過對3%依次發牌
         * 存放過程中要求數字大小與鬥地主規則的大小對應
         * 將代表不同紙牌的數字分配給不同的玩家和底牌
         * 看牌:
         * 通過map集合找到對應字元展示
         * 通過查詢紙牌與數字的對應關係,由數字轉成紙牌字串再進行展示
         
*/ /* * 1組裝54張撲克牌 */ // 1.1建立map集合儲存 HashMap<Integer,String> pokerMap=new HashMap<Integer,String>(); // 1.2建立花色集合與數字集合 ArrayList<String> colors=new ArrayList<String>(); ArrayList<String> numbers=new ArrayList<String>();
// 1.3儲存花色與數字 Collections.addAll(colors, "♠","♥","♣","♦"); Collections.addAll(numbers, "2","A","K","Q","J","10","9","8","7","6","5","4","3"); // 設定儲存編號變數 int count=1; pokerMap.put(count++, "大王"); pokerMap.put(count++, "小王"); // 1.4建立牌儲存到map集合
for(String number:numbers) { for(String color:colors) { String card=color+number; pokerMap.put(count++, card); } } // 將54張牌打亂 // 取出編號集合 Set<Integer> numberSet=pokerMap.keySet(); // 因為要將編號打亂順序,所以先轉到list集合中 ArrayList<Integer> numberList=new ArrayList<Integer>(); numberList.addAll(numberSet); // 打亂順序 Collections.shuffle(numberList); // 完成3個玩家交替摸牌,每人17張,最後3張留作底牌 // 3.1發牌的編號 // 建立3個玩家編號集合和一個底牌編號集合 ArrayList<Integer> numPlay1=new ArrayList<Integer>(); ArrayList<Integer> numPlay2=new ArrayList<Integer>(); ArrayList<Integer> numPlay3=new ArrayList<Integer>(); ArrayList<Integer> numDipai=new ArrayList<Integer>(); // 3.2發牌的編號 for(int i=0;i<numberList.size();i++) { // 獲取牌的編號 Integer num=numberList.get(i); // 發牌,留出底牌 if(i>=51) { numDipai.add(num); }else { if(i%3==0) { numPlay1.add(num); }else if(i%3==1) { numPlay2.add(num); }else { numPlay3.add(num); } } } // 4檢視3個玩家手中的牌(大小排序),底牌 // 4.1對手中編號進行排序 Collections.sort(numPlay1); Collections.sort(numPlay2); Collections.sort(numPlay3); Collections.sort(numDipai); // 4.2進行牌面轉換 // 建立3個玩家牌面集合,和底牌牌面集合 ArrayList<String> player1=new ArrayList<String>(); ArrayList<String> player2=new ArrayList<String>(); ArrayList<String> player3=new ArrayList<String>(); ArrayList<String> dipai=new ArrayList<String>(); // 4.3轉換,根據編號找到牌面,新增到對應的牌面集合中 for(Integer i:numPlay1) { String card=pokerMap.get(i); player1.add(card); } for(Integer i:numPlay2) { String card=pokerMap.get(i); player2.add(card); } for(Integer i:numPlay3) { String card=pokerMap.get(i); player3.add(card); } for(Integer i:numDipai) { String card=pokerMap.get(i); dipai.add(card); } // 4.5檢視 System.out.println("玩家1"+player1); System.out.println("玩家2"+player2); System.out.println("玩家3"+player3); System.out.println("底牌"+dipai);