斗地主(分解demo)の准备牌、洗牌、发牌、理牌、看牌(进阶版)

零、所涉及方法

1、List集合
2、Map集合
3、增强for
4、Collection(shuffle,sort)

一、准备牌

1、特殊牌:大王,小王
2、52张牌:循环嵌套遍历两个集合组装52张牌
3、将64张牌存储到Map集合中(通过Map集合的key值访问所有的牌)

List<String> colors = List.of("♠", "♣", "♦", "♥");
List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
HashMap<Integer,String> map=new HashMap<>();
        int index=0;
        for (String color : colors) {
            for (String number : numbers) {
                map.put(index,color+number);
                index++;
            }
        }map.put(52,"大王");
        map.put(53,"小王");

二、洗牌

因为我们通过访问牌的index(key值),所以洗牌可以调用Collections父类的shuffle(打乱集合中元素的顺序,且每次顺序都不一样)方法进行洗牌

首先我们创建一个存储index(key)的集合

ArrayList<Integer> list=new ArrayList<>();
        for (int i = 0; i < 54; i++) {
            list.add(i);
        }

调用shuffles方法(因为shuffle是静态方法所以我们通过调用类名来调用)

Collections.shuffle(list);

三、发牌(一张一张发牌)

一共有54张牌
我们通过对54对3取余 ,以获得三种情况分别是
余数为0-----一号玩家
余数为2-----二号玩家
余数为3-----三号玩家
当只剩下三张牌时,停止发牌作为底牌
首先创建四个集合(三个玩家一个存储底牌)

		ArrayList<Integer> player1=new ArrayList<>();
        ArrayList<Integer> player2=new ArrayList<>();
        ArrayList<Integer> player3=new ArrayList<>();
        ArrayList<Integer> dipai=new ArrayList<>();

开始发牌if语句套for循环

for (int i = 0; i < list.size(); i++) {
         if(i<51){
             if(i%3==0){
                 player1.add(list.get(i));
             }

             if(i%3==1){
                 player2.add(list.get(i));
             }

             if(i%3==2){
                 player3.add(list.get(i));
             }
         }else{
             dipai.add(list.get(i));
         }
     }

此时我们可以通过调用size()方法判断发牌是否成功

        System.out.println(player1.size());
        System.out.println(player2.size());
        System.out.println(player3.size());
        System.out.println(dipai.size());

在这里插入图片描述
发牌成功

四、理牌

通过索引来调用牌的好处就在于可以调用Collections的sort方法进行洗牌

		Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(dipai);

五、看牌

通过增强for看牌

		  System.out.print("玩家1:");
        for (Integer i : player1) {
            System.out.print(map.get(i)+" ");
        }
        System.out.println();

        System.out.print("玩家2:");
        for (Integer i : player2) {
            System.out.print(map.get(i)+" ");
        }
        System.out.println();

        System.out.print("玩家3:");
        for (Integer i : player3) {
            System.out.print(map.get(i)+" ");
        }
        System.out.println();
        
        System.out.print("底牌:");
        for (Integer i : dipai) {
            System.out.print(map.get(i)+" ");
        }

多次运行测试功能是否实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值