鬥地主案例思路分析及程式碼實現
阿新 • • 發佈:2021-11-24
鬥地主案例需求分析及程式碼實現
/* 鬥地主綜合案例: 1.準備牌 2.洗牌 3.發牌 4.看牌 */ import java.util.ArrayList; import java.util.Collections; public class DouDiZhu { public static void main(String[] args) { //1.準備牌 //定義一個儲存54張牌的ArrayList集合,泛型使用String ArrayList<String> poker = new ArrayList<>(); //定義兩個陣列,一個數組儲存拍的花色,一個數組儲存牌的序號 String[] colors = {"♠","♥","♣","♦"}; String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //先把大王和小王儲存到poker集合中 poker.add("大王"); poker.add("小王"); //迴圈巢狀遍歷兩個陣列,組裝52張牌 for (String color : colors) { for (String number : numbers) { //把組裝好的牌儲存到poker集合中 poker.add(color+number); } } //System.out.println(poker); /* 2.洗牌 使用集合的工具類Collections中的方法 static void shuffle(List<?> list) 使用預設的隨機源隨機排列指定的列表。 */ Collections.shuffle(poker); //System.out.println(poker); /* 3.發牌 */ //定義4個集合,儲存玩家的牌和底牌 ArrayList<String> player01 = new ArrayList<>(); ArrayList<String> player02 = new ArrayList<>(); ArrayList<String> player03 = new ArrayList<>(); ArrayList<String> diPai = new ArrayList<>(); /* 遍歷poker集合,獲取每一張牌 使用poker結合的索引%3給三個玩家輪流發牌 剩餘三張牌給底牌 注意: 先判斷底牌(i>=51),否則牌就發沒了 */ for (int i = 0; i < poker.size(); i++) { //獲取每一張牌 String p = poker.get(i); //輪流發牌 if (i>=51){ //給底牌發牌 diPai.add(p); }else if (i%3==0){ //給玩家1發牌 player01.add(p); }else if (i%3==1){ //給玩家2發牌 player02.add(p); }else if (i%3==2){ //給玩家3發牌 player03.add(p); } } //4.看牌 System.out.println("劉德華:"+player01); System.out.println("周潤發:"+player02); System.out.println("周星馳:"+player03); System.out.println("底牌:"+diPai); } }