文章目录

  • 题目
  • 思路分析
  • 代码示例

题目

使用集合实现斗地主游戏的部分功能,要求如下:

  • 首先准备 54 张扑克牌并打乱顺序。
  • 由三个玩家交替摸牌,每人 17 张扑克牌,最后三张留作底牌。
  • 查看三个玩家手中的扑克牌和底牌。
  • 其中玩家手中的扑克牌需要按照大小顺序打印,规则如下:
  • 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

思路分析

  • 扑克牌由花色和字符组成,首先声明一个集合存放花色,再声明一个集合存放字符,通过双重foreach循环进行字符串的拼接
  • 声明一个集合,存放索引,每拼接一个字符串(一张扑克牌),索引+1且存放入集合,并将索引拼接后的字符串存入map集合,索引作为key,拼接后的字符串作为value。
  • 采用集合工具类Collentions中的shuffle方法随即置换索引集合进行洗牌
  • 将索引集合转换为队列作为牌堆,抓牌即为出队
  • 声明4个集合存放三名玩家手牌和底牌,循环抓牌17次,留下底牌,并存放入集合
  • 通过集合的sort方法自动排序玩家手牌,进行遍历展示手牌和底牌

代码示例

package com.lagou.homework;import java.lang.reflect.Array;
import java.util.*;/*使用集合实现斗地主游戏的部分功能,要求如下:(1)首先准备 54 张扑克牌并打乱顺序。(2)由三个玩家交替摸牌,每人 17 张扑克牌,最后三张留作底牌。(3)查看三个玩家手中的扑克牌和底牌。(4)其中玩家手中的扑克牌需要按照大小顺序打印,规则如下:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3*/
public class HomeWork3_3 {//声明一个集合作为扑克牌//新建HashMap存牌  key作为牌的唯一标识public static HashMap<Integer,String> pokermap = new HashMap<>();//声明一个列表存key (只有单值的列表方便打乱顺序)public static ArrayList<Integer> arrayList = new ArrayList<>();//声明花色数组public static String[] pokercolor = new String[]{"♥","♠","♣","♦"};//声明牌面字符数组(不包括大小王)public static String[] pokerchar = new String[]{"2","A","K","Q","J","10","9","8","7","6","5","4","3"};//洗好后的牌堆队列 (队列出队删减的特点方便抓牌)public static Queue<Integer> queueall;//三个玩家的手牌和底牌(为了能自动排序  使用TreeSet)public static TreeSet<Integer> player1 = new TreeSet<>();public static TreeSet<Integer> player2= new TreeSet<>();public static TreeSet<Integer> player3= new TreeSet<>();public static TreeSet<Integer> dipai = new TreeSet<>();//显示玩家的牌和底牌public static void show(HashMap<Integer,String> map/*总扑克牌*/,TreeSet<Integer> set,String string/*玩家称号*/){System.out.print(string+": ");//玩家称呼:for (Integer i :set) {System.out.print(map.get(i)+"  ");//获取key对应的value}System.out.println();}public static void main(String[] args) {//声明一个key作为扑克牌的map集合的key的同时作为索引int key = 1;pokermap.put(key,"大王");//单独添加小王arrayList.add(key);//存入索引数组key++;//存入一张牌 索引自增pokermap.put(key,"小王");//单独添加大王arrayList.add(key);//存入索引数组key++;//存入一张牌 索引自增for (String charstr:pokerchar) {for (String colorstr:pokercolor) {//将花色和字符连接起来  以字符作为外循环 可以保证 3~2的顺序里数字大的key一定小pokermap.put(key,colorstr.concat(charstr));arrayList.add(key);key++;}}//洗牌  采用Collections工具类的随即置换Collections.shuffle(arrayList);Queue<Integer> queue = new LinkedList<>(arrayList);//每个人17张牌 循环摸牌17次// Iterator<Integer> pokerIterator = arrayList.iterator();for (int i = 0 ; i < 17; i++){player1.add(queue.poll());//牌堆出队的牌给到玩家player2.add(queue.poll());player3.add(queue.poll());}//将底牌存入集合int len = queue.size();//提前取出底牌剩余数for (int i  = 0; i<len;i++){dipai.add(queue.poll());}//查看牌show(pokermap,player1,"玩家一");show(pokermap,player2,"玩家二");show(pokermap,player3,"玩家三");show(pokermap,dipai,"底牌");}
}

