實現鬥地主遊戲,主要分爲:準備牌,洗牌,發牌,牌排序這四個步驟。
遊戲原理圖:
1.準備牌:
我們知道Java數組一旦創建就無法改變大小,而集合可以隨時改變,因此我們選型集合中的HashMap
,利用鍵值對,一一對應(利用Map接口的HashMap類的鍵值對特性,利用鍵值來找到相應的value值)
/*
* 1.準備牌:定義一個集合來存儲54張撲克牌
* */
// 創建map集合,鍵值對
HashMap<Integer, String> pokers = new HashMap<>();
// 創建List集合來存儲數字編號
List<Integer> pokerNumber = new ArrayList<>();
// 定義兩個數組或集合來分別存儲花色與數字
String[] colors = {"♥","♣","♦","♠"};
String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
// 初始索引爲2,因爲大小王會佔據索引值0,1
int index = 2;
// 將兩組數組兩兩嵌套,組成一幅撲克牌
for (String number:numbers) {
for (String color:colors) {
pokers.put(index,color+number);
pokerNumber.add(index);
index++;
}
}
// 再把大王,小王存儲到pokers集合中,這就組成了一幅完整的牌了
pokers.put(0,"redJoker");
pokerNumber.add(0);
pokers.put(1,"blackJoker");
pokerNumber.add(1);
2.洗牌:
將完整的撲克牌就行洗牌,利用集合靜態方法Collections.shuffle(英文就有洗牌之意)
Collections.shuffle(pokerNumber);
3.發牌:
建立四個集合,分別存儲四個玩家的牌;遍歷pokers集合,獲取每一張牌;使用pokers集合的索引%3 個玩家輪流發牌;剩餘三張牌給底牌,注意:先判斷底牌索引(是否i>=51),否則牌就發完了。
// 定義四個集合來存儲玩家的牌和底牌
ArrayList<Integer> player1 = new ArrayList<Integer>();
ArrayList<Integer> player2 = new ArrayList<Integer>();
ArrayList<Integer> player3 = new ArrayList<Integer>();
ArrayList<Integer> bottom = new ArrayList<Integer>();
for(int i = 0;i<pokerNumber.size();i++){
// 獲取每一張牌
int p = pokerNumber.get(i);
// 輪流發牌
// 前三張作爲底牌
if(i<3){
bottom.add(p);
}else if (i%3 == 0){
player1.add(p);
}else if (i%3 == 1){
player2.add(p);
}else {
player3.add(p);
}
}
// 對玩家手中的編號進行排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
5.排序玩家手中的牌:
public static void look(String name,ArrayList<Integer> player,HashMap<Integer,String> pokers){
System.out.print(name+":");
// 遍歷ArrayList集合,獲取元素,作爲建,到Map集合中查找值
for (Integer key:player) {
String value = pokers.get(key);
System.out.print(value+" ");
}
// 打印換行
System.out.println();
}
/*
* 4.看牌:就是將玩家手中的編號放到map集合中查找,根據鍵值對
* */
look("周潤發",player1, pokers);
look("郭富城",player2, pokers);
look("劉德華",player3, pokers);
look("底牌",bottom, pokers);
}