当前位置: 首页 > news >正文

斗地主洗牌发牌-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

【案例6-4】 斗地主洗牌发牌

【案例介绍】

1.任务描述

扑克牌游戏“斗地主”,相信许多人都会玩,本案例要求编写一个斗地主的洗牌发牌程序,要求按照斗地主的规则完成洗牌发牌的过程。一副扑克总共有54张牌,牌面由花色和数字组成(包括J、Q、K、A字母)组成,花色有♠、♥、♦、♣ 四种,分别表示黑桃、红桃、方块、梅花,小☺、大☻分别表示小王和大王。斗地主游戏共有3位玩家参与,首先将这54张牌的顺序打乱每人轮流摸一次牌,剩余3张留作底牌,然后在控制台打印3位玩家的牌和3张底牌。

2.运行结果

 任务运行结果如图6-1所示:

图6-1  运行结果图

 

【实现思路】

(1)要实现纸牌程序,首先需要完成纸牌的组装。牌面是由花色(包括♠、♥、♦、♣花色)和数字(包括J、Q、K、A字母)两部分组成,可以创建两个ArrayList集合作为花色集合与数字集合,存储时需要注意。比10大的牌的数字用J、Q、K表示,1用A表示。

(2)将花色集合与数字集合这两个循环进行嵌套循环,将花色与数字组合,形成52章牌,并赋予其编号。将组合后的牌存放到一个HashMap集合中,集合的Key值是编号,value值是组装完成的纸牌。还有两张牌是大小王(小☺表示小王、大☻表示大王)。由于组装规则不一致,需单独使用add()方法将这两张牌加入到HashMap集合中。

(3)创建一个数字集合,用这个数字集合代替纸牌完成洗牌和发牌操作。由于纸牌的数量是54张,所以创建集合范围是0~53。 

(4)可以使用Collection类的shuffle()方法完成打乱数字集合的操作,实现洗牌效果。由于只有3个人,所以可以使用for循环,通过将数字与3取余的方法,将代表不同纸牌的数字分配给不同人与底牌,实现发牌效果。

(5) 洗牌和发牌结束后,可以通过Collection类的sort()方法完成排序,之后通过foreach()循环HashMap集合,根据数字查找对应的纸牌字符串,并存入创建的字符串集合中,最后展示字符串集合。

【实现代码】

