zoukankan      html  css  js  c++  java
  • 一脚踩进java之基础篇36——模拟斗地主洗牌发牌

    一、案例介绍

    按照斗地主的规则,完成洗牌发牌的动作。

    具体规则:
    1. 组装54张扑克牌
    2. 将54张牌顺序打乱
    3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
    4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
    手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

    二、案例需求分析

    2.1 准备牌:
    完成数字与纸牌的映射关系:
    使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
    2.2 洗牌:
    通过数字完成洗牌发牌
    2.3 发牌:
    将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
    存放的过程中要求数字大小与斗地主规则的大小对应。
    将代表不同纸牌的数字分配给不同的玩家与底牌。
    2.4 看牌:
    通过Map集合找到对应字符展示。
    通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

     实现代码步骤

    首先,要修改java文件编码,由GBK修改为UTF-8,因为默认的字符编码GBK没有我们要的梅花、方片、黑桃、红桃(♠♥♦♣)等特殊字符。

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    
    /*
     * 斗地主洗牌发牌排序
     */
    public class Poker {
    
        public static void main(String[] args) {
    
            //准备花色
            ArrayList<String> color = new ArrayList<String>();
            color.add("♠");
            color.add("♥");
            color.add("♦");
            color.add("♣");
            
            //准备数字
            ArrayList<String> number = new ArrayList<String>();
    Collections.addAll(number,"3","4","5","6","7","8","9","10","J","Q","K","A","2");
            
            //定义一个map集合:用来将数字与每一张牌进行对应
            HashMap<Integer, String> map = new HashMap<Integer, String>();
            
            int index = 0;
            for (String thisNumber : number) {
                for (String thisColor : color) {
                    map.put(index++, thisColor+thisNumber);
                }
            }
            
            //加入大小王
            map.put(index++, "小☺");
            map.put(index++, "大☻");
            
            //一副54张的牌 ArrayList里边为0-53的数的新牌
            ArrayList<Integer> cards = new ArrayList<Integer>();
            
            for (int i = 0; i <= 53; i++) {
                cards.add(i);
            }
            
            //洗牌
            Collections.shuffle(cards);
            
            //创建三个玩家和底牌
            ArrayList<Integer> iPlayer = new ArrayList<Integer>();
            ArrayList<Integer> iPlayer2 = new ArrayList<Integer>();
            ArrayList<Integer> iPlayer3 = new ArrayList<Integer>();
            ArrayList<Integer> itCards = new ArrayList<Integer>();
            
            //遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中
            for (int i = 0; i < cards.size(); i++) {
                if(i>=51) {
                    iCards.add(cards.get(i));
                } else {
                    if(i%3==0) {
                        iPlayer.add(cards.get(i));
                    }else if(i%3==1) {
                        iPlayer2.add(cards.get(i));
                    }else {
                        iPlayer3.add(cards.get(i));
                    }
                }
            }
            
            //对每个人手中的牌排序
            Collections.sort(iPlayer);
            Collections.sort(iPlayer2);
            Collections.sort(iPlayer3);
            
            //对应数字形式的每个人手中的牌,定义字符串形式的牌
            ArrayList<String> sPlayer = new ArrayList<String>();
            ArrayList<String> sPlayer2 = new ArrayList<String>();
            ArrayList<String> sPlayer3 = new ArrayList<String>();
            ArrayList<String> sCards = new ArrayList<String>();
            
            for (Integer key : iPlayer) {
                sPlayer.add(map.get(key));
            }
            for (Integer key : iPlayer2) {
                sPlayer2.add(map.get(key));
            }
            for (Integer key : iPlayer3) {
                sPlayer3.add(map.get(key));
            }
            for (Integer key : iCards) {
                sCards.add(map.get(key));
            }
            
            //看牌
            System.out.println(sPlayer);
            System.out.println(sPlayer2);
            System.out.println(sPlayer3);
            System.out.println(sCards);
        }
    }
  • 相关阅读:
    Jquery $().each()与$.each(data,function(i,obj))区别
    「人生最好的境界」​​写出我心(九十)
    「金融市场里的推销」​写出我心(八十九)
    「错误」写出我心(八十八)
    「马丁路德·金的名言」写出我心(八十七)
    「眼界」​​​​​​​​​​​写出我心(八十六)
    「一个人真正成年的三大标志」写出我心(八十五)
    「如何降低事件对你的伤害」​​​​​​​​​​写出我心(八十四)
    「眼界的重要性」​​​​​​​​​写出我心(八十三)
    「平视所有优秀的人」​​​​​​​​写出我心(八十二)
  • 原文地址:https://www.cnblogs.com/smilehq/p/12896168.html
Copyright © 2011-2022 走看看