• 集合--斗地主发牌


    规则:

        1. 组装54张扑克牌

    2. 将54张牌顺序打乱

        3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

        4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

    l  手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

    1.1 案例需求分析

    l  准备牌:

    完成数字与纸牌的映射关系:

    使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

    l  洗牌:

    通过数字完成洗牌发牌

    l  发牌:

    将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

    存放的过程中要求数字大小与斗地主规则的大小对应。

    将代表不同纸牌的数字分配给不同的玩家与底牌。

    l  看牌:

    通过Map集合找到对应字符展示。

    通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

    package com.oracle.Demo02;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    public class doudizhu {
    
        public static void main(String[] args) {
            //创建扑克牌map
            Map<Integer,String> pk=new HashMap<Integer,String>();
            //装有拍好的ArrayList
            ArrayList<Integer> pkn=new ArrayList<Integer>();
             //组装牌
            String[] color= {"♥","♠","♣","♦"};
            String[] number= {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
            //循环打印花色
            int index=2;//从2开始,因为大小王需要单独等撰,
            /*双层for循环,先循环数字因为每个数字有四个花色*/
            for(String num:number) {
                //在循环花色
                for(String col:color) {
                    pk.put(index, col+num);
                    pkn.add(index++);
                }
            }
            //封装  大小王
            pk.put(0, "大王");
            pkn.add(0);
            pk.put(1, "小王");
            pkn.add(1);
            /*System.out.println(pk);
            System.out.println(pkn);*/
            //洗牌,打乱顺序
            Collections.shuffle(pkn);
            //发牌 造四个容器。
            ArrayList <Integer> bottom=new ArrayList <Integer> ();//底牌
            ArrayList <Integer> player1=new ArrayList <Integer> ();//玩家1        
            ArrayList <Integer> player2=new ArrayList <Integer> ();//玩家2
            ArrayList <Integer> player3=new ArrayList <Integer> ();//玩家3
        
            //底牌   遍历过程中,将牌发到三个玩家和底牌中
            for(int i=0;i<pkn.size();i++) {
                //先发底牌
                if(i<3) {
                    bottom.add(pkn.get(i));            
                }
                else if(i%3==0) {
                    player1.add(pkn.get(i));
                }
                else if(i%3==1) {
                    player2.add(pkn.get(i));
                }
                else if(i%3==2) {
                    player3.add(pkn.get(i));
                }            
            }
            //给牌排序
            Collections.sort(bottom);
            Collections.sort(player1);
            Collections.sort(player2);        
            Collections.sort(player3);
            //看牌+调方法
            look("底牌",bottom,pk);
            look("渣渣辉",player1,pk);
            look("系兄弟",player2,pk);
            look("砍我 ",player3,pk);
            
            
        }
            
            public static void look(String name,ArrayList <Integer> player,Map<Integer,String> pk) {
                //分类
                System.out.println(name+":");
                
                for(int i:player) {
                    System.out.print(pk.get(i)+" ");
                }
                System.out.println();
             
        }
    
    }

     代码实现:

  • 相关阅读:
    inflate, findViewById与setContentView的差别与联系
    Android_程序未处理异常的捕获与处理
    八皇后问题
    兔子--改动Android Studio的快捷键,改动成eclipse的快捷键
    关于cocos2d-x 和安卓之间的相互调用
    《JavaScript》——DOM
    *Android 多线程下载 仿下载助手
    (LeetCode)两个链表的第一个公共节点
    MVC初了解
    URL编码总结
  • 原文地址:https://www.cnblogs.com/layuechuquwan/p/11444817.html
Copyright © 2020-2023  润新知