程序实现代码如文件6-1所示。 

                         文件6-1  example5.java

  1. package com.itheima;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.HashMap;
  5. public class example {
  6.     public static void main(String[] args) {
  7.         // 准备花色
  8.         ArrayList<String> color = new ArrayList<String>();
  9.         color.add("♠");
  10.         color.add("♥");
  11.         color.add("♦");
  12.         color.add("♣");
  13.         // 准备数字 ,ArrayList将纸牌由小到大排序
  14.         ArrayList<String> number = new ArrayList<String>();
  15.         for (int i = 3; i <= 10; i++) {
  16.            number.add(i + "");
  17.         }
  18.         number.add("J");
  19.         number.add("Q");
  20.         number.add("K");
  21.         number.add("A");
  22.         number.add("2");
  23.         // 定义一个map集合:用来将数字与每一张牌进行对应
  24.        HashMap<Integer, String> map = new HashMap<Integer, String>();
  25.          int index = 0;// 纸牌编号
  26.         for (String thisNumber : number) {// 循环纸牌数字
  27.            for (String thisColor : color) {// 循环纸牌花色
  28.                // 将花色与数字组合,形成52张牌,并赋予其编号
  29.                map.put(index++, thisColor + thisNumber);
  30.            }
  31.         }
  32.         // 加入大小王
  33.         map.put(index++, "");
  34.         map.put(index++, "☻");
  35.         // 一副54张的牌 ArrayList里边为0-53的数的新牌
  36.         ArrayList<Integer> cards = new ArrayList<Integer>();
  37.         for (int i = 0; i <= 53; i++) {
  38.            cards.add(i);// 此时的cards顺序为0-53
  39.         }
  40.         // 洗牌,使用Collections工具类中的shuffle()方法
  41.         Collections.shuffle(cards);// 此时的cards顺序已被打乱
  42.         // 创建三个玩家和底牌
  43.         ArrayList<Integer> iPlayer = new ArrayList<Integer>();
  44.         ArrayList<Integer> iPlayer2 = new ArrayList<Integer>();
  45.         ArrayList<Integer> iPlayer3 = new ArrayList<Integer>();
  46.         ArrayList<Integer> iSecretCards = new ArrayList<Integer>();
  47.         // 遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中
  48.         for (int i = 0; i < cards.size(); i++) {
  49.            if (i >= 51) {
  50.                iSecretCards.add(cards.get(i));// 留取3张底牌
  51.            } else {
  52.                if (i % 3 == 0) {
  53.                  iPlayer.add(cards.get(i));//3取余为0的牌发给玩家1
  54.                } else if (i % 3 == 1) {
  55.                  iPlayer2.add(cards.get(i));//3取余为1的牌发给玩家2
  56.                } else {
  57.                    iPlayer3.add(cards.get(i));// 其余的牌发给玩家3
  58.                }
  59.            }
  60.         }
  61.         // 对每个人手中的牌排序,使用Collections工具类中的sort()方法
  62.         Collections.sort(iPlayer);
  63.         Collections.sort(iPlayer2);
  64.         Collections.sort(iPlayer3);
  65.         // 对应数字形式的每个人手中的牌,定义字符串形式的牌
  66.         ArrayList<String> sPlayer = new ArrayList<String>();
  67.         ArrayList<String> sPlayer2 = new ArrayList<String>();
  68.         ArrayList<String> sPlayer3 = new ArrayList<String>();
  69.         ArrayList<String> sSecretCards = new ArrayList<String>();
  70.         // 循环主键,从map中获取纸牌
  71.         for (Integer key : iPlayer) {
  72.            sPlayer.add(map.get(key));
  73.         }
  74.         for (Integer key : iPlayer2) {
  75.            sPlayer2.add(map.get(key));
  76.         }
  77.         for (Integer key : iPlayer3) {
  78.            sPlayer3.add(map.get(key));
  79.         }
  80.         for (Integer key : iSecretCards) {
  81.            sSecretCards.add(map.get(key));
  82.         }
  83.            // 看牌
  84.            System.out.println("玩家1" + sPlayer);
  85.            System.out.println("玩家2" + sPlayer2);
  86.            System.out.println("玩家3" + sPlayer3);
  87.            System.out.println("底牌:" + sSecretCards);
  88.         }
  89. }

在文件6-1中,第8~22行代码将4种花色和13个纸牌编号分别放到两个ArrayList集合中。第24~34当代码foreach循环拼出52张纸牌,并将其依照从小到大的顺序放入Map集合中,并将大小王添加到其中。第36~41行代码创建了代替纸牌的数字集合,将其与纸牌中的序号对应,并将数字集合中的顺序打乱,此时集合相当于纸牌编号集合。第43~60行代码完成了将纸牌编号发给3位玩家并留3张纸牌编号做为底牌的操作。第62~64行代码将3位玩家手中纸牌编号进行排序。第66~88行代码通过循环3位玩家手中的纸牌编号,将纸牌字符串从Map中取出放入字符串集合。最后打印字符串集合,分别得到3个玩家的纸牌和底牌。

 

相关文章:

斗地主洗牌发牌-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

【案例6-4】 斗地主洗牌发牌 【案例介绍】 1.任务描述 扑克牌游戏“斗地主”&#xff0c;相信许多人都会玩&#xff0c;本案例要求编写一个斗地主的洗牌发牌程序&#xff0c;要求按照斗地主的规则完成洗牌发牌的过程。一副扑克总共有54张牌&#xff0c;牌面由花色和数字组成…...

基于antd封装的二次业务筛选组件-table-filter

