Java用集合实现斗地主洗牌发牌

2023-11-08

案列分析
准备4种花色牌与13种数值牌循环嵌套为52张牌,加两种特殊牌大王小王牌共54种,再进行洗牌发牌


一、思路分析

思路

1.准备牌

准备一个集合存放所有牌
准备两个数组分别存取扑克牌的4种花色和13种数值
进行嵌套组合形成52张牌加到所有牌中
把特殊牌(大王,小王)加到所有牌集合中共54张牌

2.洗牌
使用集合的工具类Collections中的方法使用默认随机源对指定列表进行置换

3.发牌
创建4个集合分别存取 玩家1 玩家2 玩家3 地主牌
总牌数先取三张放到地主牌中
依次给玩家发牌
随机产生个地主

4.看牌
输出打印玩家和地主

二、准备牌

1.准备一个集合存放所有牌

     ArrayList<String>  sum= new ArrayList<>();//存所有牌号

2.准备两个数组分别存取扑克牌的4种花色和13种数值

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

3.进行嵌套组合形成52张牌加到所有牌中


        //增强for循环嵌套遍历两个数组,组装52张牌
        for (String color : colors) {
            for (String number : numbers) {
                sum.add(color+number);
            }
        }

4.把特殊牌(大王,小王)加到所有牌集合中共54张牌

//添加大王小王到集合当中
        sum.add("大王");
        sum.add("小王");

三、洗牌

1.使用集合的工具类Collections中的方法使用默认随机源对指定列表进行置换

   //       2.洗牌
    public void Shffle(ArrayList sum)
    {
        //使用集合的工具类Collections中的方法
        //static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
        Collections.shuffle(sum);
    }

四、发牌

1.创建4个集合分别存取 玩家1 玩家2 玩家3 地主牌

    ArrayList<String> Player1 = new ArrayList<>();//玩家1
    ArrayList<String> Player2 = new ArrayList<>();//玩家2
    ArrayList<String> Player3 = new ArrayList<>();//玩家3
    ArrayList<String> Dipai = new ArrayList<>();//地主牌

2. 总牌数先取三张放到地主牌中和依次发牌玩家

  for (int i = 0; i < sum.size(); i++) {
            //获取每一张牌
            String p = (String) sum.get(i);
            //轮流发牌
            if (i >= 51) {
            //给地主牌发牌
                Dipai.add(p);
            }
            //因为i%3有三种结果就可以一张一张的给玩家发牌
            else if (i % 3 == 0) {
             //给玩家1发牌
                Player1.add(p);
            } else if (i % 3 == 1) {
             //给玩家2发牌
                Player2.add(p);
            } else if (i % 3 == 2) {
             //给玩家3发牌
                Player3.add(p);
            }
        }

3.随机产生个地主

        Random random = new Random();//产生随机数
        int a = random.nextInt(3) + 1;//控制随机数范围为 1,2,3
        System.out.println("本局地主为" + a + "号玩家");//选出地主

