6.鬥地主(單列集合練習)
阿新 • • 發佈:2021-02-05
6.鬥地主(單列集合練習)
使用集合工具類Collections的方法static void shuffle(List<?>list):會隨機的打亂集合中元素的順序。
鬥地主案例 * .分析: * 1.準備牌:54張牌,儲存到一個集合中。 * 特殊牌:大王,小王 * 其它52張牌: * 定義一個數組或集合,儲存4種花色:♠,♥,♣,◆ * 定義一個數組或集合,儲存13個序號:2,A,K,Q...3 * 迴圈巢狀遍歷兩個陣列或集合,組裝4*13=52張牌。如♠2,♠A,♠K...♥2,♥A... * 2.洗牌: * 使用集合工具類Collections的方法 * static void shuffle(List<?>list):使用指定的隨機源對指定列表進行置換 * 會隨機的打亂集合中元素的順序。 * 3.發牌 * 要求:1人17張牌,剩餘3張作為底牌,一人一張輪流發牌:集合的索引(0-53)%3 * 定義4個集合,儲存3個玩家的牌和底牌。 * 索引%3有三個值(0,1,2) 0%3=0 1%3=1 2%3=2 3%3=0 * 索引>=51改底牌發牌。 * 4.看牌 * 直接列印集合,遍歷儲存玩家和底牌的集合。 public class Doudizhu_case { public static void main(String[] args) { /** * 1.準備牌 */ //定義一個儲存54張牌的ArrayList集合(list集合有索引),泛型使用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 number : numbers) { for (String color : colors) { //把組裝好的牌儲存到poker集合 poker.add(color+number);//字串的拼接為一個字串 } } /*poker集合中的牌已準備好如下:System.out.println(poker); * [大王, 小王, ♠2, ♥2, ♣2, ◆2, ♠A, ♥A, ♣A, ◆A, ♠K, ♥K, ♣K, ◆K, * ♠Q, ♥Q, ♣Q, ◆Q, ♠J, ♥J, ♣J, ◆J, ♠10, ♥10, ♣10, ◆10, ♠9, ♥9, ♣9, ◆9, ♠8, ♥8, ♣8, ◆8, ♠7, ♥7, ♣7, ◆7, ♠6, ♥6, ♣6, ◆6, ♠5, ♥5, ♣5, ◆5, ♠4, ♥4, ♣4, ◆4, ♠3, ♥3, ♣3, ◆3] * */ /** * 2.洗牌 * 使用集合的工具類Collections中的方法打亂集合中順序 * static void shuffle(List<?>list) 使用預設隨機源對指定列表進行置換 */ Collections.shuffle(poker); /** * 3.發牌 */ //定義4個集合,儲存3個玩家的牌和底牌(因為要用集合索引,所以用list集合) ArrayList<String>play01=new ArrayList<>(); ArrayList<String>play02=new ArrayList<>(); ArrayList<String>play03=new ArrayList<>(); ArrayList<String>dipai=new ArrayList<>(); /** * 遍歷poker集合,獲取每一張牌 * 使用poker集合的索引%3給3個玩家輪流發牌 * 剩餘3張牌給底牌。 * 注意:先判斷底牌(i>=51),否則牌就發沒了。 * 不能使用增強for遍歷,因為它沒有索引 */ 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發牌 play01.add(p); }else if (i%3==1){ //給玩家2發牌 play02.add(p); }else if(i%3==2){ //給玩家3發牌 play03.add(p); } } /** * 4.看牌 */ System.out.println("張三:"+play01); System.out.println("李四:"+play02); System.out.println("王五:"+play03); System.out.println("底牌:"+dipai); } }