重学java 52.集合 斗地主案例

你太锐利了,这些年来,风霜雨雪,踉跄清冷,我相信你所有的苦楚

                                                                                                —— 24.5.30

1 案例介绍

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

具体规则:

        使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

2 案例分析

准备牌:

牌可以设计为一个ArrayList<String>,每个字符串为一张牌。
每张牌由花色、数字两部分组成,我们可以使用花色集合与数字集合套选代完成每张牌的组装。
牌由Collections类的shuffe方法进行随机排序。

发牌

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

看牌

        直接打印每个集合。

        将四个花色与13个数字分别进行组合,通过shuffle进行洗牌,将组合后牌的顺序打乱,将牌的索引数除以3,得余数0,1,2,分为三组,然后发派时从三个集合中各自抽取一张

3.代码实现 

① 创建ArrayList集合 —> color —> 存放花色

        ArrayList<String> color = new ArrayList<>();

②  创建ArrayList集合 —> number —> 存放牌号

        ArrayList<String> number = new ArrayList<>();

③  创建ArrayList集合 —> poker —> 存放各组合牌面

        ArrayList<String> poker = new ArrayList<>();
        color.add("♠");
        color.add("♥");
        color.add("♣");
        color.add("♦");

        for (int i = 2; i <= 10; i++) {
            number.add(i+"");
        }

        number.add("J");
        number.add("Q");
        number.add("K");
        number.add("A");
        for (String num : number) {
            for (String huaSe : color) {
                String pokerNum = huaSe + num;
                poker.add(pokerNum);
            }
        }

        poker.add("大☺");
        poker.add("小😊");

④  打乱poker

        Collections.shuffle(poker);

