• 斗地主案例


    案例的需求分析:

    1. 准备牌 54张,存储到一个集合
      • 特殊牌:大王 小王
      • 其他52张牌:
        • 定义一个数组 V 集合,存储4张花色:♣ ♠ ♥ ♦
        • 定义一个数组 V 集合,存储13个序号:2 A K Q .....3
      • 循环嵌套遍历两个 数组 V 集合,组装52张牌:♠2 ♣4......
    2. 洗牌
      • 使用集合工具类Collection的方法
      • Static void shuffle(List<?> list) 使用指定的随机源对指定列表进行置换
      • 会随机打乱集合中元素的顺序
    3. 发牌
      • 要求:1人17张,剩余3张作为底牌,一人一张牌轮流发牌:集合的索引(0-53)% 3
      • 定义4个集合,存储3个玩家的牌和底牌
      • 索引%2,有两个值(0,1)0%2=0 1%2=1 2%2=0 3%2=1
      • 索引%3,有三个值(0,1,2)0%3=0 1%3=1 2%3=2 3%3=0(给玩家发牌)
      • 索引>=51 改底牌发牌(保留三张底牌)
    4. 看牌
      • 直接打印集合,遍历存储玩家和底牌的集合

    代码实现:

    
    import java.util.ArrayList;
    import java.util.Collections;
    
    /*
    * 斗地主综合案例
    *  1.准备牌 2.洗牌 3.发牌 4.看牌
    * */
    public class DouDiZhu {
        public static void main(String[] args) {
             //1. 准备牌 54张,存储到一个集合中
            ArrayList<String> poker = new ArrayList<>();
            //定义两个数组,一个存花色,一个存牌的序号
            String[] colors = {"♠","♥","♣","♦"};
            String[] nums = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
            //先把大王小王存储到poker集合中
            poker.add("大王");
            poker.add("小王");
            //循环嵌套遍历两个数组,组装52张牌
            for (String number : nums) {
                for (String color : colors){
    //                System.out.println(color+number);
                    poker.add(color+number);
                }
            }
    //        System.out.println(poker);
            //2洗牌 使用集合的工具类collections中的方法shuffle(List<?> list)
            //默认随机源对指定列表进行置换
            Collections.shuffle(poker);
    //        System.out.println(poker);
            //3.发牌 定义4个集合,存储玩家的牌和底牌
            ArrayList<String> player01 = new ArrayList<>();
            ArrayList<String> player02 = new ArrayList<>();
            ArrayList<String> player03 = new ArrayList<>();
            ArrayList<String> diPai = new ArrayList<>();
            //遍历集合,获取每一张牌
            //使用poker集合的索引给3个玩家轮流发牌 最后三张为底牌
            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发牌
                    player01.add(p);
                }else if (i%3==1){
                    player02.add(p);
                }else if (i%3==2){
                    player03.add(p);
                }
            }
            //4.看牌
            System.out.println("张三:"+player01);
            System.out.println("李四:"+player02);
            System.out.println("王五:"+player03);
            System.out.println("底牌:"+diPai);
        }
    }
    

    运行结果(每次都不一样,洗牌是随机):

    张三:[♥A, ♦5, ♥K, ♠Q, ♠10, ♦K, ♠5, ♥9, ♠2, ♦7, ♥J, ♦6, ♠K, ♦3, ♥3, ♣6, ♦9]
    李四:[♥10, ♣2, ♣5, ♦2, ♣Q, ♠3, ♦4, ♣K, ♥8, ♦A, ♣3, ♠7, ♦10, ♥4, ♠9, ♣J, ♣A]
    王五:[♥2, ♣8, 小王, ♥7, ♠4, ♣9, ♥Q, ♦Q, ♦8, ♠A, ♥6, ♠8, ♥5, ♣7, ♠6, ♦J, 大王]
    底牌:[♣10, ♣4, ♠J]
    
  • 相关阅读:
    iOS 11: CORE ML—浅析
    Android 平台 Native 代码的崩溃捕获机制及实现
    H5直播避坑指南
    Mac系统升级至OS X Mavericks后Genymotion出现的问题及解决方法
    Android 4.4 KitKat终于支持录屏(Screen Recording)了!
    Android开发者资源大汇总
    用AndroidSDK中的Face Detector实现人脸识别
    [Android设计模式]Android退出应用程序终极方法
    ActionBarCompat 教程-实现Action Bar
    使用Roboguice依赖注入规划Android项目
  • 原文地址:https://www.cnblogs.com/Shuangyi/p/10929090.html
Copyright © 2020-2023  润新知