Java斗地主(集合综合练习)
学完了集合后我们可以开始做一个简易版的 ” 斗地主 “ 了,但是呢咱们这个斗地主只能实现制造牌,洗牌、发牌、看牌这几个简单的功能,并不是我们玩的 ” 真人版斗地主 “ 哈!
链接:
代码如下:
public static void main(String[] args) {
//创建一个Map集合,键表示标记为Integer类型,值表示牌为String类型
HashMap<Integer, String> hashMap = new HashMap<>();
//创建四个花色的集合
ArrayList<String> Suit = new ArrayList<>();
Collections.addAll(Suit, "", "", "", "");
//创建用来存储13张牌面值的单列集合,牌面值需要按扑克牌的大小顺序依次存储,方便后面标记
ArrayList<String> brandValue = new ArrayList<>();
Collections.addAll(brandValue, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
//定义一个标记初始化为1,为后面的发牌后牌面值排序
int flag = 1;
/*大小王最大所以需要提前放进去并且放在最前面,以标记作为键,大小王作为值,依次添加到Map集合中
确保之后的排序正常,添加完了之后,标记需要+1*/
hashMap.put(flag++, "大王");
hashMap.put(flag++, "小王");
//将牌面值和花色进行组合,外层循环执行一次内层循环执行所有,牌面值集合作为外层循环,花色集合作为内层循环
for (String i : brandValue) {
for (String j : Suit) {
//拼接4种花色和13张牌面值组成剩余的52张牌
String card = j + i;
/*将标记作为键,拼接好的牌作为值放到集合中,每添加一张牌标记就+1
依次添加,这样最大的牌就会对应最小的标记值*/
hashMap.put(flag++, card);
}
}
System.out.println("----------------------造牌----------------------");
//打印所有拼接好的牌面值(含标记)
System.out.println("所有的牌面值:" + hashMap.values());
System.out.println("----------------------洗牌----------------------");
/*将map集合转换成List集合,获取map集合中所有的键(标记)并存放到keyList集合中
(List集合再调用shuffle()方法打乱牌的顺序,存的是乱序的标记)*/
/*Set<Integer> key = hashMap.keySet();
ArrayList<Integer> keyList = new ArrayList<>(key);*/
ArrayList<Integer> keyList = new ArrayList<>(hashMap.keySet());
//打乱所有的键(标记),模拟洗牌
Collections.shuffle(keyList);
//打印打乱顺序后的所有牌(标记),实际上就是List集合中乱序后的所有标记
System.out.println("打乱后的标记:" + keyList);
/*创建4个TreeMap集合,分别用来存储三张底牌以及玩家1,玩家2,玩家3的牌(标记),
TreeMap集合会自动对所有元素进行升序排列,所以发完牌后玩家的手牌会按标记从大
到小展示出来*/
TreeMap<Integer,String> play1 = new TreeMap<>();
TreeMap<Integer,String> play2 = new TreeMap<>();
TreeMap<Integer,String> play3 = new TreeMap<>();
TreeMap<Integer,String> threeCard = new TreeMap<>();
for (int i = 0; i < keyList.size(); i++) {
//在List集合中找到打乱顺序后的标记
Integer cardFlag = keyList.get(i);
//根据标记在hashMap集合中找到对应的牌
String getCard = hashMap.get(cardFlag);
//根据规则先发底牌然后依次发牌给每个玩家,模拟发牌
if(i >= 51){
//如果标记的索引>=51,该标记给底牌
threeCard.put(cardFlag,getCard);
}else if(i % 3 == 0){
//如果标记的索引%3==0,该标记给玩家1
play1.put(cardFlag,getCard);
}else if(i % 3 == 1){
//如果标记的索引%3==1,该标记给玩家2
play2.put(cardFlag,getCard);
}else{
//如果标记的索引%3==2,该标记给玩家3
play3.put(cardFlag,getCard);
}
}
System.out.println("----------------------看牌----------------------");
//打印三个玩家的手牌以及三张底牌,模拟看牌
System.out.println("底牌:" + threeCard.values());
System.out.println("玩家一的牌:" + play1.values());
System.out.println("玩家二的牌:" + play2.values());
System.out.println("玩家三的牌:" + play3.values());
}
以上基本都有注解标明所以就没做过多的介绍了相信这难不倒聪明的你们!
Java斗地主(集合综合练习)的更多相关文章
- 【Java】集合综合案例 - 播放器管理
集合综合案例 文章目录 集合综合案例 需求分析 项目演示 详细设计 代码实现 歌曲类 播放器类 播放列表类 测试 参考资料 播放器管理 需求分析 项目演示 详细设计 代码实现 重新搞一波 复习巩固 简 ...
- 斗地主的综合案例实现(Map有序)
斗地主的综合案例实现(Map有序) 整体思路 代码实现 import java.util.ArrayList; import java.util.Collections; import java.ut ...
- java的集合框架之一
java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...
- Java web项目综合练习(Estore)
Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...
- Java高并发综合
这篇文章是研一刚入学时写的,今天整理草稿时才被我挖出来.当时混混沌沌的面试,记下来了一些并发的面试问题,很多还没有回答.到现在也学习了不少并发的知识,回过头来看这些问题和当时整理的答案,漏洞百出又十分 ...
- Java基础-集合的嵌套
Java基础-集合的嵌套 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.静态导入 静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准 ...
- 【Java】集合_学习笔记
一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- 谈谈Java的集合组件
让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...
随机推荐
- Logo小变动,心境大不同,SVG矢量动画格式网站Logo图片制作与实践教程(Python3)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_207 曾几何时,SVG(Scalable Vector Graphics)矢量动画图被坊间称之为一种被浏览器诅咒的技术,只因为糟糕 ...
- 多云部署多主模式的MGR集群,每个云一个MGR 节点,满足业务单元化改造的需求
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...
- Luogu1083 借教室 (线段树)
当根都<0,就不行了 #include <iostream> #include <cstdio> #include <cstring> #include &l ...
- Spring源码 19 IOC getBean
参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...
- Android 自定义View - 柱状波形图 wave view
前言 柱状波形图是一种常见的图形.一个个柱子按顺序排列,构成一个波形图. 柱子的高度由输入数据决定.如果输入的是音频的音量,则可得到一个声波图. 在一些音频软件中,我们也可以左右拖动声波,来改变音频的 ...
- Vue3 发生错误:setup function returned a promise
当你组件中有 Promise 对象时,即 Axios.Ajax 这类的请求,然后把数据渲染到模板中就会报如下图的错误: 在这个异步组件外包裹一个 <Suspense> 组件.比如 App. ...
- discuz怎么转wordpress,详细实操过程
因为原来的是Discuz! X3.4论坛,目前访问不了,但里面有两个栏目是比较有用的,一个付费栏目,另一个免费栏目,放在硬盘有点可惜,于是想把它转为wordpress的两个栏目.发现网上都没有详细过程 ...
- C#通过反射实现简单的控制反转和依赖注入(一)
Java项目中通过@Autowire便可以实现将对象实例化到指定的字段,无需手动new一个对象出来,用起来非常方便,因为Java类加载器在在加载过程会将扫描所有@Servie.@Mapper.@Com ...
- CF-1684C - Column Swapping
Problem - 1684C - Codeforces 题意: 现在有一个n*m的棋盘,每个棋子有一个值,你可以交换两列棋盘的棋子位置,使得每一行的棋子从左到右为非递减. 题解: 只需要判断一行不满 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(17)-Fiddler如何充当第三者,再识AutoResponder标签-下篇
1.简介 上一篇宏哥主要讲解的一些在电脑端的操作和应用,今天宏哥讲解和分享一下,在移动端的操作和应用.其实移动端和PC端都是一样的操作,按照宏哥前边抓取移动端包设置好,就可以开始实战了. 2.界面功能 ...