文档地址&#xff1a;https://flowerofsummer.github.io/components/ 业务筛选组件 支持各种类型的高级搜索组件 基础用法 组件响应式布局&#xff0c;默认显示两行&#xff0c;可以通过 maxLineCount 配置最多显示行数每行个数&#xff1a; 如果含有 time-range&#xff0…...

逆向-还原代码之max 再画堆栈图 (Interl 64)

// source code #include <stdio.h> void max(int * a, int * b) { if (*a < *b) *a *b; } int main() { int a 5, b 6; max(&a, &b); printf("a, b max %d\n", a); return 0; } // 再画堆栈图 下周一&#xff08;2.27…...

GitHub标星30K+的Java面试八股文长啥样?

2023年的互联网行业竞争越来越严峻&#xff0c;面试也是越来越难&#xff0c;一直以来我都想整理一套完美的面试宝典&#xff0c;奈何难抽出时间&#xff0c;这套1000道的Java面试手册我整理了整整1个月&#xff0c;上传到Git上目前star数达到了30K 一、32 道 MySQL 面试题 1&…...

CVE-2022-39197 POC(CobaltStrike XSS <=4.7)漏洞复现

漏洞说明 根据9.20日CobaltStrike官方发布的最新4.7.1版本的更新日志中介绍&#xff0c;<4.7的teamserver版本存在XSS漏洞&#xff0c;从而可以造成RCE远程代码执行 一位名为“Beichendream”的独立研究人员联系我们&#xff0c;告知我们他们在团队服务器中发现的一个 XSS …...

我们来说说蹿红的AIGC到底是什么?ChatGPT又是什么?

近期&#xff0c;人工智能&#xff08;AI&#xff09;领域动作频频&#xff0c;OPENAI公司Chat GPT的出现&#xff0c;标志着人工智能的研究与应用已经进入了一个崭新的发展阶段&#xff0c;国内腾讯、阿里巴巴、百度、易网、国外微软、谷歌、苹果、IBM、Amazon&#xff0c;等互…...

新手如何从零开始搭建配置Windows云服务器?

新手如何从零开始搭建配置Windows云服务器&#xff1f;本文是搭建 Windows 云服务器入门教程&#xff0c;主要介绍如何从零开始&#xff0c;以最简单的方式搭建和配置你的Windows 云服务器。如果您之前没有搭建云服务器的经验&#xff0c;建议您按照本文介绍的方式来购买和配置…...

百趣代谢组学-抑郁症居然“男女有别”,脑膜淋巴管起关键作用!

文章标题&#xff1a;A functional role of meningeal lymphatics in sex difference of stress susceptibility in mice 发表期刊&#xff1a;Nature Communications 影响因子&#xff1a;17.694 发表时间&#xff1a;2022年8月 作者单位&#xff1a;中山大学中山医学院 …...

C语言实现用堆解决 TOP-K 问题

目录 TopK函数实现 如何测试 完整源码 生活中我们经常能见到TopK问题&#xff0c;例如&#xff1a;专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 所以&#xff0c;TopK问题即求出一组数据中前K个最大或最小的元素&#xff0c;一般情况下&#xff0c;数据量都…...

MySQL 数据库基础命令

MySQL 基础命令 一.了解数据库 1、了解数据库对象 1.表&#xff1a; 用于以有组织方式存储数据。以行和列的格式包含数据。 2.索引&#xff1a; 是内部表结构&#xff0c;MySQL 用它基于一列或多列的值来提供对表中各行的快速访问。 3.视图&#xff1a; 是虚拟表&#…...

说一下this,实现apply、call

理解this 在ES5中&#xff0c;this的指向始终坚持一个原理&#xff1a;“this永远指向最后调用它的那个对象”&#xff0c;切记这句话。下面看几个例子。 例一 var obj {name: zhangsan,say: function() {console.log(this.name);} }obj.say() // zhangsan 最基本的使用&am…...

华为OD机试真题Python实现【总最快检测效率】真题+解题思路+代码(20222023)

