模拟斗地主洗牌与发牌功能

模拟斗地主洗牌和发牌,并保证每个玩家手中的牌有序

问题分析

  • 牌:54张牌
  • 三位玩家
  • 三张底牌
/*
分析:
  1)创建牌盒
    HashMap<Integer,String>
        键存储的是牌的编号
    值存储的是就是每一个牌(花色和点数的拼接)
    ArrayList< Integer>:
        单独存储编号
  2)装牌
        定义一个编号:int index = 0 ;
        定义花色字符串数组:♥ ♠ ♣ ♦
        点数字符串数组     3 4 5 6 7 8 9 10 J Q k A 2
        2.1)遍历点数数组和花色数组,拼接起来
        2.2)给HashMap<Integer,String> 存储编号和牌
            给ArrayList存储编号
            index ++

            2.3)给HashMap<Integer,String>单独存储小王,和大王
                给ArrayList<Integer>添加小王对应的编号 并index++

    3)洗牌

*    洗 的是编号:
*     Collections
*     public static void shuffle(List<?> list):随机置换
*
* 4)发牌
*    发的也是编号,为了保证每个人手上的有序,所以三个玩家都需要TreeSet<Integer>
*    for(int x = 0  ; x < array.size(); x ++){
*      //3个玩
*      //规律
*      取底牌
*      如果
*       x>=array.size()-3
*       获取底牌get(int index)
*      如果x % 3 == 0
*        获取第一个玩家存储的编号
*       x% 3 == 1
*        获取第二个玩家存储的编号
*       x% 3 == 2
*        获取第三个玩家的编号

*     }
*
*
* 5)看牌
*   封装成一个功能
*   lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm)
*
*    遍历TreeSet集合:获取每一个手上的编号
*    在使用编号在hm集合寻找对应的值: get(K key)--->V value
    输出牌即可!
 */

具体代码实现

public class PokerDemo2 {
    public static void main(String[] args) {
/*
 * 1)创建一个牌盒
 *  HashMap<IntegString>
 *        键存储的是牌的编号
 *     值存储的就是每一个牌,(花色和点数的拼接)
 *   ArrayList<Integer>
 *     单独存储编号
 */
            HashMap<Integer , String> hashMap =new HashMap<Integer , String>();
            ArrayList<Integer> array = new ArrayList<Integer>();

            //2)装牌

            //定义一个数组,存储牌的点数
            String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
            //定义一个数组,存储牌的花色
            String[] color = {"♥","♠","♣","♦"};

            //将点数和花色结合,并加入到HashMap和ArrayList集合中
            //定义一个编号:int index = 0 ;  编号从0开始
            int index = 0;
            //2.1)遍历点数数组和花色数组,拼接起来
            for (String number : numbers) {
                for(String huase : color){
                    //拼接
                    String value = huase.concat(number);
                    //将编号以及牌添加到HashMap中
                    hashMap.put(index, value);
                    //将编号存储在ArrayList集合中
                    array.add(index);
                    index++;
                }
            }

            //2.2)添加小王
            hashMap.put(index, "小王");
            array.add(index);
            index++;

            //添加大王
            hashMap.put(index, "大王");
            array.add(index);
            index++;

           //  System.out.println(hashMap);

           //3)洗牌:打乱牌顺序
           Collections.shuffle(array);

           //4)发牌:发的编号,为保证每个人手中的牌有序,所以我们使用TreeSet集合进行自然排序
           /**
            * for(int x = 0  ; x < array.size(); x ++){
            *          //3个玩家
            * //规律
            * 取底牌
            *      如果
            *         x>=array.size()-3
            *     获取底牌get(int index)
            *      如果x % 3 == 0
            *         获取第一个玩家存储的编号
            *          x % 3 == 1
            *         获取第二个玩家存储的编号
            *          x % 3 == 2
            *         获取第三个玩家的编号
            */
           //创建底牌和三个玩家的集合
           TreeSet<Integer> player1 = new TreeSet<Integer>();
           TreeSet<Integer> player2 = new TreeSet<Integer>();
           TreeSet<Integer> player3 = new TreeSet<Integer>();
           TreeSet<Integer> dipai = new TreeSet<Integer>();

           //给底牌和三位玩家发牌
           for(int i = 0 ; i < array.size() ; i++){
                if(i >= (array.size()-3)){                //底牌
                    dipai.add(array.get(i));
                }else if( i % 3 == 0){//给第一位玩家发牌
                    player1.add(array.get(i));
                }else if( i % 3 == 1){//给第二位玩家发牌
                    player2.add(array.get(i));
                }else if( i % 3 == 2){//给第三位玩家发牌
                    player3.add(array.get(i));
                }
            }

            //5)看牌,将看牌功能封装成一个特有的方法,单独调用
            lookPoker("张三", hashMap, player1);
            lookPoker("李四", hashMap, player2);
            lookPoker("王五", hashMap, player3);
            lookPoker("底牌", hashMap, dipai);
        }

        public static void lookPoker(String name , HashMap<Integer , String> hashMap,  TreeSet<Integer> array){
            System.out.print(name + "的牌是:");
            //需要遍历TreeSet集合获取每一个人手上的编号
            for (Integer key : array) {
                //获取每一个编号
                //在HashMap集合中:通过键获取值(获取牌)
                String value = hashMap.get(key);
                System.out.print(value + "  ");
            }
            System.out.println();
        }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值