java按顺序发牌_Java实现斗地主发牌功能(含按顺序发牌和玩家牌排序显示等功能)...
斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。
首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建一个扑克牌实体类和一个玩家实体类,具体代码如下:
首先是Poker类,含点数,花色和排序属性,大小王之后额外添加,这里我们必须实现一个Comparable接口,方便之后进行排序:
public class Poker implements Comparable{
private String flower;
private String pointer;
private int sort;
public Poker() {
}
public Poker(String flower, String pointer, int sort) {
super();
this.flower = flower;
this.pointer = pointer;
this.sort = sort;
}
public String getFlower() {
return flower;
}
public void setFlower(String flower) {
this.flower = flower;
}
public String getPointer() {
return pointer;
}
public void setPointer(String pointer) {
this.pointer = pointer;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
@Override
public String toString() {
return flower +"-" + pointer;
}
@Override
public int compareTo(Poker a) {
return this.getSort() - a.getSort();
}
}
然后就是Player类,这里我们定义属性有id,玩家名字以及玩家手牌和是否地主:
import java.util.ArrayList;
public class Player {
private int id;
private String name;
private ArrayListpokers = new ArrayList<>();
private boolean boss;
public Player() {
}
public Player(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayListgetPokers() {
return pokers;
}
public void setPokers(ArrayListpokers) {
this.pokers = pokers;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
}
实体类建完之后,我们就要开始实现功能了,首先我们将要实现的功能简单叙述一下,首先我们要求有一副54张的完整牌,然后洗牌(此处我们用Collections里的静态shuffle方法实现),然后开始按洗好的牌发牌51张,发完随机地主,将剩余的三张牌给地主,并将三名玩家的牌均按大小显示出来。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class PokerGame {
/**定义为静态以简化代码量*/
static Listplayers;
static ArrayListlist = new ArrayList<>();
static String[] flowers = {"梅花","黑桃","方块","红桃"};
static String[] pointers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
int bossIndex;
static{
for(int i = 0;i < flowers.length;i++){
for(int j = 0;j < pointers.length;j++){
Poker p = new Poker(flowers[i],pointers[j],j);
list.add(p);
}
}
list.add(new Poker("小","王",13));
list.add(new Poker("大","王",14));
players = Arrays.asList(
new Player(1,"胡灿"),
new Player(2,"戴豪杰"),
new Player(3,"马涛")
);
}
/**随机地主*/
public void pushBoss(){
/**随机一个索引,随到的为地主*/
Random r = new Random();
bossIndex = r.nextInt(players.size());
players.get(bossIndex).setBoss(true);
}
/**洗牌功能*/
public void XiPai(){
/**用Collections中的一个静态方法实现随机顺序集合*/
Collections.shuffle(list);
}
/**发牌功能*/
public void FaPai(){
/**每次按顺序给每人发一张牌直到51张牌发完*/
for(int i = 0;i < 51;i+=3){
players.get(0).getPokers().add(list.get(i));
players.get(1).getPokers().add(list.get(i+1));
players.get(2).getPokers().add(list.get(i+2));
}
/**将剩余的三张牌发给地主*/
for(int j = 51;j < 54;j++){
players.get(bossIndex).getPokers().add(list.get(j));
}
}
/**排序功能*/
public void PaiXu(){
/**用Collections的sort方法实现排序功能*/
Collections.sort(players.get(0).getPokers());
Collections.sort(players.get(1).getPokers());
Collections.sort(players.get(2).getPokers());
}
/**开始游戏*/
public void start(){
pushBoss();
XiPai();
FaPai();
PaiXu();
for(Player p:players){
System.out.println(p.getPokers());
}
}
}
下面我们来看看具体实现:
public class Test {
public static void main(String[] args) {
new PokerGame().start();
}
}
结果如下:
java按顺序发牌_Java实现斗地主发牌功能(含按顺序发牌和玩家牌排序显示等功能)...相关推荐
- java 上传图片后没法立马显示出来_SpringMVC多个文件上传及上传后立即显示图片功能...
多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话MultipartFile类不能初始化,它不支持数组 packag ...
- java斗地主随机发牌_java实现斗地主发牌功能
本文实例为大家分享了java实现斗地主发牌的具体代码,供大家参考,具体内容如下 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 代码如下: ...
- java斗地主发牌_java实现斗地主发牌系统
本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下 玩家类 package com.softeem.example; import java.util.ArrayLis ...
- java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能
其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...
- java实习生面试题_java实习生面试题(含答案)
1.Java容器框架有哪些? Java容器框架中有两个名称分别为Collection和Set的接口 2.list,map,set,array,它们有什么区别 (推荐学习:java实习生面试题) Lis ...
- java 项目数据库脚本命名_java项目酒店管理(含数据库脚本)
java项目酒店管理(含数据库脚本) java 2020-6-27 下载地址 https://www.codedown123.com/26975.html java项目酒店管理(含数据库脚本) 资源下 ...
- java 导出批量图片_Java Poi 导出excel(含图片及多个sheet)
因为之前做的导出都是导出数据的基本信息不含图片的那种,一直也没做过导出图片的excel,正好这两天做这个需求就做了一个,好 废话不多说,直接上图 ,因为我这边是根据模板导出数据 先看下模板 然后上代码 ...
- java集合框架的练习之斗地主洗牌发牌的模拟(升级版)
首先,奉上java集合框架的练习之斗地主洗牌发牌的模拟(初级版)的链接:http://blog.csdn.net/striner/article/details/78489306 初级版只具有洗牌发牌 ...
- java斗地主发牌_实现斗地主发牌(java)
/** *这是一个java实现的斗地主,发牌结果的程序,实现3个人十三张牌,然后底牌3张. */ import java.util.Arrays; public class pokerDemo{ pu ...
最新文章
- 一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数...
- C++类静态成员与类静态成员函数
- C++基础13-类和对象之继承2
- 实现ios常见菜单效果的思路
- 《高翔视觉slam十四讲》学习笔记 第四讲 李群与李代数
- sigmoid/softmax指数运算溢出问题的解决方法
- 大数据第一季--Hadoop(day9)-徐培成-专题视频课程
- python.exe-无法找到入口
- 斗破苍穹hd和java版区别_《斗罗大陆》和《斗破苍穹》的区别有哪些?
- 三个学生开发的学术钓鱼软件,成功忽悠了整个学术圈
- linux内核裁剪的具体过程和选择
- 淘宝Tmall,1688,拼多多API商品详情接口
- WordPress文章发布失败或更新失败解决方法
- 物资学院、草房、常营点过的外卖总结
- Mac上最好用的BT下载工具——Folx
- 【VBA】使用ReadTXT功能,读取巨大文件的加速方法
- 【Maths】对数 logrithm
- 怎么看服务器的内部性能参数,怎么看服务器详细配置参数
- 电脑绣花打版软件评比(中)
- 图书管理系统(2022暑期)