总最快检测效率 题目 在系统、网络均正常情况下,组织核酸采样员和志愿者对人群进行核酸检测筛查。 每名采样员的效率不同,采样效率为N人/小时。 由于外界变化,采样员的效率会以M人/小时为粒度发生变化,M 为采样效率浮动粒度, M=N*10%,输入保证N*10%的结果为整数。 采样…...

【历史上的今天】2 月 23 日:Enigma 密码机申请专利;戴尔电脑创始人出生;Mellanox 收购 EZchip

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 2 月 23 日&#xff0c;在 2006 年的今天&#xff0c;都灵冬奥会自由式滑雪男子空中技巧决赛在意大利都灵萨奥兹杜尔克斯滑雪场举行。中国选手韩晓鹏战胜众多好…...

新手入门吉他推荐,第一把吉他从这十款选绝不踩雷!初学者吉他选购指南【新手必看】

一、新手购琴注意事项&#xff1a; 1、预算范围 一把合适的吉他对于初学者来说会拥有一个很好的音乐启蒙。选一款性价比高&#xff0c;做工材料、音质和手感相对较好的吉他自然不会是一件吃亏的事。**初学者第一把琴的预算&#xff0c;我觉得最低标准也是要在500元起&#xf…...

XSS注入进阶练习篇(三) XSS原型链污染

XSS原型链污染1.原型链的概念1.1 构造函数的缺点1.2 prototype 属性的作用1.3 原型链1.4 constructor属性1.5 prototype和__proto__2. 原型链污染2.1 原型链污染是什么&#xff1f;2.2 原型链污染的条件2.3 原型连污染实例2.3.1 hackit 20182.3.2 challenge-04223.总结1.原型链…...

【Java基础 下】 025 -- 阶段项目(斗地主)

目录 斗地主 一、斗地主游戏1 -- 准洗发&#xff08;控制台版&#xff09; 1、准备牌 2、洗牌 3、发牌 4、看牌 二、斗地主游戏2 -- 给牌排序①&#xff08;利用序号进行排序&#xff09; 2、洗牌 3、发牌 4、看牌 三、斗地主游戏2 -- 给牌排序②&#xff08;给每一张牌计算价值…...

华为OD机试真题Python实现【矩阵最值】真题+解题思路+代码(20222023)

题目 给定一个仅包含0和1的n*n二维矩阵 请计算二维矩阵的最大值 计算规则如下 每行元素按下标顺序组成一个二进制数(下标越大约排在低位), 二进制数的值就是该行的值,矩阵各行之和为矩阵的值允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置 比如 [1,0,1,1,1]…...

TypeScript笔记(三)

前言 上一篇文章我们主要介绍了TypeScript的基本类型boolean、number、string、void、null和undefine&#xff0c;还介绍了任意类型any和联合类型&#xff0c;这篇文章我们将会了解对象类型Interface和数组的相关知识。 对象的类型——接口 在TypeScript中&#xff0c;我们使…...

C++(41)-低版本升级到VS2019项目时遇到的问题(2)

1.错误码&#xff1a;MSB8066 代码为3 QT 项目老版本升级到新版本造成的&#xff0c; 1.重新加载项目&#xff1a; 扩展->QT VS tools->Open QT project files-> 2.添加QT模块&#xff1a;QT Project-Settings -> QT Modules2.无法打开QT的头文件 3.…...

git 实战应用

基本使用1.1、使用git想要让 git 对一个目录进行版本控制需要一下步骤&#xff1a;进入要管理的文件夹执行初始化命令git init查看目录下的文件状态git status管理指定文件// 添加指定文件 git add ***.txt// 添加未被管理的所有文件 git add .生成版本git commit -m 描述信息提…...

保姆级教程:在Ubuntu 20.04上用ROS1和Python搞定PX4飞控IMU标定(附完整脚本)

