Map案例總結-鬥地主案例

Map案例總結-鬥地主案例

    Map集合元素是成對存在,每個元素分爲鍵和值兩部分,合在一起則稱“鍵值對”。
    Map鬥地主這個案例用HashMap集合將54張撲克牌存儲,然後隨機發放給3名玩家,並且留下底牌。我們需要做的則是:
    ①創建HashMap集合,範式爲Integer和String,分別存儲撲克牌序號和撲克牌數(以下簡稱牌序和牌數)。
    ②將HashMap集合中的鍵值對隨機發放給3名玩家,並且保留底牌。**
    創建HashMap集合很容易,那如何將54張撲克牌的花色和牌數存儲至HashMap中,並且將集合打散呢?
    解①:筆者先創建了兩個ArrayList集合,分別存放花色(♥,♣,♦,♠)和牌數("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K")。然後將花色集合和牌數集合相互搭配成功混合出52張帶有花色且無一重複的撲克牌,然後將這份無一重複的撲克牌存入HashMap集合中,最後添加大小王至該集合中。
   解②:這一步有兩個重要步驟,分別是:將撲克牌打散,就是將HashMap集合打散,隨機發放給3名玩家,並且保留底牌。隨機發放這個功能需要調用Collections.shuffle()這個方法。但是該方法的變量不能爲鍵值對,於是我們要提取HashMap集合中的鍵。這裏筆者創建另一個Set集合,直接調用HashMap集合中的KeySet()方法即可將該集合中所有鍵獲提取至Set集合中,接着繼續創建ArrayList結婚將Set集合中的鍵全部提取到ArrayList集合中,再調用Collections.shuffle(ArrayList)方法即可實現隨機鍵的功能。
接下來是發放給3名玩家並且保留底牌這個功能我們利用for循環遍歷隨機鍵中,將隨機牌數發放給玩家,並且將最後3張牌保留爲底牌即可。


  上代碼!!!!!

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;

/*HashMap玩鬥地主遊戲*/
public class PokerGame {
    public static void main(String[] args) {
        //創建poker集合
        HashMap<Integer, String> pokerMap = new HashMap<>();
        //創建花色
        ArrayList<String> Colors = new ArrayList<>();
        //將梅花,紅桃,黑桃,方片
        Colors.add("♣");
        Colors.add("♥");
        Colors.add("♦");
        Colors.add("♠");
        //創建牌數
        ArrayList<String> Numbers = new ArrayList<>();
        //將A~10添加到牌數中
        Collections.addAll(Numbers, "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K");
        //將大小王,花色和牌數添加到pokerMap中
        pokerMap.put(0, "大王");
        pokerMap.put(1, "小王");
        int count = 1;
        for (String color : Colors) {
            for (String number : Numbers) {
                String strTemp = color + number;
                pokerMap.put(++count, strTemp);
            }
        }
        //System.out.println(pokerMap);
        //將pokerMap中的牌序打亂要使用到Collections.shuffle方法,所以將pokerMap中的鍵值傳到一個新的集合中
        ArrayList<Integer> newNumbers = new ArrayList<>();
        Set<Integer> setNubmber = pokerMap.keySet();//獲取pokerMap中的鍵
        newNumbers.addAll(setNubmber);
        Collections.shuffle(newNumbers);//將集合打亂順序
        //System.out.println(newNumbers);
        //分牌--------
        //創建四個ArrayList集合,分別保存玩家牌和底牌
        ArrayList<String> play1 = new ArrayList<>();
        ArrayList<String> play2 = new ArrayList<>();
        ArrayList<String> play3 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();

        for (int i = 0; i < newNumbers.size(); i++) {
            if (i >= 51) {
                dipai.add(pokerMap.get(i));
            } else if (i % 3 == 0) {
                play1.add(pokerMap.get(i));
            } else if (i % 3 == 1) {
                play2.add(pokerMap.get(i));
            } else {
                play3.add(pokerMap.get(i));
            }
        }
        
        System.out.println("1號玩家:"+play1);
        System.out.println("2號玩家:"+play2);
        System.out.println("3號玩家:"+play3);
        System.out.println("底牌:"+dipai);




    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章