⑤ 创建4个ArrayList集合,分别代表三个玩家,以及存储一个底牌

        ArrayList<String> p1 = new ArrayList<>();
        ArrayList<String> p2 = new ArrayList<>();
        ArrayList<String> p3 = new ArrayList<>();
        ArrayList<String> dip = new ArrayList<>();

        for (int i = 0; i < poker.size(); i++) {
            String pokerNum = poker.get(i);

⑥ 如果index为最后三张,将底牌往集合中存

//        ⑥ 如果index为最后三张,将底牌往集合中存
            if (i >= 51){
                dip.add(pokerNum);
            }

⑦ 如果index%3 == 0 给p1

else if (i % 3 == 0) {
                //        ⑦ 如果index%3 == 0 给p1
                p1.add(pokerNum);
            }

⑧ 如果index%3 == 1 给p2

else if (i % 3 == 1) {
                //        ⑧ 如果index%3 == 1 给p2
                p2.add(pokerNum);
            }

⑨ 如果index%3 == 2 给p3

else if (i % 3 == 2){
                //        ⑨ 如果index%3 == 2 给p3
                p3.add(pokerNum);
            }

⑩ 遍历看牌

//        ⑩ 遍历看牌
        System.out.println("甲:"+p1);
        System.out.println("乙:"+p2);
        System.out.println("丙:"+p3);
        System.out.println("底牌:"+dip);

⑪ 完整代码 

package S86SetFrameExample;

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

public class Poker {
    public static void main(String[] args) {
//         ① 创建ArrayList集合 —> color —> 存放花色
        ArrayList<String> color = new ArrayList<>();
//        ② 创建ArrayList集合 —> number —> 存放牌号
        ArrayList<String> number = new ArrayList<>();
//        ③ 创建ArrayList集合 —> poker —> 存放各组合牌面
        ArrayList<String> poker = new ArrayList<>();
        color.add("♠");
        color.add("♥");
        color.add("♣");
        color.add("♦");

        for (int i = 2; i <= 10; i++) {
            number.add(i+"");
        }

        number.add("J");
        number.add("Q");
        number.add("K");
        number.add("A");

        // System.out.println(color);  // [♠, ♥, ♣, ♦]
        // System.out.println(number); // [2, 3, 4, 5, 6, 7, 8, 9, J, Q, K, A]
        for (String num : number) {
            for (String huaSe : color) {
                String pokerNum = huaSe + num;
                poker.add(pokerNum);
            }
        }

        poker.add("大☺");
        poker.add("小😊");
//        System.out.println(poker);

//        ④ 打乱poker
        Collections.shuffle(poker);
        // System.out.println(poker);

//        ⑤ 创建4个ArrayList集合,分别代表三个玩家,以及存储一个底牌
        ArrayList<String> p1 = new ArrayList<>();
        ArrayList<String> p2 = new ArrayList<>();
        ArrayList<String> p3 = new ArrayList<>();
        ArrayList<String> dip = new ArrayList<>();

        for (int i = 0; i < poker.size(); i++) {
            String pokerNum = poker.get(i);
//        ⑥ 如果index为最后三张,将底牌往集合中存
            if (i >= 51){
                dip.add(pokerNum);
            } else if (i % 3 == 0) {
                //        ⑦ 如果index%3 == 0 给p1
                p1.add(pokerNum);
            }else if (i % 3 == 1) {
                //        ⑧ 如果index%3 == 1 给p2
                p2.add(pokerNum);
            }else if (i % 3 == 2){
                //        ⑨ 如果index%3 == 2 给p3
                p3.add(pokerNum);
            }
        }

//        ⑩ 遍历看牌
        System.out.println("甲:"+p1);
        System.out.println("乙:"+p2);
        System.out.println("丙:"+p3);
        System.out.println("底牌:"+dip);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ipv6基础

地址 前缀子网主机位 PI法则3.14 前缀&#xff1a;3个16位 子网&#xff1a;1个16位 接口ID&#xff1a;4个16位 地址分类 未指定地址 ::/128 &#xff0c;类似于0.0.0.0 本地回环地址 ::1/128 &#xff0c;用于本地测试&#xff0c;类似于127.0.0.1 本地链路地址&#x…

【云原生】kubernetes中pod的生命周期、探测钩子的实战应用案例解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

正则匹配优化:匹配排除多个字符串的其他字符串

(^entity|^with|...)\w优化 (?!entity|with|has|index|associations|input)\w(?!): 匹配排除项 效果 继续优化 匹配会过滤掉带有关键字的字段&#xff0c;在过滤的时候是可以加上尾部结束匹配符的 效果&#xff1a;

JS-Lodash工具库

文档&#xff1a;Lodash Documentation orderBy函数&#xff1a;根据条件进行排序 注&#xff1a;第一个是要排序的数组&#xff0c;第二个是根据什么字段进行排序&#xff0c;第三个是排序的方式&#xff08;desc倒序&#xff09; 安装方式&#xff1a;Lodash npm i lodash…

【码银送书第二十期】《游戏运营与出海实战:策略、方法与技巧》

市面上的游戏品种繁杂&#xff0c;琳琅满目&#xff0c;它们是如何在历史的长河中逐步演变成今天的模式的呢&#xff1f;接下来&#xff0c;我们先回顾游戏的发展史&#xff0c;然后按照时间轴来叙述游戏运营的兴起。 作者&#xff1a;艾小米 本文经机械工业出版社授权转载&a…

平衡二叉树(oj题)

一、题目链接&#xff1a; https://leetcode.cn/problems/balanced-binary-tree/submissions/536133365 二、思路 调用深度计算函数&#xff0c;得到每次当前的根结点的左右子树的深度。比较每次得到的左右子树深度之差 如果当前根节点的左右子树的深度差大于1,说明不是平衡…

03-树2 List Leaves(浙大数据结构PTA习题)

03-树2 List Leaves 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. Input Specification: Each input file contains one test c…

mac 安装java jdk8 jdk11 jdk17 等

oracle官网 https://www.oracle.com/java/technologies/downloads/ 查看当前电脑是英特尔的x86 还是arm uname -m 选择指定版本&#xff0c;指定平台的安装包&#xff1a; JDK8 JDK11的&#xff0c;需要当前页面往下拉&#xff1a; 下载到的安装包&#xff0c;双击安装&#x…

Linux系统编程(六)线程同步机制

本文目录 前述&#xff1a;同步机制的引入及概念一、线程的互斥锁1. 定义2. 互斥锁常用方法3. 相关函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;创建互斥锁&#xff08;3&#xff09;销毁互斥锁&#xff08;4&#xff09;加锁&#xff08;5&#xff09;解锁 …

Java Sort 方法的使用(包含Arrays.sort(),Collections.sort()以及Comparable,Comparator的使用 )

目录 Comparable && Comparator的使用&#xff1a; Comparable: Comparator: Arrays.sort()的使用: 升序排序&#xff1a; 降序排序&#xff1a; 自定义排序方法&#xff1a; 在日常的刷题或开发中&#xff0c;很多时候我们需要对数据进行排序&#xff0c;以达到我…

【C++修行之道】类和对象(二)类的6个默认成员函数、构造函数、析构函数

目录 一、类的6个默认成员函数 二、构造函数 2.1 概念 2.2 特性 2.2.5 自动生成默认构造函数 不进行显示定义的隐患&#xff1a; 2.2.6 自动生成的构造函数意义何在&#xff1f; 两个栈实现一个队列 2.2.7 无参的构造函数和全缺省的构造函数都称为默认构造函数&#x…

ELK 使用 metricbeat监控数据

IP功能版本192.168.140.153elk-18.13.4192.168.140.153metricbeat8.13.4192.168.140.156elk-28.13.4192.168.140.156metricbeat8.13.4192.168.140.159logstash8.13.4192.168.140.159kibana8.13.4 一、安装ELK 参考文档&#xff1a; https://download.csdn.net/download/weix…

【免费Web系列】JavaWeb实战项目案例四

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 多表操作&员工列表查询 1. 多表关系 关于单表的操作(单表的设计、单表的增删改查)我们就已经学习完了。接下来我们就要来学习多表的操作&#xff0c;首先来学习多表的设计。 项目开发中&#xff0…

2023年全球DDoS攻击现状与趋势分析

天翼安全科技有限公司副总工程师、运营保障部总经理陈林表示&#xff0c;2023年扫段攻击频次快速增长&#xff0c;成为网络基础设施面临的最大威胁。为躲避防御&#xff0c;低速扫段攻击成为主流达到攻击总数的73.19%&#xff1b;43.26%的C段攻击持续时间小于5分钟&#xff0c;…

面试题vue+uniapp(个人理解-面试口头答述)未编辑完整....

1.vue2和vue3的区别&#xff08;vue3与vue2的区别&#xff08;你不知道细节全在这&#xff09;_vue2和vue3区别-CSDN博客&#xff09;参考 Vue3 在组合式&#xff08;Composition &#xff09;API&#xff0c;中使用生命周期钩子时需要先引入&#xff0c;而 Vue2 在选项API&am…

车载以太网的未来:OPEN Alliance下17个技术委员会的最新进展与行业影响(下)

从上篇介绍来看&#xff0c;TC1-TC8大多数处于暂停或完成状态。而TC9-TC17在2023年都有不同程度的进展&#xff0c;让我们继续探索藏在其中的车载以太网的发展和挑战。 TC9 Automotive Ethernet Channel & Components&#xff08;in progress&#xff09; TC9的目标是为通…

基础9 探索图形化编程的奥秘:从物联网到工业自动化

办公室内&#xff0c;明媚的阳光透过窗户洒落&#xff0c;为每张办公桌披上了一层金色的光辉。同事们各自忙碌着&#xff0c;键盘敲击声、文件翻页声和低声讨论交织在一起&#xff0c;营造出一种忙碌而有序的氛围。空气中氤氲着淡淡的咖啡香气和纸张的清新味道&#xff0c;令人…

【PHP项目实战训练】——laravel框架的实战项目中可以做模板的增删查改功能(2)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

linux centos nfs挂载两台服务器挂载统一磁盘目录权限问题

查看用户id id 用户名另一台为 修改uid和gid为相同id&#xff0c;添加附加组 usermod -u500 -Gwheel epms groupmod -g500 epms

SQL Server定期收缩日志文件详细步骤——基于SQL Server 2012

SQL Server定期收缩日志文件详细步骤 一、环境配置1、查看数据库的属性2、文件设置3、备份模式4、查看收缩配置5、查看收缩选项 二、编写作业计划1、选择新建作业2、常规配置3、步骤4、输入内容5、脚本详解6、新建计划7、输入名称、选择执行时间8、查看测试9、查看测试结果 一、…