【练习】JavaSE实现控制台版本的斗地主部分功能相关推荐

  1. 2048——Java控制台版本

    前情提要,祝2021年的蓝桥杯小伙伴成绩突出. 贪心.杂凑.递归.分类.评分.哈希.共识.聚类.分治.启发式.粒子群.最大期望.最小完成时间.序列最小优化....算法无数,但是基础类似,无非坐标处理. ...

  2. 去除代码行号的一个小程序(控制台版本)

    清风竹林发布了去除代码行号的一个小程序,确实方便大家收集一些文章代码,但个人认为象这样的小东东,要使广大网友能拿来就用,用.Net 2.0做成WinForm,有点贵族化了,于是动手整出个平民化的控制台 ...

  3. PjComm:控制台版本的串口调试助手

    为了学习C#,所以,自己动手,开发了一个小小的控制台版本的串口调试助手PjComm,截图如下: 上图中的蓝色背景的字符,为热键.在使用SendData时,若串口没有打开,则自动打开.若已经打开,会暂时 ...

  4. 农场游戏开发记录十七(控制台版本完成)

    今天,已过12点应该是昨天,终于把控制台版本的农场游戏开发完成了.说是开发有点厚脸皮,因为我自己确实没写过这么成体系的代码.成就感还是挺充足的.代码就不在这里放了,另外上传.这里放一点运行时的截图吧.

  5. 13.JavaAPI(DAO模式+图书管理系统控制台版本)

    目录 一.理解程序设计分层的思想 二.DAO设计模式的组成以及各部分的开发 2.1 概述 2.2 DAO模式作用 2.3 DAO模式组成 三.DAO模式实现图书信息管理系统控制台版本之增删改查 3.1 ...

  6. 三国杀java游戏_计算机毕业课程设计源码-131Java三国杀游戏控制台版本

    file://C:\Users\Administrator\Desktop\Java三国杀游戏控制台版本 (1 folders, 3 files, 43.90 MB, 44.11 MB in tota ...

  7. JeeWx 商业版本最近新增什么功能啦?

    JeeWx 商业版本最近新增什么功能啦? 2014-12-18 jeecg JEECG jeewx开发新功能 一.微信墙 此功能可以设置属于该公共号的微信墙,在微信客户端上输入微信墙即可进入微信墙模式 ...

  8. JEECG 商业版本最近新增什么功能啦?

    JEECG 商业版本最近新增什么功能啦? 2014-12-18 JEECG JEECG jeecg增加新的功能啦!!! 1.流程设计器 2.集成工作流引擎activit,智能化封装,在线配置表单,在线 ...

  9. IntelliJ IDEA 自定义控制台输出多颜色格式功能 --- 安装Grep Console插件

    IntelliJ IDEA 自定义控制台输出多颜色格式功能 1. 打开IDEA设置面板 2. 点击插件(Plugins)安装Grep Console 3. 重启IDEA后设置颜色 4. 效果图 5. ...

最新文章

  1. 服务器php将视频转为m3u8,php应用ffmpeg对mp4文件转换并生成m3u8视频流文件
  2. Eclipse自动注册Servlet:web.xml注册和@Servlet注解 实现注册
  3. Partial Sums ZOJ - 1569
  4. matlab 设计带阻型陷波滤波器_Q值可调、最大增益恒定的带通滤波器
  5. github怎么搜索开源的代码_5.2.PYTHON开发利器之使用VS Code+GitHub进行python开源项目开发...
  6. linux 安装校园客户端,Ubuntu Linux环境下校园网客户端安装使用
  7. 南阳理工ACM 28大数阶乘
  8. html5移动端webscoket实现在线聊天
  9. 支持USB Video Class的摄像头
  10. 【游戏开发进阶】教你在Windows平台编译tolua runtime的各个平台库(Unity | 热更新 | tolua | 交叉编译)
  11. 中国电信物联网开发平台北向开发获取设备ID及其历史产生的数据
  12. 关于电脑热点打开后手机连接无IP分配解决办法
  13. crx插件转换火狐插件_我的Firefox插件
  14. 安卓-几种查看SHA1和MD5的方法
  15. 答题对战方案java_使用WebSocket实现实时多人答题对战游戏
  16. Visio画出简单的拓扑图
  17. subversion linux 服务器端搭建 源码安装
  18. flush()的作用
  19. 用结构体数组存储学生信息,输入学生学号,查询相应的成绩
  20. ★ZOJ 3380 Patchouli's Spell Cards 详细题解 (递推+组合数求方案数)

热门文章

  1. Android音视频【十三】OpenSL ES介绍基于OpenSL ES实现音频采集
  2. 2017深信服校招笔经面经 软件测试工程师
  3. 计算机专业大二找不到方向,如何学好日语?计算机系大二学生,学校没有这门选修课。 自学找不到...
  4. html+css设计页面
  5. 爬朋友圈好友的个性签名,生成云图(下)
  6. 基于树莓派(C语音)实现人脸识别(翔云平台)
  7. uni-app实现可滑动日历
  8. 计算机网络(三) 广播信道及局域网
  9. Seq2Seq模型实现(Decoder部分)
  10. 【恒指早盘分析】9.23恒指今日复盘及后市思路