【Java基礎進階筆記】- Day02 - 第四章 集合綜合案例-鬥地主
阿新 • • 發佈:2020-12-24
技術標籤:【Java基礎進階筆記】遊戲java
Java基礎進階筆記 - Day02 - 第四章 集合綜合案例-鬥地主
Java基礎進階筆記 - Day02 - 第四章 集合綜合案例-鬥地主
系統:Win10
JDK:1.8.0_121
IDE:IntelliJ IDEA 2017.3.7
4.1 案例介紹
按照鬥地主規則,完成準備牌、洗牌、發牌、看牌的動作
具體規則:
使用54張牌打亂順序,三個玩家參與遊戲,三人交替摸牌,每人17張牌,最後3張留作底牌
4.2 案例分析
1. 準備牌
1.準備54張牌,儲存到一個集合中
2.特殊牌:大王、小王
3.其他52張牌:
定義一個集合/陣列,儲存四種花色:♠、♥、♣、♦
定義一個集合/陣列,儲存13個序號:2、A、K、Q、J、10、9、8、7、6、5、4、3
4.迴圈巢狀遍歷兩個陣列/集合,組裝52張牌
♠2、♠A、♠K、♠Q...♠3 ♥2、♥A、♥K、♥Q...♥3
♣2、♣A、♣K、♣Q...♣3 ♦2、♦A、♦K、♦Q...♦3
2. 洗牌
1.使用集合工具類Collection的方法 2.static void shuffle(List<?> list) 使用預設隨機源對指定列表進行置換 3.會隨機的打亂集合元素的順序
3. 發牌
要求:1人17張牌,最後剩餘3張作為底牌,一人一張輪流發牌:使用集合索引(0-53)%3
1.定義四個集合:儲存三個玩家的牌和底牌
2.索引%3 == 0 的 給玩家1
3.索引%3 == 1 的 給玩家2
4.索引%3 == 2 的 給玩家3
5.最後3張(索引 >= 51)作為底牌
4. 看牌
1.直接列印三個玩家的牌和底牌
4.3 程式碼實現
public class DouDiZhu {
public static void main(String[] args) {
// 1.準備牌
ArrayList<String> poker = new ArrayList<>();
// 特殊牌:大王、小王
poker.add("大王");
poker.add("小王");
// 定義一個集合/陣列,儲存四種花色:♠、♥、♣、♦
String[] colors = {"♠", "♥", "♣", "♦"};
// 定義一個集合/陣列,儲存13個序號:2、A、K、Q、J、10、9、8、7、6、5、4、3
String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
/*
迴圈巢狀遍歷兩個陣列/集合,組裝52張牌
♠2、♠A、♠K、♠Q...♠3 ♥2、♥A、♥K、♥Q...♥3
♣2、♣A、♣K、♣Q...♣3 ♦2、♦A、♦K、♦Q...♦3
*/
for (String color : colors) {
for (String number : numbers) {
// System.out.println(color+number);
poker.add(color + number);
}
}
// System.out.println(poker);
// 2.洗牌 static void shuffle(List<?> list)
Collections.shuffle(poker);
// System.out.println(poker);
// 3.發牌
ArrayList<String> player01 = new ArrayList<>();
ArrayList<String> player02 = new ArrayList<>();
ArrayList<String> player03 = new ArrayList<>();
ArrayList<String> diPai = new ArrayList<>();
for (int i = 0; i < poker.size(); i++) {
String p = poker.get(i);
if (i >= 51) { // 最後3張(索引 >= 51)作為底牌
diPai.add(p);
}else if (i % 3 == 0) { // 索引%3 == 0 的給玩家1
player01.add(p);
}else if (i % 3 == 1) { // 索引%3 == 1 的給玩家2
player02.add(p);
}else if (i % 3 == 2) { // 索引%3 == 2 的給玩家3
player03.add(p);
}
}
// 4.看牌
System.out.println("周潤發:" + player01);
System.out.println("劉德華:" + player02);
System.out.println("周星馳:" + player03);
System.out.println("底牌:" + diPai);
}
}
執行結果: