使用JavaSE来模拟斗地主

通过模拟斗地主案例来练习集合的使用

结果预览:

每次发牌后,三位玩家的手牌是随机的并且已经按照手牌大小排完序,运行两次验证手牌的随机性。

马老师的牌还不错,芜湖~起飞

思路:

1.创建HashMap,键是编号,值是牌。
2.创建ArrayList,存储编号。
3.创建花色数组和点数数组。
4.从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号。
5.洗牌(洗的是编号),用Collections的shuffl()方法实现。
6.发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合。
7.定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
8.调用看牌方法

为了方便理解,我用图形的方式来描述下过程:

具体代码实现:

1.创建集合装扑克牌


//创建HashMap集合   key是编号用Integer  value是牌用String
            HashMap<Integer,String>  hm=new HashMap<>();
            //创建ArrayList集合用来存储编号
            ArrayList<Integer> list=new ArrayList<>();
            //创建花色数组和点数数组
            String [] color={"♠", "♦", "♥","♣"};
            String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
            //从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号
            int index=0;
            //增强For循环存储花色和点数
            for(String num:number){
                for(String col:color){

                    hm.put(index,col+num);
                    list.add(index);
                    index++;
                }
            }
           //52张牌存完了 还剩大小王  现在添加进去
            hm.put(index,"小王");
            list.add(index);
            index++;
            hm.put(index,"大王");
            list.add(index);

            //以上的操作实现了把54张扑克牌放入一个集合容器。
            

2.洗牌和发牌

   //洗牌(洗的是编号),用collections的shuffle()方法实现。
            Collections.shuffle(list);
            //发牌  用TreeSet接收  用三位玩家名字命名
            TreeSet<Integer> PDD=new TreeSet<>();
            TreeSet<Integer> DaSiMa=new TreeSet<>();
            TreeSet<Integer> LuBenWei=new TreeSet<>();
            //三张底牌
            TreeSet<Integer> finalCard=new TreeSet<>();
            for(int x=0;x<list.size();x++){
                //定义一个变量接收索引
                int  a= list.get(x);
                //最后三个索引
                if(x>=list.size()-3){
              finalCard.add(a);
                }else if(x%3 == 0){
                    PDD.add(a);
                }else if(x%3 == 1){
                    DaSiMa.add(a);
                }else {
                    LuBenWei.add(a);
                }
            }

3.定义看牌方法

      //定义看牌的方法(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
        public  static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String>  hm ){
            System.out.print(name+"的手牌为:");
            //遍历牌 就是遍历索引
            for(Integer key:ts){

                String poker = hm.get(key);
                System.out.print(poker+" ");
            }
            System.out.println();
        }

原码:

    package 模拟斗地主;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.TreeSet;
    /*需求:
        通过程序实现 斗地主过程中的洗牌,发牌和看牌功能,并且为了方便看牌手牌要排序。
        思路:
        1:创建HashMap集合,键是编号,值是牌。
        2:创建Arraylist集合用于存储编号。
        3:创建花色数组和点数数组。
        4:从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号。
        5 :洗牌(洗的是编号),用collections的shuffle()方法实现。
        6:发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收
        7:定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
        8:调用方法看牌
        */
    public class ChinesePoker {
        public static void main(String[] args) {
            //创建HashMap集合   key是编号用Integer  value是牌用String
            HashMap<Integer,String>  hm=new HashMap<>();
            //创建ArrayList集合用来存储编号
            ArrayList<Integer> list=new ArrayList<>();
            //创建花色数组和点数数组
            String [] color={"♠", "♦", "♥","♣"};
            String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
            //从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号
            int index=0;
            //增强For循环存储花色和点数
            for(String num:number){
                for(String col:color){

                    hm.put(index,col+num);
                    list.add(index);
                    index++;
                }
            }
           //52张牌存完了 还剩大小王  现在添加进去
            hm.put(index,"小王");
            list.add(index);
            index++;
            hm.put(index,"大王");
            list.add(index);
            //洗牌(洗的是编号),用collections的shuffle()方法实现。
            Collections.shuffle(list);
            //发牌  用TreeSet接收  用三位玩家名字命名
            TreeSet<Integer> PDD=new TreeSet<>();
            TreeSet<Integer> DaSiMa=new TreeSet<>();
            TreeSet<Integer> LuBenWei=new TreeSet<>();
            //三张底牌
            TreeSet<Integer> finalCard=new TreeSet<>();
            for(int x=0;x<list.size();x++){
                //定义一个变量接收索引
                int  a= list.get(x);
                //最后三个索引
                if(x>=list.size()-3){
              finalCard.add(a);
                }else if(x%3 == 0){
                    PDD.add(a);
                }else if(x%3 == 1){
                    DaSiMa.add(a);
                }else {
                    LuBenWei.add(a);
                }
            }
            //调用看牌方法
            lookPoker("PDD",PDD,hm);
            lookPoker("大司马",DaSiMa,hm);
            lookPoker("卢本伟",LuBenWei,hm);
            lookPoker("底牌",finalCard,hm);
        }

            //定义看牌的方法(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
        public  static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String>  hm ){
            System.out.print(name+"的手牌为:");
            //遍历牌 就是遍历索引
            for(Integer key:ts){

                String poker = hm.get(key);
                System.out.print(poker+" ");
            }
            System.out.println();
        }
    }

