【案例介绍】

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】斗地主洗牌发牌相关推荐

  1. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))

    1.Map集合概述和特点 1.需求:    根据学号获取学生姓名 2.Map接口概述     查看API可以知道:     将键映射到值的对象     一个映射不能包含重复的键     每个键最多只能 ...

  2. java中Map集合、模拟斗地主洗牌发牌、JDK9对集合添加的优化

    1.1 Map集合概述 Map集合概述 Map==>映射(一个对应一个) Map是一个接口,只要实现了该接口的类都是双列集合. 双列集合每次存储元素时都需要存储两个元素,一个元素称为键,一个元素 ...

  3. 模拟斗地主洗牌发牌-JAVA

    1.1案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 1.组装54张扑克牌 2.将54张牌顺序打乱 3.三个玩家参与游戏,三人交替摸牌,,每人17张牌,最后三张留作底牌. 4.查看三人各 ...

  4. 【JAVASE】模拟斗地主洗牌发牌

    1.案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 查看三人各自手中的牌(按照牌的大 ...

  5. java集合框架的练习之斗地主洗牌发牌的模拟(升级版)

    首先,奉上java集合框架的练习之斗地主洗牌发牌的模拟(初级版)的链接:http://blog.csdn.net/striner/article/details/78489306 初级版只具有洗牌发牌 ...

  6. 斗地主洗牌发牌——排序版

    文章目录 前言 一.知识点 二.使用步骤 2.完整代码 感谢您的阅读,不足之处欢迎指正 前言 Java实现模拟斗地主洗牌发牌操作,留下三张底牌,对发到手的纸牌排序. 一.知识点 主要使用HashMap ...

  7. Java实现模拟斗地主洗牌发牌

    按照斗地主的规则,完成洗牌发牌看牌的动作.最终结果预计为: 具体规则: 1.组装54张扑克牌 2.将54张扑克牌顺序打乱 3.三个玩家参与游戏,三人交替摸牌,每人17张,最后三张做底牌 4.查看三人手 ...

  8. java使用集合模拟斗地主洗牌发牌案例

    package com.itheima.模拟斗地主.斗地主版本2;import java.util.ArrayList; import java.util.Collections; import ja ...

  9. 扑克牌洗牌发牌java代码_java实战(一)之Java模仿斗地主洗牌发牌小游戏

    斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异.本节我们先来实现一下斗地主中的简单洗牌.发牌和看牌功能. 按照斗地主的规则,完成洗牌发牌的动作.具体规则为使用 54 张牌打乱顺序,3 ...

最新文章

  1. wamp配置虚拟主机
  2. 一个包从服务器到达客户端
  3. Tableau实战系列数据连接及数据准备
  4. 【干货】如何确定需求优先级,如何确定功能优先级
  5. 12/100. Diameter of Binary Tree
  6. 20个天才般的走心设计,真是太牛了!
  7. Python笔记-字符串转json
  8. 几个简单的Linux驱动程序
  9. mysql传参为数组,将数组传递给MySQL存储例程
  10. 181022词霸有道扇贝每日一句
  11. 无线投屏视频经过服务器吗,无线投屏方案
  12. 如何定制支持用户自定义boot参数的基于debian os的live cd
  13. xilinx apu ,rpu特点 及通信
  14. 微信小程序 js创建Object对象
  15. Bochs编程环境安装
  16. win10 休眠唤醒 电源_win10电脑休眠后无法唤醒解决方法(图文)
  17. Java猿社区—Redis一篇系列—第三章、Redis数据类型
  18. 82599网卡驱动rx descriptor结构体分析
  19. golang端口重用
  20. 播音主持如何运气发声?早上应该如何练声?

热门文章

  1. 东北大学最优化方法与理论第一章知识点总结——预备知识
  2. MATLAB工程仿真基础
  3. Bandizip将大文件分卷压缩为多个小文件
  4. 双飞燕鼠标滚轮无法在Edge里垂直滚动,只能水平滚动
  5. 国外网盘休闲下载利器之:freeRapidDownloader 多国语言支持
  6. android 提取aac音频,使用Android流式传输AAC音频
  7. js收据、发票等表格数据格式化,js把数字转为中文大写
  8. 交流电、交流信号、直流电、直流信号
  9. SAP 特征 Classification
  10. 实时查看gpu利用率