给地主发地主牌

 //判断地主是谁然后把地主牌给他
        if(a==1)
        {   //使用Collections.addAll方法 把集合Player1里面分别添加集合dipai里面的1,2,3元素
            Collections.addAll(Player1, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==2)
        {

            Collections.addAll(Player2, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==3)
        {
            Collections.addAll(Player3, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }


    }

五、看牌

//4.看牌
    public void show() {
        System.out.println("1号玩家" +Player1);
        System.out.println("2号玩家" + Player2);
        System.out.println("3号玩家" + Player3);
        System.out.println("地主牌为"+ Dipai);
    }

六、运行效果

在这里插入图片描述

七、代码总和

斗地主案列主函数

import java.util.ArrayList;

public class DouDiZhu_PRO {
    public static void main(String[] args) {
        ArrayList<String>  sum= new ArrayList<>();//存所有牌号

        DouDiZhuPRO is = new DouDiZhuPRO();
//        1.准备牌
        is.prepare(sum);
//        2.洗牌
        is.Shffle(sum);
//        3.发牌
        is.Deal(sum);
//        4.看牌
        is.show();
    }
}

斗地主案列的类

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class DouDiZhuPRO {
    private ArrayList sum; //存放所有牌的总集合
    ArrayList<String> Player1 = new ArrayList<>();//玩家1
    ArrayList<String> Player2 = new ArrayList<>();//玩家2
    ArrayList<String> Player3 = new ArrayList<>();//玩家3
    ArrayList<String> Dipai = new ArrayList<>();//地主牌

    //1.准备牌
    public  void prepare(ArrayList sum)
    {
        //定义两个数组存花色和牌数
        String[] colors =  {"♠","♥","♣","♦"};
        String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};

        //增强for循环嵌套遍历两个数组,组装52张牌
        for (String color : colors) {
            for (String number : numbers) {
                sum.add(color+number);
            }
        }

        //添加大王小王到集合当中
        sum.add("大王");
        sum.add("小王");
    }


       //       2.洗牌
    public void Shffle(ArrayList sum)
    {
        //使用集合的工具类Collections中的方法
        //static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
        Collections.shuffle(sum);
    }


      //        3.发牌

    public void Deal(ArrayList sum) {

        Random random = new Random();//产生随机数
        int a = random.nextInt(3) + 1;//控制随机数范围为 1,2,3
        System.out.println("本局地主为" + a + "号玩家");//选出地主

        for (int i = 0; i < sum.size(); i++) {
            //获取每一张牌
            String p = (String) sum.get(i);
            //轮流发牌
            if (i >= 51) {
            //给地主牌发牌
                Dipai.add(p);
            }
            //因为i%3有三种结果就可以一张一张的给玩家发牌
            else if (i % 3 == 0) {
             //给玩家1发牌
                Player1.add(p);
            } else if (i % 3 == 1) {
             //给玩家2发牌
                Player2.add(p);
            } else if (i % 3 == 2) {
             //给玩家3发牌
                Player3.add(p);
            }
        }

        //判断随机产生的地主是谁然后把地主牌给他
        if(a==1)
        {   //使用Collections.addAll方法 把集合Player1里面分别添加集合dipai里面的1,2,3元素
            Collections.addAll(Player1, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==2)
        {

            Collections.addAll(Player2, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==3)
        {
            Collections.addAll(Player3, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }


    }

    //4.看牌
    public void show() {
        System.out.println("1号玩家" +Player1);
        System.out.println("2号玩家" + Player2);
        System.out.println("3号玩家" + Player3);
        System.out.println("地主牌为"+ Dipai);
    }
    }


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java用集合实现斗地主洗牌发牌 的相关文章

  • 将 Java 对象图保存为 XML 文件

    将任意 Java 对象图保存为 XML 文件 并能够在以后重新水合对象 的最简单易用的技术是什么 这里最简单的方法是序列化对象图 Java 1 4 内置了对 XML 序列化的支持 我成功使用的一个解决方案是 XStream http x s
  • 如何知道 HTTP 服务器何时完成发送数据

    我正在开发一个面向浏览器 代理的项目 我需要下载网页 向 Web 服务器发送自定义 HTTP 请求后 我开始监听服务器响应 读取响应时 我检查响应标头中的 Content Length row 如果我得到其中之一 很容易确定服务器何时完成发
  • 使用 ScriptEngine 从 JavaScript 调用 Java 方法

    我正在使用 ScriptEngine 运行 JavaScript 我希望 JavaScript 脚本能够调用 myFunction 其中 myFunction 是我的给定类中的一个方法 我知道可以将 importPackage 用于标准 J
  • 为 JSP 创建注销链接?

    当用户登录我的应用程序时 他提交一个要通过 Servlet 处理的表单 servlet 为用户创建一个会话 我如何创建一个链接以便用户可以注销 我似乎无法直接链接到 Servlet 如何删除会话并链接回主页 HttpSession sess
  • 如何注入“运行时”依赖项,例如登录用户,该依赖项在应用程序启动时不可用?

    我只是不明白这个 我在我的 java GWT 应用程序中使用 Gin 来进行 DI 登录屏幕集成到完整的应用程序窗口中 用户登录后 我想将用户对象注入到我创建的其他类 例如 GUI Presenters 中 因此我相信存在某种运行时依赖性
  • 有没有一种干净的方法将泛型类型的类分配给变量?

    鉴于此代码 List
  • 获取文本文件中行的字节偏移量?

    我有一个文本文件 例如 one two three four five 我需要获取文件中每一行的偏移量 我如何在 Java 中做到这一点 我搜索了一些 I O 库 如 BufferedReader 和 RandomAccessFile 但我
  • Maven 部署:deploy-file 发布所有文件而不是一个

    我正在使用 Maven 构建我的 Java 应用程序Maven 组装插件 https maven apache org plugins maven assembly plugin 创建一个可执行的 jar 因此 目标文件夹包含多个 jar
  • 在 Selenium Grid 中注册 PhantomJS 节点时出错

    我有以下问题 我成功启动了 Selenium Grid hub java jar selenium server standalone 2 53 0 jar role hub 之后我尝试使用以下命令启动 PhantomJS 节点 phant
  • 当我打印出数组列表的索引时如何删除最后一个逗号[重复]

    这个问题在这里已经有答案了 List
  • 使用 JPA 标准的“不在”约束

    我正在尝试写一个NOT IN约束使用JPA Criteria 我尝试过这样的事情 builder not builder in root get property1 虽然我知道这行不通 在上面的语法中 如何添加集合 列表property1会
  • 异步不适用于控制器的抽象超类方法

    我有一个BaseRestControllerRest 控制器扩展的类 它有一个我想异步运行的方法 public abstract class BaseRestController Async someThreadPoolTaskExecut
  • 使用会话空闲超时进行轮询

    我对 Tomcat 中的所有应用程序使用单点登录 我的要求是 我必须轮询应从后端获取的事务状态 但它也不应该影响会话的空闲超时 有人可以建议是否可以做点什么吗 Thanx 我不知道是否有标准方法可以做到这一点 如果没有 你可以写一个过滤器
  • 谷歌的Json解析Gson库:JsonElement和JsonObject有什么区别?

    public abstract class JsonElement extends Object 表示 Json 元素的类 它可以是 JsonObject JsonArray JsonPrimitive 或 JsonNull public
  • 尝试用Java实现基于文本的Hangman游戏

    我需要检查用户输入的字母以及他们猜测的空格是否位于隐藏单词的特定位置 变量one等于用户猜测的空间索引 而letterGuess是他们猜测的字母 我的代码怎么错了 示例 秘密词是你好 hidden word is 用户猜测h 0 1 2 3
  • 在服务器上创建 Zip 文件并使用 java 下载该 zip

    我从 mkyong 获得了以下代码 用于在本地压缩文件 但是 我的要求是在服务器上压缩文件并需要下载它 任何人都可以帮忙吗 代码写入zip文件 public void zipFiles File contentFile File navFi
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • 在地图中的图块上实现鼠标单击事件

    我正在尝试在 JPanel 上实现图像 基本上是地图上的图块 的鼠标单击事件 我只是不知道该怎么做 我有一个扩展 JPanel 的 Main 类 我正在从图块服务器检索图块 并根据特定的缩放级别在 Main 类的 PaintComponen
  • 在android中测量不规则多边形的面积

    我正在开发一个应用程序 在其中我在地图上绘制多边形 并且我使用的地图不是谷歌 它的Mapsforge开源离线地图库 我可以通过将地理点转换为像素点来轻松在地图上绘制多边形 但在这里我想发现是不规则的多边形 为此我做了很多尝试 但它让我失败了
  • Cassandra 会话与集群 有什么可分享的?

    考虑 Cassandra 的 Session 和 Cluster 类 Java 驱动程序 我想知道有什么区别 在 Hibernate 中 每次都会创建一个会话并共享会话工厂 从许多来源我了解到 它被认为是创建一个会话并在多个线程之间共享它

随机推荐

  • nacos注册中心的配置

    将nacos作为注册中心使用 使用的步骤 导入nacos依赖 这么导
  • 选路算法(计算机网络)

    目的 决定从源到目的地通过网络的 好的路径 一般指最小费用的路径 根据算法是静态的还是动态的进行分类 静态 路由随时间缓慢变化 手工配置 动态 路由更快地变化 周期的更新 适应链路费用和网络拓扑变化 根据算法是全局式的还是分散式的来加以区分
  • Python入门指南:从零开始学习Python编程

    文章目录 前言 安装Python 变量以及数据类型 总结 前言 Python是一种简单而又强大的编程语言 它在全球范围内广受欢迎 适用于各种应用场景 包括Web开发 数据分析 人工智能和科学计算等 本篇博客将为初学者提供一份Python入门
  • 【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 Simulink 文章讲解 1 概述 文献来源 抗扰PI
  • 背景图片设置透明度

    div position relative background color eee background moz linear gradient 30deg eff8fd 0 f0f9fe 40 c4e2fe 80 9cbee6 100
  • 计算损失函数C语言,EAST 算法超详细源码解析(四)、损失函数

    Date 2020 05 19 Author CW 前言 EAST 的损失函数由三部分构成 对应预测输出的三个map score map loc map 以及 angle map 即分类损失 位置 点到文本框边界上下左右的距离 损失以及角度
  • stm32—通用定时器实验设计

    stm32定时器编写 stm32定时器编写 1 打开项目 2 在timer h中完成定时器中断实现步骤 a 使能定时器函数 b 初始化定时器 备注 c 开启定时器中断 配置NVIC d 使能定时器 3 写入中断服务函数 中断函数完成后 开始
  • 使用react脚手架快速搭建项目以及项目文件的介绍(目录文件的功能及作用)

    前言 本篇文章教大家使用脚手架搭建react的项目 对于新建的react项目 项目目录里的文件都是干什么的 有什么作用呢 下面一起来看看 react脚手架 使用yarn在本地安装create react app npm i g yarn 全
  • Easylogging++之配置功能

    要完成Easylogging 日志的配置功能 可以通过三种方式实现 而且每一种方法都非常简单 使用配置文件 这种方法的好处就是只要修改配置文件即可实现日志格式的重新配置 而不需要修改源程序代码 缺点就是发布程序时必须打包配置文件一起发布 否
  • 常见架构模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 计算机操作系统 (王道考研)笔记(一)

    重点知识点 1 并发 并行 2 电脑开机过程 3 程序 进程 4 进程 4 1 进程的组成与控制 进程的状态与转换 4 1 1 进程的组成 4 1 2 进程控制 4 1 3 进程的状态与转换 4 1 4 程序的切换 4 2 进程通信 4 2
  • 由计数排序衍生出来的桶排序

    计数排序说白了 就是拿一个列表来记录list里的数对应count的下标出现的次数 最后利用count的统计打印出来即可 下面来看看桶排序 针对较多的数据排序 将数据分为n个桶 列表遍历 冒泡排序逆用 确保每个桶里有序 直到最后将内个桶的数据
  • mysql查询时取多条记录中最大时间的记录

    在查询的过程中 有时库里单个用户的数据往往会存在很多条 当我们需要查询出用户的一条数据时 最大时间对应记录或最小时间对应记录 往往要写很复杂的子查询 而其实通过一个简单的方法就可以查询 就是使用concat函数 就可以非常简单的查询出相应的
  • 小技巧(8):Word中自定义目录,并设置自动目录的格式

    文章目录 一 对正文中的目录设置大纲级别 1 1 通过样式设置标题级别 1 2 通过段落设置标题级别 二 设定自定义目录格式 2 1 生成自定义目录 2 2 设置显示大纲级别 2 3 设置不同级别目录的显示格式 一 对正文中的目录设置大纲级
  • vsftpd的安装和使用

    目录 1 vsftpd的简介 2 2 特点 2 3 安装 2 4 创建虚拟用户 2 5 vsftpd服务器的配置 4 6 vsftpd配置文件说明 7 7 防火墙的配置 8 8 vsftpd的验证 9 9 vsftpd的常用命令 10 10
  • sql 递归查询_SQL如何求解递归问题?

    点击上方SQL数据库开发 关注获取SQL视频教程 SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总 递归 递归是指程序调用自身的一种编程技巧 在SQL中也有递归查询 下面我们通过一个省市区的示例来讲解递归查询的用法 问题 有如下一
  • 【C语言刷题2】

    1 杨辉三角 思路 首先观察一下示例 会发现需要一个二维数组来帮助解题 根据题目描述 会发现每一行的元素个数等于行数 并且每行首尾元素都是1 中间的元素都是左上角和上方元素和 这样我们就可以建立一个选择语句if else 如果是每行第一个或
  • UE4 C++ Timeline

    UE4 C Timeline 我命名有点不规范注意点看 结束事件绑定 每次更改绑定 调用时间轴开始方法方法 1 先建C 类 用碰撞触发时间轴 代码 h Fill out your copyright notice in the Descri
  • Compareable接口的compareTo方法详解

    Compareable接口可以实现类中成员属性的排序方法 通过重写Compareable接口中的CompareTo方法实现自定义规则的排序 针对Compareable接口的排序方式 将通过对学生类和测试类进行一个代码演示 一般情况下 一般情
  • Java用集合实现斗地主洗牌发牌

    案列分析 准备4种花色牌与13种数值牌循环嵌套为52张牌 加两种特殊牌大王小王牌共54种 再进行洗牌发牌 文章目录 一 思路分析 二 准备牌 1 准备一个集合存放所有牌 2 准备两个数组分别存取扑克牌的4种花色和13种数值 3 进行嵌套组合