【案例 6-4】斗地主洗牌发牌
【案例介绍】
1.任务描述
斗地主的扑克牌游戏,相信许多人都会玩,本例要求编写一个斗地主的洗牌发牌程序,要求按照斗地主的规则完成洗牌发牌的过程。一副扑克总共有 54 张牌,牌面由花色和数字组成(包括 J、Q、K、A 字母)组成,花色有♠、♥、♦、♣ 四种,分别表示黑桃、红桃、方块、梅花,小☺、大☻分别表示小王和大王。斗地主游戏共有三位玩家参与,首先将这 54张牌的顺序打乱每人轮流摸一次牌,剩余 3 张留作底牌,然后在控制台打印三位玩家的牌和三张底牌。
2.运行结果
略
【任务介绍】
- 学会分析“斗地主之洗牌发牌”任务的实现思路。
- 根据思路独立完成“斗地主之洗牌发牌”任务的源代码编写、编译及运行。
- 掌握 List 集合和 Map 集合特点及常用方法的使用。
- 掌握集合遍历的方式。
【实现思路】
(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 集合,根据数字查找对应的纸牌字符串,并存入创建的字符串集合中,最后展示字符串集合。
【实现代码】
import java.util.ArrayList;
import java.util.Collections;public class main {public static void main(String[] args) {//斗地主洗牌发牌String[] colors = {"♠", "♥", "♦", "♣"};String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};String[] jokers = {"大王☻", "小王☺"};//创建一个牌盒ArrayList<String> pokerBox = new ArrayList<>();//将牌放入牌盒for (String number : numbers) {for (String color : colors) {pokerBox.add(number + color);}}pokerBox.add(jokers[0]);pokerBox.add(jokers[1]);//洗牌Collections.shuffle(pokerBox);//发牌ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();ArrayList<String> dipai = new ArrayList<>();for (int i = 0; i < pokerBox.size(); i++) {if (i >= pokerBox.size() - 3) {dipai.add(pokerBox.get(i));} else if (i % 3 == 0) {player1.add(pokerBox.get(i));} else if (i % 3 == 1) {player2.add(pokerBox.get(i));} else if (i % 3 == 2) {player3.add(pokerBox.get(i));}}//看牌Collections.sort(player1);Collections.sort(player2);Collections.sort(player3);System.out.println("玩家一:" + player1);System.out.println("玩家二:" + player2);System.out.println("玩家三:" + player3);System.out.println("底牌:" + dipai);}
}
【案例 6-4】斗地主洗牌发牌相关推荐
- 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))
1.Map集合概述和特点 1.需求: 根据学号获取学生姓名 2.Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能 ...
- java中Map集合、模拟斗地主洗牌发牌、JDK9对集合添加的优化
1.1 Map集合概述 Map集合概述 Map==>映射(一个对应一个) Map是一个接口,只要实现了该接口的类都是双列集合. 双列集合每次存储元素时都需要存储两个元素,一个元素称为键,一个元素 ...
- 模拟斗地主洗牌发牌-JAVA
1.1案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 1.组装54张扑克牌 2.将54张牌顺序打乱 3.三个玩家参与游戏,三人交替摸牌,,每人17张牌,最后三张留作底牌. 4.查看三人各 ...
- 【JAVASE】模拟斗地主洗牌发牌
1.案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 查看三人各自手中的牌(按照牌的大 ...
- java集合框架的练习之斗地主洗牌发牌的模拟(升级版)
首先,奉上java集合框架的练习之斗地主洗牌发牌的模拟(初级版)的链接:http://blog.csdn.net/striner/article/details/78489306 初级版只具有洗牌发牌 ...
- 斗地主洗牌发牌——排序版
文章目录 前言 一.知识点 二.使用步骤 2.完整代码 感谢您的阅读,不足之处欢迎指正 前言 Java实现模拟斗地主洗牌发牌操作,留下三张底牌,对发到手的纸牌排序. 一.知识点 主要使用HashMap ...
- Java实现模拟斗地主洗牌发牌
按照斗地主的规则,完成洗牌发牌看牌的动作.最终结果预计为: 具体规则: 1.组装54张扑克牌 2.将54张扑克牌顺序打乱 3.三个玩家参与游戏,三人交替摸牌,每人17张,最后三张做底牌 4.查看三人手 ...
- java使用集合模拟斗地主洗牌发牌案例
package com.itheima.模拟斗地主.斗地主版本2;import java.util.ArrayList; import java.util.Collections; import ja ...
- 扑克牌洗牌发牌java代码_java实战(一)之Java模仿斗地主洗牌发牌小游戏
斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异.本节我们先来实现一下斗地主中的简单洗牌.发牌和看牌功能. 按照斗地主的规则,完成洗牌发牌的动作.具体规则为使用 54 张牌打乱顺序,3 ...
最新文章
- wamp配置虚拟主机
- 一个包从服务器到达客户端
- Tableau实战系列数据连接及数据准备
- 【干货】如何确定需求优先级,如何确定功能优先级
- 12/100. Diameter of Binary Tree
- 20个天才般的走心设计,真是太牛了!
- Python笔记-字符串转json
- 几个简单的Linux驱动程序
- mysql传参为数组,将数组传递给MySQL存储例程
- 181022词霸有道扇贝每日一句
- 无线投屏视频经过服务器吗,无线投屏方案
- 如何定制支持用户自定义boot参数的基于debian os的live cd
- xilinx apu ,rpu特点 及通信
- 微信小程序 js创建Object对象
- Bochs编程环境安装
- win10 休眠唤醒 电源_win10电脑休眠后无法唤醒解决方法(图文)
- Java猿社区—Redis一篇系列—第三章、Redis数据类型
- 82599网卡驱动rx descriptor结构体分析
- golang端口重用
- 播音主持如何运气发声?早上应该如何练声?