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);
}
}