Java基础进阶笔记

更新时间:2021-01-08 14:42:20点击次数:273次
4.1 案例介绍
按照斗地主规则,完成准备牌、洗牌、发牌、看牌的动作
具体规则:
使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后3张留作底牌
4.2 案例分析
4.2.1 准备牌
1.准备54张牌,存储到一个集合中
2.特殊牌:大王、小王
3.其他52张牌:
定义一个集合/数组,存储四种花色:♠、♥、♣、♦
定义一个集合/数组,存储13个序号:2、A、K、Q、J、10、9、8、7、6、5、4、3
4.循环嵌套遍历两个数组/集合,组装52张牌
♠2、♠A、♠K、♠Q...♠3 ♥2、♥A、♥K、♥Q...♥3
♣2、♣A、♣K、♣Q...♣3 ♦2、♦A、♦K、♦Q...♦3
4.2.2 洗牌
1.使用集合工具类Collection的方法
2.static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换
3.会随机的打乱集合元素的顺序
4.2.3 发牌
要求:1人17张牌,最后剩余3张作为底牌,一人一张轮流发牌:使用集合索引(0-53)%3
1.定义四个集合:存储三个玩家的牌和底牌
2.索引%3 == 0 的 给玩家1
3.索引%3 == 1 的 给玩家2
4.索引%3 == 2 的 给玩家3
5.最后3张(索引 >= 51)作为底牌
4.2.4 看牌
直接打印三个玩家的牌和底牌
4.3 代码实现
public class DouDiZhu {
    public static void main(String[] args) {
        // 1.准备牌
        ArrayList<String> poker = new ArrayList<>();
        // 特殊牌:大王、小王
        poker.add("大王");
        poker.add("小王");
        // 定义一个集合/数组,存储四种花色:♠、♥、♣、♦
        String[] colors = {"♠", "♥", "♣", "♦"};
        // 定义一个集合/数组,存储13个序号:2、A、K、Q、J、10、9、8、7、6、5、4、3
        String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
        /*
         循环嵌套遍历两个数组/集合,组装 52 张牌
         ♠2、♠A、♠K、♠Q...♠3  ♥2、♥A、♥K、♥Q...♥3
         ♣2、♣A、♣K、♣Q...♣3  ♦2、♦A、♦K、♦Q...♦3
         */
        for (String color : colors) {
            for (String number : numbers) {
                // System.out.println(color+number);
                poker.add(color + number);
            }
        }
        // System.out.println(poker);

        // 2.洗牌 static void shuffle(List<?> list)
        Collections.shuffle(poker);
        // System.out.println(poker);
       // 3.发牌
        ArrayList<String> player01 = new ArrayList<>();
        ArrayList<String> player02 = new ArrayList<>();
        ArrayList<String> player03 = new ArrayList<>();
        ArrayList<String> diPai = new ArrayList<>();
        for (int i = 0; i < poker.size(); i++) {
            String p = poker.get(i);
            if (i >= 51) { // 最后3张(索引 >= 51)作为底牌
                diPai.add(p);
            }else if (i % 3 == 0) { // 索引%3 == 0 的给玩家1
                player01.add(p);
            }else if (i % 3 == 1) { // 索引%3 == 1 的给玩家2
                player02.add(p);
            }else if (i % 3 == 2) { // 索引%3 == 2 的给玩家3
                player03.add(p);
            }
        }
        
        // 4.看牌
        System.out.println("周润发:" + player01);
        System.out.println("刘德华:" + player02);
        System.out.println("周星驰:" + player03);
        System.out.println("底牌:" + diPai);
    }
}
运行结果:

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息