1. 程式人生 > 其它 >6.鬥地主(單列集合練習)

6.鬥地主(單列集合練習)

技術標籤:3.集合java

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);
    }
}