java斗地主游戏

使用java实现斗地主小游戏。

程序分析:
1、创建扑克牌的实体类Poker,设置四个参数:花色、数字、牌值(判断大小)、是否地主牌,实现getset方法和构造方法;

2、创建玩家的实体类Player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法;

3、洗牌:循环嵌套花色数组跟数字数组生成52个Poker,手动加入大小王Poker,放进map(int,Poker)里面,利用Collections.shuffle随机排序map的key,再根据key生成排序后的Poker集合

4、发牌:生成3个玩家对象,拿到洗牌后的集合,前51张牌为玩家牌,后3张为地主牌,在51张牌中随机一张为地主牌,遍历玩家牌分配个每一个Player,同时根据玩家牌的牌值生成集合grades存进Player对象中,将grades转为int数组并进行升序排序,根据grade取得新Poker集合分配给玩家。

完整代码

Poker类:

package com.company;public class Poker {private String color;private String number;private int grade;boolean isLandowners;public boolean isLandowners() {return isLandowners;}public void setLandowners(boolean landowners) {isLandowners = landowners;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public Poker() {}public Poker(String color, String number ,int grade,boolean isLandowners) {this.color = color;this.number = number;this.grade=grade;this.isLandowners=isLandowners;}public String toString() {return this.getColor()+this.getNumber();}
}

Player类:

package com.company;import java.util.ArrayList;
import java.util.LinkedList;public class Player {private ArrayList<Poker> pokers;private boolean isLandower;private ArrayList<Poker> newPokers;private LinkedList<Integer> grades;public LinkedList<Integer> getGrades() {return grades;}public void setGrades(LinkedList<Integer> grades) {this.grades = grades;}public ArrayList<Poker> getNewPokers() {return newPokers;}public void setNewPokers(ArrayList<Poker> newPokers) {this.newPokers = newPokers;}public boolean isLandower() {return isLandower;}public void setLandower(boolean landower) {isLandower = landower;}public Player() {}public ArrayList<Poker> getPokers() {return pokers;}public void setPokers(ArrayList<Poker> pokers) {this.pokers = pokers;}
}

洗牌:

/*洗牌*/public static LinkedList<Poker> getPokerList() {LinkedList<Poker> pokers = new LinkedList<Poker>();LinkedList<Poker> newPokers = new LinkedList<Poker>();ArrayList<Integer> arrayList = new ArrayList<>();int[] arr;/*生成54张扑克牌(Poker对象)*//*用嵌套循环生成从方块3到黑桃2的Poker对象,放进Poker的LinkedList保证顺序*/String[] colors = {"♦", "♣", "♥", "♠"};String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};for (int i = 0; i < numbers.length; i++) {for (int j = 0; j < colors.length; j++) {Poker p = new Poker(colors[j], numbers[i], (4 * i) + j + 1, false);pokers.add(p);}}/*添加大小王*/pokers.add(new Poker("black", "☆", 53, false));pokers.add(new Poker("red", "☆", 54, false));/*将生成的54张扑克牌从1到54放进map*/for (int z = 1; z <= pokers.size(); z++) {map.put(z, pokers.get(z - 1));}/*遍历Map,将每个Poker对应的key放进 ArrayList<Integer> arrayList */Set<Map.Entry<Integer, Poker>> set = map.entrySet();Iterator it = set.iterator();while (it.hasNext()) {Map.Entry<Integer, Poker> e = (Map.Entry<Integer, Poker>) it.next();arrayList.add(e.getKey());}/*利用Collections.shuffle随机排序key*/Collections.shuffle(arrayList);/*将乱序后的key对于的Poker放进newPokers里面 */for (Integer i : arrayList) {newPokers.add(map.get(i));}return newPokers;}

发牌:

/*发牌*//*根据玩家人数生成Player,默认num=3*/private static void sentPoker(int num) {/*获取洗牌后的LinkedList,保证顺序*/LinkedList<Poker> Allpokers = getPokerList();ArrayList<Poker> pokers = new ArrayList<>();ArrayList<Poker> BottomPokers = new ArrayList<>();/*生成玩家对象*/for (int i = 0; i < num; i++) {Player p = new Player();players.add(p);}/*前50张牌为玩家牌,后三张为底牌*/for (int p = 0; p < Allpokers.size(); p++) {if (p <= 50) {pokers.add(Allpokers.get(p));} else {BottomPokers.add(Allpokers.get(p));}}/*玩家牌中随机一张为地主牌*/Random rand = new Random();int s = rand.nextInt(51);pokers.get(s).setLandowners(true);System.out.println("地主牌: " + pokers.get(s));/*根据num生成Player对象*/for (int j = 0; j < num; j++) {/*玩家的牌值集合*/LinkedList<Integer> grades = new LinkedList<>();/*玩家的手牌集合*/ArrayList<Poker> playerPokers = new ArrayList<Poker>();/*根据玩家个数分配玩家牌*/for (int z = j; z < pokers.size(); z = z + num) {playerPokers.add(pokers.get(z));grades.add(pokers.get(z).getGrade());players.get(j).setPokers(playerPokers);players.get(j).setGrades(grades);}/*根据玩家牌中的地主牌设置玩家是否地主*/for (Poker p : players.get(j).getPokers()) {if (p.isLandowners() == true) {players.get(j).setLandower(true);}}/*根据玩家的牌值集合生成数组*/Integer[] gs = new Integer[players.get(j).getGrades().size()];grades.toArray(gs);/*排序数组,由低到高*/Arrays.sort(gs);/*排序后的玩家牌*/ArrayList<Poker> newPokers = new ArrayList<>();for (int g = 0; g < gs.length; g++) {Poker p = map.get(gs[g]);newPokers.add(p);}players.get(j).setNewPokers(newPokers);System.out.println("玩家" + (j + 1) + ": " + players.get(j).getNewPokers() + " 是否地主:" + players.get(j).isLandower());}System.out.print("底牌为: ");for (Poker p : BottomPokers) {System.out.print(p + " ");}}

效果展示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么总是封板又打开涨停_警惕!如果股票涨停板反复打开说明了什么?

股市禁忌“三进三出”&#xff1a;“三进”为&#xff1a;一是“高位进”&#xff0c;这就是我们常说的追涨。犯有这种错误的投资者&#xff0c;喜欢在股票已经有了很大的涨幅后买进&#xff0c;其买进的依据往往是股票已经放量突破了历史高点或突破了某个高点阻力位等&#xf…

动态背景登录

前端动态背景登录 效果演示 完整代码 首先我们要导入jquery.js包 html代码 <!doctype html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1&qu…

ARIMA模型的建模和预测

目录 基本过程&#xff1a; 1.Green 函数递推公式 2.ARIMA模型的预测 例题 小结 基本过程&#xff1a; 1.Green 函数递推公式 ARIMA模型 也可写成 确定 设 则可得Green函数递推公式 2.ARIMA模型的预测 原则&#xff1a;最小均方误差预测原理 传递形式&#xff1a; 预测…

jsp论坛网站模版_网站被降权了?看看这些解决方法,或许有帮助哦

点击标题下「蓝色微信名」可快速关注在前面的文章中&#xff0c;笔者已经给大家介绍了网站被降权的因素。那么当遇到降权的问题该怎么办呢&#xff1f;接下来&#xff0c;笔者就结合本身经历过的网站降权来给大家介绍一下补救措施。1、造成网站首页降权的原因&#xff1a;服务器…

ARIMA模型之疏系数模型

目录 1.疏系数模型的定义 2.拟合ARIMA疏系数模型函数 例题&#xff1a; 小结 1.疏系数模型的定义 ARIMA(p,d,q)模型是指d阶差分后自相关最高阶数为p&#xff0c;移动平均最高阶数为q的模型&#xff0c;通常它包含pq个独立的未知系数: 如果该模型中部分自相关系数 ,1≤j<…

动画分享菜单

制作一个动画分享的菜单 效果演示 注意&#xff1a;在我们的程序开始之前我们一定要导入jquery.js架包并且找到如图所示的矢量图标。 完整代码 html代码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/…

java 双向链表_23张图!万字详解「链表」,从小白到大佬

链表和数组是数据类型中两个重要又常用地基础数据类型&#xff0c;数组是连续存储在内存中的数据结构&#xff0c;因此它的优势是可以通过下标迅速的找到元素的位置&#xff0c;而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动&#xff0c;为了解决和平衡此问题于是…

有季节效应的非平稳序列分析之因素分解

目录 6.1 因素分解理论 6.2因素分解模型 6.2.1因素分解模型的选择 6.2.2趋势效应的提取 简单中心移动平均的良好属性 R语言中&#xff0c;使用filter函数可以做简单移动平均 6.2.3 季节效应的提取 6.2.4 X11季节调节模型 X11模型分析步骤&#xff1a; ​ 确定性…

指数平滑预测模型

