斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。

首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建一个扑克牌实体类和一个玩家实体类,具体代码如下:

首先是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实现斗地主发牌功能(含按顺序发牌和玩家牌排序显示等功能)...相关推荐

  1. java 上传图片后没法立马显示出来_SpringMVC多个文件上传及上传后立即显示图片功能...

    多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话MultipartFile类不能初始化,它不支持数组 packag ...

  2. java斗地主随机发牌_java实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌的具体代码,供大家参考,具体内容如下 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 代码如下: ...

  3. java斗地主发牌_java实现斗地主发牌系统

    本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下 玩家类 package com.softeem.example; import java.util.ArrayLis ...

  4. java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能

    其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...

  5. java实习生面试题_java实习生面试题(含答案)

    1.Java容器框架有哪些? Java容器框架中有两个名称分别为Collection和Set的接口 2.list,map,set,array,它们有什么区别 (推荐学习:java实习生面试题) Lis ...

  6. java 项目数据库脚本命名_java项目酒店管理(含数据库脚本)

    java项目酒店管理(含数据库脚本) java 2020-6-27 下载地址 https://www.codedown123.com/26975.html java项目酒店管理(含数据库脚本) 资源下 ...

  7. java 导出批量图片_Java Poi 导出excel(含图片及多个sheet)

    因为之前做的导出都是导出数据的基本信息不含图片的那种,一直也没做过导出图片的excel,正好这两天做这个需求就做了一个,好 废话不多说,直接上图 ,因为我这边是根据模板导出数据 先看下模板 然后上代码 ...

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

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

  9. java斗地主发牌_实现斗地主发牌(java)

    /** *这是一个java实现的斗地主,发牌结果的程序,实现3个人十三张牌,然后底牌3张. */ import java.util.Arrays; public class pokerDemo{ pu ...

最新文章

  1. 一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数...
  2. C++类静态成员与类静态成员函数
  3. C++基础13-类和对象之继承2
  4. 实现ios常见菜单效果的思路
  5. 《高翔视觉slam十四讲》学习笔记 第四讲 李群与李代数
  6. sigmoid/softmax指数运算溢出问题的解决方法
  7. 大数据第一季--Hadoop(day9)-徐培成-专题视频课程
  8. python.exe-无法找到入口
  9. 斗破苍穹hd和java版区别_《斗罗大陆》和《斗破苍穹》的区别有哪些?
  10. 三个学生开发的学术钓鱼软件,成功忽悠了整个学术圈
  11. linux内核裁剪的具体过程和选择
  12. 淘宝Tmall,1688,拼多多API商品详情接口
  13. WordPress文章发布失败或更新失败解决方法
  14. 物资学院、草房、常营点过的外卖总结
  15. Mac上最好用的BT下载工具——Folx
  16. 【VBA】使用ReadTXT功能,读取巨大文件的加速方法
  17. 【Maths】对数 logrithm
  18. 怎么看服务器的内部性能参数,怎么看服务器详细配置参数
  19. 电脑绣花打版软件评比(中)
  20. 图书管理系统(2022暑期)

热门文章

  1. “NGB信息高速路”驶入上海千家万户
  2. python画彩虹和小熊
  3. 用虚幻4开发搭积木的VR游戏
  4. 任务管理器已被管理员禁用
  5. 揭开对机器学习的七点误解 1
  6. Dreamweaver网页设计技巧
  7. fft 估计载波频率程序_一种BPSK载波频率估计综合算法.pdf
  8. c#批量下载图片并存储到本地
  9. Trie树 c++实现
  10. python分类预测降低准确率_【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值...