java实现斗地主发牌系统
作者:翻腾的茶叶蛋 发布时间:2023-06-11 01:48:40
标签:java,斗地主,发牌
本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下
玩家类
package com.softeem.example;
import java.util.ArrayList;
import java.util.List;
/**
* 玩家类
*
*/
public class Player {
private String name; //名字
private boolean landowner; //是否地主
private List<Card> cards = new ArrayList<>(); //手中的所有牌
public Player() {
// TODO Auto-generated constructor stub
}
public Player(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isLandowner() {
return landowner;
}
public void setLandowner(boolean landowner) {
this.landowner = landowner;
}
public List<Card> getCards() {
return cards;
}
public void setCards(List<Card> cards) {
this.cards = cards;
}
@Override
public String toString() {
return name+"-是否地主:"+landowner+"->"+cards;
}
}
牌类
package com.softeem.example;
/**
* 牌类
*
*/
public class Card implements Comparable<Card>{
private int num;//点数
private String name;//牌面
private String flower;//花色
public Card() {
// TODO Auto-generated constructor stub
}
public Card(int num, String name, String flower) {
super();
this.num = num;
this.name = name;
this.flower = flower;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getFlower() {
return flower;
}
public void setFlower(String flower) {
this.flower = flower;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Card c) {
return this.num - c.num;
}
@Override
public String toString() {
return name+"-"+flower+"-"+num;
}
}
package com.softeem.example;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class PokerGame {
static List<Card> list = new ArrayList<>(); //所有牌集合
static List<Player> players = new ArrayList<>(); //玩家集合
static int position; //初始化当前发牌的位置
static String[] flowers = {"红桃","方片","梅花","黑桃"};
static String[] names = {"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"};
/**
* 初始化所有牌面和玩家
*/
static{
int i = 0;
//遍历所有的牌面值(除大小王:大小王无花色)
for (; i < names.length - 2; i++) {
for (int j = 0; j < flowers.length; j++) {
list.add(new Card(i, names[i], flowers[j]));
}
}
list.add(new Card(i++, names[names.length-2], null));
list.add(new Card(i++, names[names.length-1], null));
}
/**
* 初始化玩家
*/
public void initPlayer(){
players.clear();
players.add(new Player("盖伦"));
players.add(new Player("艾希"));
players.add(new Player("玛尔扎哈"));
}
/**
* 洗牌
*/
public void shuffle(){
//索引重置
position = 0;
Collections.shuffle(list);
Collections.shuffle(list);
Collections.shuffle(list);
start();
}
/**
* 发牌
*/
public void sendCards(){
//准备玩家
initPlayer();
//随机地主(索引)
int index = new Random().nextInt(players.size());
//设置为地主
players.get(index).setLandowner(true);
Card now = null;
while(position < list.size() - 3){
//获取最上面的一张牌
now = list.get(position);
if(position % 3 == 0){
players.get(0).getCards().add(now);
}else if(position % 3 == 1){
players.get(1).getCards().add(now);
}else{
players.get(2).getCards().add(now);
}
position++;
}
//获取集合中的最后三张牌
List<Card> last = list.subList(list.size()-3, list.size());
//将最后三张牌给地主
players.get(index).getCards().addAll(last);
//显示
show();
}
/**
* 显示发牌结果
*/
public void show(){
//排序
Collections.sort(players.get(0).getCards());
Collections.sort(players.get(1).getCards());
Collections.sort(players.get(2).getCards());
players.stream().forEach(p->System.out.println(p));
start();
}
public void start(){
System.out.println("***********欢乐斗地主***********");
System.out.println("***********【1】洗牌***********");
System.out.println("***********【2】发牌***********");
Scanner sc = new Scanner(System.in);
String i = sc.nextLine();
if(!i.matches("^\\d{1}$")){
System.out.println("请输入正确的指令!");
start();
return;
}
switch(i){
case "1":
shuffle();
break;
case "2":
sendCards();
break;
default:
System.out.println("指令不正确");
start();
break;
}
}
public static void main(String[] args) {
new PokerGame().start();
}
}
来源:https://blog.csdn.net/TeaLeafEgg/article/details/81274433
0
投稿
猜你喜欢
- 在上篇文章给大家介绍了Mybatis中#{}和${}传参的区别及#和$的区别小结,如果大家有需要可以参考下。$和#简单说明:#相当于对数据
- 前言最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经
- 前言目前正在做的项目,为了增加用户的体验度,准备增加一些动画效果,其中底部栏中间按钮的点击事件参考了闲鱼的动效,便在此基础上仿写了该动效,并
- 一、前言Redis是一个NoSQL(非关系型数据库)数据库之一,key-value存储系统或者说是一个缓存键值对数据库,具有如下特性:基于内
- 前言Spring框架的 validator 组件,是个辅助组件,在进行数据的完整性和有效性非常有用,通过定义一个某个验证器,即可在其它需要的
- 类加载子系统classLoader 只负责对字节码文件的加载,至于是否可以运行,还要看执行引擎。加载的类信息存放于方法区的内存空间,除了类信
- C#串口模块的使用。使用VS .net框架下WinForm程序应用开发。C#开发的串口通信小工具。相比于QT添加的串口类,WinForm是通
- 把spring-boot项目按照平常的web项目一样发布到tomcat容器下一、修改打包形式在pom.xml里设置 <packagin
- Spring Data JPA映射自定义实体类这个问题困扰了我2天=-=,好像也能使用 jpql解决先说下自己的功能:查询oracle最近s
- 本文实例总结了Java编程实现生成给定范围内不重复随机数的方法。分享给大家供大家参考,具体如下:在Java中的Math类中存在一个rando
- 一、概述1、事务ACID特性事务将一系列的工作视为一个工作单元,它具有 ACID 特性:A:Atomicity 不可分性 也就是说
- CAS 的基本概念CAS(Compare-and-Swap)是一种多线程并发编程中常用的原子操作,用于实现多线程间的同步和互斥访问。 它操作
- Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,
- 项目里用到@within时,出现了一些问题,使用@target就可以解决,但又会出现一些新的问题,因此本文探讨了在spring中,使用@wi
- 软引用简介软引用是用来表示某个引用会被GC(垃圾处理器)收集的类。当有引用指向某个obj的时候,通常发生GC的时候不会把这个对象处理掉,但是
- 这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起
- Android Bitmap和Drawable的对比Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB5
- 常见Bean后处理器的作用:public static void main(String[] args) { &
- ActiveMQ是Apache的一个开源项目,它是一个功能强劲的开源消息总线,也是一个中间件产品,它是JMS的一个实现。在介绍ActiveM
- 水印种类及功能介绍 PDF水印分为两种:文本水印和图片水印。文本水印一般被用在商业领域,提醒读者该文档是受版权保护的,其他人不能抄