java简单实现斗地主发牌功能
作者:qq_35937045 发布时间:2023-06-18 16:22:44
标签:java,斗地主,发牌
本文实例为大家分享了java简单实现斗地主发牌的具体代码,供大家参考,具体内容如下
问题:
参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色;三名玩家,其中地主比其他玩家多3张牌)
要求实现以下功能:
1、洗牌
2、发牌(发牌按照常规方式A-B-C-A-B-C-A…,不允许一次性随机17张给某个玩家)
3、玩家手中牌的展示(要求按点数实现排序)
分析
运用面向对象的程序设计思维分为扑克、玩家和游戏三部分,扑克类属性有花色,点数,次序;玩家类属性有玩家id,昵称,是否地主,牌的集合;游戏过程分为洗牌,随机产生地主,发牌,完成牌的排序,玩家手里的牌展示功能
程序实现
package com.lesson17.homework;
/**
* @author HUC
*
*/
/**扑克类*/
public class Poker {
/** 扑克花色 */
private String flower;
/** 扑克点数 */
private String pointer;
/** 扑克顺序 */
private int sort;
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;
}
package com.lesson17.homework;
public class Player {
/** 玩家id */
private int id;
/** 玩家昵称 */
private String name;
/** 玩家拿到的牌 */
private ArrayList<Poker> pokers = new ArrayList<>();
/** 玩家是否地主 */
private boolean boss;
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 ArrayList<Poker> getPokers() {
return pokers;
}
public void setPokers(ArrayList<Poker> pokers) {
this.pokers = pokers;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
package com.lesson17.homework;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class PokerGame {
static List<Player> players;
static ArrayList<Poker> list = 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 washPoker(){
Collections.shuffle(list);
}
/**随机地主*/
public void pushBoss(){
Random r = new Random();
bossIndex = r.nextInt(players.size());
//设置被随机到的玩家为地主
players.get(bossIndex).setBoss(true);
}
/**依次发牌*/
public void pushPoker(){
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 i = 51;i < 54 ;i++){
//将最后剩余的牌(3张)全部给地主
players.get(bossIndex).getPokers().add(list.get(i));
}
}
/**排序*/
public void sortPoker() {
Collections.sort(players.get(0).getPokers(), (a,b)->a.getSort()-b.getSort());
Collections.sort(players.get(1).getPokers(), (a,b)->a.getSort()-b.getSort());
Collections.sort(players.get(2).getPokers(), (a,b)->a.getSort()-b.getSort());
}
public void start(){
//随机地主
pushBoss();
//洗牌
washPoker();
//发牌
pushPoker();
//排序
sortPoker();
//展示牌
for(Player p : players){
System.out.println(p.getPokers());
}
}
public static void main(String[] args) {
new PokerGame().start();
}
}
结果
来源:https://blog.csdn.net/qq_35937045/article/details/97620335
0
投稿
猜你喜欢
- 相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线void fitLine( InputArray points, Output
- 引语:工作中有时候需要在普通的对象中去调用spring管理的对象,但是在普通的java对象直接使用@Autowired或者@Resource
- 介绍Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。Spring Cache提供了一
- 前言最近看插件库上少有的取色器大都是圆形的或者奇奇怪的的亚子,所以今天做两个矩形的颜色取色器提示:以下是本篇文章正文内容,下面案例可供参考一
- yaml语法注解配置文件两种形式application.properties和.yaml第一种语法 key=value第二种key:空格va
- 背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上
- 近日于LeetCode看题遇1114 按序打印,获悉一解法使用了Semaphore,顺势研究,记心得于此。此解视Semaphore为锁,以保
- 本文主要介绍我为桌面和 Web 设计的一个超级秘密 Flutter 项目使用了画布和可拖动节点界面。本教程将展示我如何使用堆栈来使用小部件完
- 目录效果展示剪裁 WidgetClipRRect(圆角矩形剪裁)其他属性其他形状剪裁ClipOval(椭圆剪裁)其他属性ClipRect(矩
- 上一节《SSH框架网上商城项目第1战之整合Struts2、Hibernate4.3和Spring4.2》我们搭建好了Struts2、Hibe
- 目录转场形式设定页面默认转场方式跳转时指定转场方式总结在 fluro 中,定义路由处理器 Handler 时可以指定该页面的默认转场形式,或
- [LeetCode] 2. Add Two Numbers 两个数字相加You are given two non-empty&n
- 前言开发中,免不了会用到多边形、多角星等图案,比较常用的多边形比如雷达图、多角星比如评价星级的五角星等,本篇文章就使用Flutter绘制封装
- 讲这个例子前,咱们先来看一个简单的程序:字符串数组实现数字转字母:#include <stdio.h>#include <
- 1.map遍历快速实现边距,文字自适应改变大小Container( // padding: EdgeI
- forward_list 概述forward_list 是 C++ 11 新增的容器,它的实现为单链表。forward_list 是支持从容
- 开发环境win10Android Studio效果用于多级菜单展示,或选择。如 每个省,市,县;如 树木的病虫害;关键代码 @overrid
- 目录简介官方示例错误示例解决方法一:Scaffold的子组件通过Builder构建解决方法二:使用GlobalKey存储ScaffoldSt
- 简介对于一个APP来说,肯定会有一个AppBar,这个AppBar一般包含了APP的导航信息等。虽然我们可以用一个固定的组件来做为AppBa
- .c 源程序 ----- 编译 ----- 链接 ---- exe ----运行 -------->程序翻译环境和执行环境翻译环境:源