15.斗地主案例_双列

15.斗地主案例_双列

15.斗地主案例_双列_第1张图片

 * 斗地主综合案例:有序版本
 * 1.准备牌:
 *     特殊牌:大王,小王
 *     52张牌:循环嵌套遍历两个集合(或数组),组成成52张牌
 *     Listcolors=new ArrayList<>();
 *     Listnumbers=new ArrayList<>();
 *     Collections.addAll(colors,"♠","♥","♣","◆");
 *     Collections.addAll(numbers,"2","A","K"..."3");
 *     本次54张牌用Map集合来接收,其中
 *     map集合中键表示牌的索引,值为组装好的牌
 * 2.洗牌:
 *     将Map集合中key(组装牌的索引)存储在list集合中,并由Collections集合工具类
 *     中的shuffle(list)方法将List集合打乱顺序。
 * 3.发牌:
 *      一人一张轮流发牌,每人17张,通过索引%3分给三人,最后剩3张牌作为底牌。
 *      因此要创建4个集合List,每个集合存放的map集合中的Key,即组装牌的索引。
 * 4.排序:
 *      使用Collections工具类中的sort(list)方法排序
 * 5.看牌:
 *      可以使用查表法
 *      遍历一个集合list,获取到另外一个集合的key,通过key查找到value
 *      遍历玩家和底牌的list,获取到Map集合的key,通过Key找到value.



public class Doudizhu {
    public static void main(String[] args) {

        /**
         * 1.准备牌
         */

        //创建map集合,存储牌的索引和组装好的牌
        HashMap poker = new HashMap<>();
        //创建一个list集合,存储牌的索引
        ArrayList pokerIndex = new ArrayList<>();
        //定义两个集合,存储花色和牌的序号
        ArrayList colors = new ArrayList<>();
        ArrayList numbers = new ArrayList<>();
        Collections.addAll(colors,"♠","♥","♣","◆");
        Collections.addAll(numbers,"2","A","K","Q","J","10","9","8","7","6","5","4","3");
        //把大王和小王先存储到map集合,并把索引另外单独存储一份到pokerIndex集合中
        //定义一个牌的索引
        int index=0;
        poker.put(index,"大王");
        pokerIndex.add(index);
        index++;
        poker.put(index,"小王");
        pokerIndex.add(index);
        index++;
        //循环两个集合,组装52张牌,存储到集合中
        for (String number : numbers) { //for循环只能遍历单列集合
            for (String color : colors) {
                poker.put(index,color+number);
                pokerIndex.add(index);
                index++;
            }
        }
        System.out.println(poker);
        System.out.println(pokerIndex);

        /*map集合(poker)中组装牌与索引映射关系:
        * {0=大王, 1=小王, 2=♠2, 3=♥2, 4=♣2, 5=◆2, 6=♠A, 7=♥A, 8=♣A, 9=◆A, 10=♠K,
        *  11=♥K, 12=♣K, 13=◆K, 14=♠Q, 15=♥Q, 16=♣Q, 17=◆Q, 18=♠J, 19=♥J, 20=♣J,
        *  21=◆J, 22=♠10, 23=♥10, 24=♣10, 25=◆10, 26=♠9, 27=♥9, 28=♣9, 29=◆9,
        *  30=♠8, 31=♥8, 32=♣8, 33=◆8, 34=♠7, 35=♥7, 36=♣7, 37=◆7, 38=♠6, 39=♥6,
        *  40=♣6, 41=◆6, 42=♠5, 43=♥5, 44=♣5, 45=◆5, 46=♠4, 47=♥4, 48=♣4, 49=◆4,
        *  50=♠3, 51=♥3, 52=♣3, 53=◆3}
        *
        *pokerIndex集合中记录了一份组装牌的索引,下面要将其打乱分发给3个玩家
        * [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
        * 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
        * 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53]
        * */

        /**
         * 2.洗牌:洗的是牌的索引
         */

        //使用Collections集合工具类中的shuffle(list)方法进行打乱顺序,洗牌:洗的是牌的索引
        Collections.shuffle(pokerIndex);
       //System.out.println(pokerIndex);

        /**
         * 3.发牌:定义4个集合,存储3个玩家牌的索引和底牌的索引
         */

        ArrayList play01 = new ArrayList<>();
        ArrayList play02 = new ArrayList<>();
        ArrayList play03 = new ArrayList<>();
        ArrayList diPai = new ArrayList<>();
        //遍历存储组装牌索引的pokerIndex集合,获取每一个牌的索引
        for (int i=0;i=51){
                //给底牌发牌
                diPai.add(in);
            }else if(i%3==0){
                //给玩家1发牌
                play01.add(in);
            }else if(i%3==1){
                //给玩家2发牌
                play02.add(in);
            }else if(i%3==2) {
                //给玩家3发牌
                play03.add(in);
            }
        }

        /**
         * 4.排序
         * 使用Collections集合工具类中的sort方法对玩家的集合排序
         * 默认是升序排序。
         */

        Collections.sort(play01);
        Collections.sort(play02);
        Collections.sort(play03);
        Collections.sort(diPai);
        System.out.println("..........................................");

        /**
         * 5.看牌
         * 调用看牌的方法lookPoker
         */
        lookPoker("萧炎",poker,play01);
        lookPoker("彩鳞",poker,play02);
        lookPoker("云芝",poker,play03);
        lookPoker("底牌",poker,diPai);
    }


    /**
     *
     * 定义一个看牌的方法,提高代码复用性
     * 参数:
     *     String name:玩家名称
     *     HashMappoker:存储牌的poker集合
     *     ArrayListlist:存储玩家和底牌的List集合
     */

    public static void lookPoker(String name,HashMappoker, 
                                 ArrayListlist){
        //输出玩家名称,不换行
        System.out.print(name+" ");
        //遍历玩家或者底牌的集合,获取牌的索引
        for (Integer key : list) {
            //使用牌的索引,去map集合中找到对应的牌
            String value = poker.get(key);
            System.out.print(value+" ");
        }
        System.out.println();//打印完每一个玩家的牌,换行。
    }
}

 

你可能感兴趣的:(集合,java)