从零到精通的PX4飞控IMU标定实战指南 第一次接触PX4飞控的IMU标定&#xff0c;就像拿到一台新相机却不知道如何调焦——明明硬件很强大&#xff0c;却因为参数不准而发挥不出全部性能。IMU作为飞行控制的核心传感器&#xff0c;其标定质量直接决定了无人机能否稳定悬停、精准转…...

不只是代码:用 Agent 构建全自动数据分析与可视化流水线

不只是代码:用 Agent 构建全自动数据分析与可视化流水线 1. 引入与连接:从"手动分析"到"智能自动化"的范式转变 1.1 一个数据分析师的典型一天 让我们想象一下,李明是一家互联网公司的资深数据分析师。每天早上9点,他都会坐在电脑前开始他熟悉的工作…...

GBase 8a 字符集、排序规则和字符串比较结果偏差

GBase 8a 字符集、排序规则和字符串比较结果偏差 我最近看资料和整理现场问题时&#xff0c;越来越觉得 GBase 8a 里很多“查出来不对”的问题&#xff0c;并不是表没导对&#xff0c;也不是 SQL 逻辑写错了&#xff0c;而是字符集、排序规则、大小写处理和字符串比较语义没有统…...

端到端性能对比:NLP-StructBERT与其他开源相似度模型效果横评

端到端性能对比&#xff1a;NLP-StructBERT与其他开源相似度模型效果横评 最近在做一个智能客服的项目&#xff0c;需要判断用户问题和知识库答案的相似度。选型的时候&#xff0c;我对着好几个开源的中文相似度模型犯了难&#xff1a;都说自己效果好&#xff0c;到底哪个最适…...

5个提升效率技巧:Mac Mouse Fix让普通鼠标实现专业级操作体验

5个提升效率技巧&#xff1a;Mac Mouse Fix让普通鼠标实现专业级操作体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 当你在macOS系统中使用…...

产品经理的AI内功:如何用‘协议思维’和‘框架地图’跟技术团队高效沟通?

产品经理的AI内功&#xff1a;用协议思维与框架地图驱动技术协作 当产品经理第一次走进AI项目会议室&#xff0c;技术团队的白板上写满了"微服务架构""RESTful API""LangChain调度逻辑"等术语时&#xff0c;很多人会陷入两种极端——要么完全放…...

HY-MT1.8B部署避坑指南:从环境配置到Chainlit调用全记录

HY-MT1.8B部署避坑指南&#xff1a;从环境配置到Chainlit调用全记录 1. 引言 1.1 为什么选择HY-MT1.8B 在当今多语言翻译需求日益增长的背景下&#xff0c;找到一个既轻量又高效的翻译模型并非易事。HY-MT1.5-1.8B以其18亿参数的紧凑架构&#xff0c;实现了接近大模型的翻译…...

从芯片手册到稳定波形:深入解读74LS161的异步清零与同步计数,搞定数字钟六十进制

从芯片手册到稳定波形&#xff1a;深入解读74LS161的异步清零与同步计数&#xff0c;搞定数字钟六十进制 在数字电路设计中&#xff0c;计数器芯片74LS161的应用无处不在&#xff0c;从简单的分频器到复杂的数字钟系统都能见到它的身影。但真正深入理解这颗经典芯片内部工作机…...

颠覆式角色定制:开源工具Diablo Edit2如何重塑暗黑破坏神2游戏体验

颠覆式角色定制&#xff1a;开源工具Diablo Edit2如何重塑暗黑破坏神2游戏体验 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 在暗黑破坏神2的冒险旅程中&#xff0c;每位玩家都曾面临存档管理的…...

Phi-3-mini-4k-instruct-gguf GPU算力优化:q4 GGUF模型在消费级显卡上的表现

Phi-3-mini-4k-instruct-gguf GPU算力优化&#xff1a;q4 GGUF模型在消费级显卡上的表现 1. 模型概述 Phi-3-mini-4k-instruct-gguf 是微软Phi-3系列中的轻量级文本生成模型GGUF版本&#xff0c;专为问答、文本改写、摘要整理和简短创作等场景优化。这个经过量化的q4 GGUF模型…...