目录 1.分类 2.简单指数平滑 简单指数平滑预测&#xff1a; 平滑系数的确定 R中实现&#xff1a; 3. Holt两参数指数平滑 4. Holt-Winters三参数指数平滑 5.ARIMA加法季节模型 R实现 例题&#xff1a; 1.分类 2.简单指数平滑 简单移动平均法向前预测1期&#xff1a; …

ARIMA乘法季节模型

目录 ARIMA乘法季节模型 例题1 例题 2 例题3 ARIMA乘法季节模型 序列的季节效应、长期趋势效应和随机波动之间有着复杂的相互关联性,简单的季节模型不能充分地提取其中的相关关系&#xff0c;这时常采用乘积季节模型。 例题1 我国1949-2008年年末人口总数&#xff08;单…

机器学习之二分类LDA线性判别(最大特征值法)

目录 一、实验数学原理 二、算法实现步骤 三、实例分析 四、实验结果及分析 一、实验数学原理 线性判别分析((Linear Discriminant Analysis &#xff0c;简称 LDA)是一种经典的线性学习方法&#xff0c;在二分类问题上因为最早由 [Fisher,1936] 提出&#xff0c;亦称 ”Fi…

在布局空间标注的尺寸量不对_卫生间最佳布局尺寸,合理布局做到1毫米都不浪费!...

房子不论大小里面都会配置一个卫生间&#xff0c;卫生间分为大致三个区域&#xff0c;一个是洗涮区&#xff0c;可以在这里每天洗脸刷牙&#xff0c;还有就是淋浴区我们可以每天在这里洗澡&#xff0c;洗掉一天的疲惫。最后就是如厕区。这三大区域各个设计尺寸不同&#xff0c;…

机器学习 —— 向量机(matlab)

目录 一、SVM基本介绍 1.1 SVM算法定义 1.2 SVM和逻辑回归的区别 二、实验数学原理 三、实验算法和实验步骤 四、实例分析 一、SVM基本介绍 1.1 SVM算法定义 SVM全称是supported vector machine&#xff08;支持向量机&#xff09;&#xff0c;即寻找到一个超平面使样本…

excel如何去重统计户数_公式解读第三期 单元格中数字如何去重排序?

公式解读 第三期 -单元格中数字的去重排序&#xff01;本期涉及到函数较多&#xff0c;你可以一次性根据这个案例&#xff0c;学习多少很多常用 函数的用法&#xff0c;同时我也会讲解思路&#xff0c;这个很重要&#xff0c;思路决定了出路。直接先看一下我们的效果图&#xf…

机器学习 —— 神经网络(matlab)

目录 一、介绍 二、实验数学原理 三、实验算法和实验步骤 四、实例分析 一、介绍 神经网络是一种运算模型&#xff0c;由大量的节点&#xff08;或称“神经元”&#xff0c;或“单元”&#xff09;和之间相互联接构成。每个节点代表一种特定的输出函数&#xff0c;称为激励…

ARIMA加法季节模型

目录 ARIMA加法季节模型 ARIMA加法季节模型函数 例题 ARIMA加法季节模型 季节效应和其它效应之间是加法关系 通过简单的趋势差分、季节差分之后转化为平稳&#xff0c;模型结构通常如下 ARIMA加法季节模型函数 例题 部分数据&#xff1a; timexJan-93977.5Feb-93892.5Mar…

Java在远程方法调用中运用反射机制

我们将介绍反射机制在网络编程中的应用&#xff0c;实现如何在客户端通过远程方法调用服务器端的方法。 假定在服务器端有一个 HelloService 接口&#xff0c;该接口具有 getTime() 和 echo() 方法&#xff0c;具体代码如下&#xff1a; import java.util.Date;public interf…

多元时间序列分析 —— 因果检验

目录 因果检验 因果关系的识别 例 Granger 因果关系定义 两变量之间的4种因果关系 Granger因果检验 1.假设条件 2.检验统计量 例 进行Granger因果检验应该注意的问题 因果检验 因果关系的识别 对于多元时间序列而言&#xff0c;如果能找到对响应变量有显.著影响的输…

华为仿苹果字体_华为mate40系列再次霸榜DXO,网友:无敌是多么寂寞

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以免费收到最新内容了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。声明&#xff1a;本文转载自网络&#xff0c;如有侵权&#xff0c;请在后台留言联系…

Java常见异常处理

异常&#xff08;exception&#xff09;是在运行程序时产生的一种异常情况&#xff0c;已经成为了衡量一门语言是否成熟的标准之一。 异常简介 Java 中的异常又称为例外&#xff0c;是一个在程序执行期间发生的事件&#xff0c;它中断正在执行程序的正常指令流。为了能够及时…