• 斗地主案例(利用集合/增强for等技术)


    斗地主案例(利用集合/增强for等技术)

    package Task10;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    public class Test {
    
        public static void main(String[] args) {
        //生成54张牌存入集合中(核心代码用双for循环进行遍历最后存到ArrayList<String> 中)
            ArrayList<String> pokers = new ArrayList<String>();
            
            String[] colors = {"♣", "♦", "♠", "♥"};
            String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
            for(int i = 0;i < colors.length;i++) {
                
                //获取花色
                String color = colors[i];
                for(int j = 0;j < numbers.length;j++) {
                    
                    //获取扑克上的数字
                    String number = numbers[j] ;
                    String poker = color + number;
                    
                    //拼接成一张牌
                    pokers.add(poker);
                }
            }
            pokers.add("大王");
            pokers.add("小王");
    
            //洗牌(核心代码是collection类里面的工具类里collections的shuffle方法)
            
            Collections.shuffle(pokers);
            
            
            //发牌(核心代码是:三个集合类型的选手,依次发牌,直到只剩最后三张的时候当作底牌)
            //三个玩家
            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 < pokers.size() ; i++) {
                //每一张牌的临时接收者
                String poker = pokers.get(i);
                //当还剩最后三张的时候
                if(i >= pokers.size()-3) {
                    diPai.add(poker);
                }else if(i % 3 == 0) {
                    player01.add(poker);
                }else if(i % 3 == 1) {
                    player02.add(poker);
                }else {
                    player03.add(poker);
                }
            }
            
            //发牌完毕,打印出三个玩家的牌和底牌
            System.out.println("发牌完毕!!!");
            System.out.println("玩家1:");
            for (String p1 : player01) {
                System.out.print(p1+" ");
            }
            System.out.println();
            System.out.println("玩家2:");
            for (String p2 : player02) {
                System.out.print(p2+" ");
            }
            System.out.println();
            System.out.println("玩家3:");
            for (String p3 : player03) {
                System.out.print(p3+" ");
            }
            System.out.println();
            System.out.println("底牌:");
            for (String di : diPai) {
                System.out.print(di+" ");
            }
            System.out.println();
            //选地主...将得到大王的选手选为地主(核心代码是collections工具类中的contains方法 和添加底牌的addAll方法)
            if(player01.contains("大王")) {
                player01.addAll(diPai);
                System.out.println("=====================玩家1成为地主=====================");
            }else if(player02.contains("大王")) {
                player02.addAll(diPai);
                System.out.println("=====================玩家2成为地主=====================");
            }else{
                
                player03.addAll(diPai);
                System.out.println("=====================玩家3成为地主=====================");
            }
            
            //显示每位玩家手中的牌
            System.out.println("===================最终每个人手中的牌是=====================");
            System.out.println("玩家1:");
            for (String p1 : player01) {
                System.out.print(p1+" ");
            }
            System.out.println();
            System.out.println("玩家2:");
            for (String p2 : player02) {
                System.out.print(p2+" ");
            }
            System.out.println();
            System.out.println("玩家3:");
            for (String p3 : player03) {
                System.out.print(p3+" ");
            }
            
        }
    }

    核心代码总结:

      1,生成牌:

        主要是用ArrayList集合类存生成的牌,每个玩家手中的牌,底牌!

        要用的容器主要有:花色,牌面数字,

        技术是用花色和牌面数字的个数进行双重循环遍历,把遍历出的每一种组合,都存到ArrayList集合中()共有4*13 = 52种,最后不要忘了大小王,一共54张牌

      2.洗牌:

       核心的技术是ArrayList中的一个方法 shuffle,功能是对数组中的元素进行打乱

      3.发牌:

       核心技术是:对已经打乱的牌进行对每个玩家挨个分发,用的是for循环的下标,对3取余,不要忘了最后三张底牌

      4.抢地主:

       核心方法是:ArrayList里面的contains方法,来判断luckyPoker(拥有者获得地主的优先选择权)

      5.显示每个玩家手中的牌面:

       用增强for打印

  • 相关阅读:
    SQL compute by 的使用
    C# DES加密/解密字符串
    SET NOCOUNT { ON | OFF }
    SQL Server游标的使用 转
    SQL优化的一些总结
    精确获取时间(QueryPerformanceCounter)测试程序效率
    ajax的使用原理
    jq三级导航菜单可修改为二级、四级等导航菜单
    本地搭建PHP环境
    固定在屏幕底部的层
  • 原文地址:https://www.cnblogs.com/YangGC/p/8570783.html
Copyright © 2020-2023  润新知