1. 程式人生 > 其它 >【Java基礎進階筆記】- Day02 - 第四章 集合綜合案例-鬥地主

【Java基礎進階筆記】- Day02 - 第四章 集合綜合案例-鬥地主

技術標籤:【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); } }

執行結果:
在這裡插入圖片描述