用Java编写简单的扑克牌游戏
昨天我帮助一位朋友解决了这个问题,今天我即兴想写一篇详细的关于用Java编写扑克牌游戏的文章。 当然我这里只是实现一些简单的功能。
关于扑克牌游戏的特征,想必大家都有所接触过,有扑克牌,玩扑克牌游戏的玩家还有玩法。 扑克牌的特点是它有点数和花色,当然大小王除外,大小王没有花色。
玩扑克牌游戏的玩家的特点是他们都有一个游戏名称,还有就是在玩扑克牌游戏时,他们还有一个特点就是游戏中的身份,是地主还是农民,除此之外,他们手中还有扑克牌。
至于玩法就是首先得有3个人,然后就开始洗牌,发牌,抢地主,最后每个人手中有17张牌,最后底牌给地主,最后整理牌。
经过上面的分析,我们就知道要建3个类:扑克牌类(Card类),玩家类(Player类),游戏类(即玩法类Game类)
首先我们开始写扑克牌类(Card类):
在Card类中写上刚刚分析的属性:花色和点数。除此之外,我还定义了一个size属性,因为扑克牌要是只有数字像0,1,2,3,4,5,6,7,8,9这样的,我们好排序,但是扑克牌中还有J,Q,K,A这样的,我们不好对它进行排序。所以我定义了一个size属性给牌设置大小方便整理牌
public class Card {//花色private String decor;//点数private String point;//给牌设置大小(方便排序)private int size;
在Card类中我们还要显示扑克牌,就是显示扑克牌的花色加点数,注意大小王没有花色的点数,因此我们在显示的时候可以判断一下。
@Overridepublic String toString() {//做判断,如果是大小王则不要花色if (Objects.isNull(decor) || Objects.equals(decor, "")) {return point;}//不是大小王就要花色return decor + "-" + point;}
上面我们就完成了Card类,接下来我们就开始写玩家类(Player类)。
在Player类中我们也把玩家类的属性写上:姓名,是否是地主,手中的牌
public class Player {//玩扑克游戏的人的名称private String name;//地主private boolean boss;//玩扑克游戏人手中的牌private List<Card> playerPoker=new ArrayList<>();
在玩家信息的显示这里,我们可以通过getName()方法来获得玩家的姓名,但是,我们没有显示地主和农民的信息,要是不显示这个信息的话,游戏就出现一点问题,所以我在这里用getGameName()的方法显示地主和农民的信息。
//获得扑克游戏中的角色名称public String getGameName() {return boss?"地主":"农民";}
上面我们就完成了Player类,接下来我们就开始写最重要的玩法类Game类。
在Game类中我们首先得有54张扑克牌,怎么样产生这些扑克牌呢?,那就是四种花色和13个点数随机结合,当然我这里的随机结合是指不重复的结合。我这里是使用两个for循环来做的,并且在结合的过程中我也为每一张扑克牌设置了大小3对应的是0,4对应的是1,5对应的是2,依次向后。最后,我单独加入了大小王,并设置了他们的大小。后面的排序可以根据size大小来排序。
public class Game {List<Card> pokers = new ArrayList<>();String[] decors = {"红心", "方块", "梅花", "黑桃"};String[] points = {"3", "4", "5", "6", "7", "8","9", "10", "J", "Q", "K", "A", "2"};List<Player> players = new ArrayList<>();
//让花色和点数随机组合产生一张扑克牌{for (int i = 0; i < points.length; i++) {for (int j = 0; j < decors.length; j++) {Card c = new Card(decors[j], points[i]);//设置扑克牌的大小c.setSize(i);pokers.add(c);}}//由于大小王没有花色单独加入Card card1 = new Card(null, "Queen");card1.setSize(13);Card card2 = new Card(null, "King");card2.setSize(14);pokers.add(card1);pokers.add(card2);}
做完上面的操作,我们的游戏就可以开始了。首先游戏开始得有三个人吧,然后就开始洗牌,发牌,选地主等等操作。在这里我是随机了一个地主。
public void start(Player p1, Player p2, Player p3) {//添加玩游戏的人players.add(p1);players.add(p2);players.add(p3);//洗牌Collections.shuffle(pokers);//发牌dealCard();//选地主Collections.shuffle(players);players.get(0).setBoss(true);//给地主底牌giveBossCard();//整理牌sortCard();//显示show();}
发牌的具体代码:
public void dealCard() {for (int i = 0; i < players.size(); i++) {players.get(i).setPlayerPoker(dealStream(i));}}public List<Card> dealStream(int n) {List<Card> list = pokers.stream().skip((n) * 17).limit(17).collect(Collectors.toList());return list;}
给地主底牌的代码:
public void giveBossCard() {players.get(0).getPlayerPoker()
.addAll(pokers.subList(pokers.size() - 4, pokers.size()));}
整理牌的代码:
public void sortCard() {for (Player player : players) {player.getPlayerPoker().sort((s1, s2) -> s1.getSize() - s2.getSize());}}
显示玩家手中牌的代码:
public void show() {players.forEach(s ->System.out.println(s.getName()+"["+s.getGameName() +"]"+ s.getPlayerPoker()));}
这里我是在Game类中写的主函数main:
public static void main(String[] args) {Player p1 = new Player("coco");Player p2 = new Player("tom");Player p3 = new Player("jerry");Game game1 = new Game();game1.start(p1, p2, p3);}
运行结果:
总结:
在这个编程过程中,扑克牌类(Card类)和玩家类(Player类)都是实体类比较简单好写,但是这两个类在最后的显示部分都要注意一下。玩法类(Game类)中的初始化扑克牌要注意大小王的初始化还有要注意给每张牌设置大小。玩法类(Game类)中的洗牌,发牌,选地主等的操作比较难,会运用Collections.shuffle()和subList()方法能帮助我们洗牌和发牌。当然选地主时也可以用Random随机数来随机。我觉得这里最难的还是发完扑克牌后的排序可以让扑克牌类(Card类)实现Comparable接口重写CompareTo(),也可以用匿名内部类的写法创建排序比较器(Comparator)对象重写compare()。
用Java编写简单的扑克牌游戏相关推荐
- 利用Java编写简单的猜拳游戏
猜拳游戏要求用Java编写一个人机对战并判断输赢,记录输赢情况. 其中,1代表石头,2代表剪刀,3代表布,110表示结束游戏. 思路:首先定义输入函数,并提示用户输入猜拳数值,定义一个随机数代表电脑数 ...
- 使用Java编写简单的老虎机游戏
无论游戏多么简单或复杂 ,Java都能胜任! 在这篇文章中,让我们看一下Java编程的初学者如何制作一个简单而功能齐全的老虎机. 老虎机已经存在很长时间了,但是它的娱乐价值似乎并没有减弱. Inter ...
- Java顺序表 实现扑克牌游戏简单 (梭哈 / 斗牛)
简单的扑克牌游戏 梭哈: 梭哈用的是扑克牌共52张牌,因为不容易出好牌,也有去掉 234567 的简易玩法,规则玩法花样很多. 在这里我们采用:52 张牌,3 个人,一人 5 张牌,按规则 ...
- 一个简单的扑克牌游戏(一)
用C#开发一个简单的扑克牌游戏 一.概述 ///这是一个简单的游戏(也许简单的不能再简单啦),用C#语言编写,运行在windouws控制台环境中. ///开发日期:2008年8月30日始 ///项目名 ...
- java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain-创建窗体 BallJPanel- ...
- main java game,playgame 一个JAVA编写的飞行小游戏,有基本完整的 框架,适合初学者参照学习 Other s 其他 238万源代码下载- www.pudn.com...
文件名称: playgame下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 7050 KB 上传时间: 2013-06-06 下载次数: 3 提 供 者: Lyq ...
- C++编写简单的俄罗斯方块游戏
代码地址如下: http://www.demodashi.com/demo/14593.html C++编写简单的俄罗斯方块游戏 使用C++编写一个简单的俄罗斯方块游戏. 1 环境要求 使用C++图形 ...
- 用JAVA实现简单的扑克牌洗牌发牌并排序
用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤: 创建一个HashMap集合对象 创建一个ArrayList集合对象 生成一副扑克牌 将扑克牌按照键值关系添加到Hash ...
最新文章
- 张口闭口就是焦虑,现在的程序员怎么了?
- linux怎么打开云硬盘,Linux系统云服务器如何挂在磁盘
- react获取URL中参数
- js实现算法--割字符串
- 古董来了:1999年的物件,香港已经回归了,我都上初中了,那么你出生了吗?
- js/css文件修改后浏览器本地缓存解决
- 信号模型噪声服从零均值高斯分布_非高斯噪声下基于分数低阶循环谱的调制识别方法...
- 关于GaussDB(DWS)的正则表达式知多少?人人都能看得懂的详解来了!
- Android音频开发(七)音频编解码之MediaCodec编解码AAC下
- java I O类大全_Java I/O —— File类
- SEO独家揭秘:影响网站降权被K的七项因素
- HDU6130 Kolakoski
- 网易云音乐params和encSecKey参数生成代码
- 电脑系统(U盘安装) win7 win8 win10XP
- ntp和chrony
- 开发者藏经阁——超全阿里系电子书大合集(打包下载)
- 研究人员是如何改善微型计算机的,北方高校微机实验室内微环境的研究及改善对策的探讨...
- idea中添加查看jdk版本路径
- unigui 验证码生成
- 浅析基于GIS平台财政电子沙盘系统
热门文章
- [Linux]以匹配系统为例入门Thrift框架
- 打出英文名字中间那个点
- 页面添加漂浮物 掉礼物效果 掉红包效果
- 【leetcode刷题】70.最少操作使数组递增——Java版
- 做Java程序员真的没有春天吗?写给正在求职的Java开发
- R语言美元/欧元汇率的日对数收益率的TGarch模型
- PC与Android通过USB连接进行Socket通信
- 淘宝天猫除了领优惠券,还可以领商家返利,这个你们知道吗?
- 知识图谱表示学习 TransE: Translating Embeddings for Modeling Multi-relational Data
- centos 网卡设置