以上就是使用JavaSE来模拟斗地主的详细内容,更多关于JavaSE斗地主的资料请关注我们其它相关文章!

(0)

相关推荐

  • java实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌的具体代码,供大家参考,具体内容如下 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 代码如下: 牌类 import java.util.Objects; /** * 3-10 J Q K A 2 King Queen 牌类 * * @author Administrator * */ public class Card { /** 牌面值 */ private String name; /**

  • java模拟斗地主发牌功能

    本文实例为大家分享了java模拟斗地主发牌的具体代码,供大家参考,具体内容如下 1.案例介绍 规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,后三张留作底牌 查看三人各自手中的牌(按照牌的大小排序).底牌 2. 分析 1).准备牌: 完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典). 2).洗牌: 通过数字完成洗牌发牌 发牌: 将每个人以及底牌设计为ArrayList,将后3张牌直接存

  • java实现斗地主发牌系统

    本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下 玩家类 package com.softeem.example; import java.util.ArrayList; import java.util.List; /** * 玩家类 * */ public class Player { private String name; //名字 private boolean landowner; //是否地主 private List<Card> cards =

  • Java实现斗地主最简代码实例

    案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌). 具体代码实现步骤: 扑克牌准备操作 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class PokerGame { public static void main(String[] args) {

  • java模拟实现斗地主发牌小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. 主要使用的类有 ArrayList:用来存储扑克,Collections用来洗牌. import java.util.ArrayList; import java.util.Collections; /* * 模拟斗地主发牌 一共54张牌 * 买牌 * 洗牌 * 发牌 * */ public cl

  • Java实现简单的斗地主游戏

    本文实例为大家分享了Java实现斗地主游戏的具体代码,供大家参考,具体内容如下 原理图: 斗地主过程: 1.组合牌  * 2.洗牌  * 3.发牌  * 4.看牌 代码实现: package itcast.demo6; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { public static void main(String[]

  • 使用JavaSE来模拟斗地主

    通过模拟斗地主案例来练习集合的使用 结果预览: 每次发牌后,三位玩家的手牌是随机的并且已经按照手牌大小排完序,运行两次验证手牌的随机性. 马老师的牌还不错,芜湖~起飞 思路: 1.创建HashMap,键是编号,值是牌. 2.创建ArrayList,存储编号. 3.创建花色数组和点数数组. 4.从0开始往HashMap里面存储编号,并存储对应的牌.同时往ArrayList里面存储编号. 5.洗牌(洗的是编号),用Collections的shuffl()方法实现. 6.发牌(发的也是编号,为了保证编

  • C#使用二维数组模拟斗地主

    本文实例讲述了C#使用二维数组模拟斗地主的方法.分享给大家供大家参考.具体如下: package com.pb.demo; import java.util.Arrays; import java.util.Random; /** * 扑克牌随机发牌♠♥♣♦ 二维数组实现 * */ public class Puker { public static void main(String[] args) { // 定义数组 String[][] puker = new String[5][]; pu

  • python模拟斗地主发牌

    本文实例为大家分享了python模拟斗地主发牌的具体代码,供大家参考,具体内容如下 题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作系统下自带的纸牌.红心大战等.在扑克牌类的游戏中,往往都需要执行洗牌操作,就是将一副牌完全打乱,使其排列没有规律. 要求: 1.54张扑克牌发个3个玩家,农民17张,地主20张. 2.自动生成一幅扑克牌组:洗牌:发牌到玩家手中:将玩家手中扑克牌按花色大小整理好.** ''' 趣味百题-发扑克牌-斗地

  • Java模拟实现斗地主发牌

    本文实例为大家分享了Java模拟实现斗地主发牌的具体代码,供大家参考,具体内容如下 题目: 模拟斗地主的发牌实现,54张牌,每张牌不同的花色(红心,黑桃,方块,梅花),牌的点数(3,4,5,6,7,8,9,10,J,Q,K,A,2,King,Queen),另有三名玩家,要求(使用面向对象的方式实现): 1.随机产生一名地主 2.随机向三名玩家发牌,最后的底牌自动发给地主 3.显示出每名玩家手中的牌 4.要求根据点数自动对玩家手中的牌排序实现(*) 提示:玩家类,牌类,游戏类(算法) 步骤分析:

  • java集合模拟实现斗地主洗牌和发牌

    本文实例为大家分享了java实现斗地主洗牌和发牌的具体代码,供大家参考,具体内容如下 1:用ArrayList集合实现 案例分析: 我们现在要做的是模拟斗地主小游戏来进行洗牌和发牌. 具体步骤: A:首先,创建一个ArrayList集合来存储牌,将牌的花色和点数存储在俩个字符串数组中中,然后用for循环加强遍历将每张牌的花色点数及大王小王存储在集合中. B:进行洗牌,调用collectionas的shuffle方法. C:进行发牌,创建四个ArrayList集合,分别用来存储玩家一,玩家二,玩家

  • Java模拟实现斗地主的洗牌和发牌

    本文实例为大家分享了Java实现斗地主的洗牌和发牌的具体代码,供大家参考,具体内容如下 案例分析: 我们需要模拟斗地主过程中的洗牌.发牌和看牌.而且要求牌是排好序的. 1.每张扑克牌都有花色和点数,所以我们可以先把花色和点数存进两个字符串数组,然后再存进集合里,而因为我们后面涉及到对牌进行洗牌还有排序等等,所以我们选择TreeMap集合来存储,键是扑克牌的编号,值是扑克牌的花色和点数(把花色和点数拼接成一个字符串). 2.洗牌洗的是编号,我们再用ArrayList集合来存储牌的编号,调用Coll

  • Java高级应用之斗地主游戏

    斗地主综合案例,供大家参考,具体内容如下 运用HashMap.ArrayList.List类实现斗地主综合案例,模拟斗地主游戏的随机发牌,并按照牌的大小和花色进行排列. 斗地主玩家每轮都有三个玩家,运用Collections类中的shuffle()方法打乱一整幅扑克牌,利用取余原理将凑乱的牌发放给三个玩家,整副牌发完后的最后三张永一个ArrayList存储作为底牌.具体代码实现如下: import java.util.ArrayList; import java.util.Collections

  • Java复习之集合框架总结

    俗话说:温故而知新.想想学过的知识,就算是以前学得很不错,久不用了,就会忘记,所以温习一下以前学习的知识我认为是非常有必要的.而本篇文件温习的是 Java基础中的集合框架. 为什么会有集合框架? 平时我们用数组存储一些基本的数据类型,或者是引用数据类型,但是数组的长度是固定的,当添加的元素超过了数组的长度时,需要对数组进行重新的定义,这样就会显得写程序太麻烦,所以Java内部为了我们方便,就提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少. 数组可以存储

随机推荐