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


猜你喜欢
- 在Android中因为不同像素手机的多样化,对于一张图片,放大不同的手机上因像素不同显示上也会有区别。现有如下需求:将一张图片宽度充满整个屏
- 相信很多朋友在使用Android studio开发中,遇到过如何引入第三方so文件的问题,然而第三方官方仅仅给出了ADT环境下的集成方式。A
- 在项目中经常要用到将字符串解析成Locale,但是没有一个比较好用的类。java本身提供了3个构造函数,但是实际使用过程中,需要自己解析,比
- 1、Redis 怎么保证高可用、有哪些集群模式主从复制、哨兵模式、集群模式。2、主从复制在当前最新的 Redis 6.0 中,主从复制的完整
- 将map集合存数据与取出数据全部放在一个类MapTest中,方便阅读与查看随便创建一个包,在包中新建一个class文件,(也可以不建包,直接
- Apache的POI项目可以用来处理MS Office文档,codeplex上还有一个它的.net版本。POI项目可创建和维护操作各种基于O
- 最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在a
- 1.Java Io流的概念,分类,类图。1.1 Java Io流的概念java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操
- 最近因为项目需要,自己实现了个可以自由移动,并且长按可以跳出一个控制播放的,大的悬浮窗。好,开始吧。首先我们先聊权限,悬浮窗需要在manif
- GitHub有一个开源控件PickerView,可以实现 * 联动的效果。虽然该控件使用非常简单,但是填充数据异常繁琐。GitHub上的Dem
- 本文实例讲述了使用SAX来解析XML。通常来说在Android里面可以使用SAX和DOM,DOM需要把整个XML文件读入内存再解析,比较消耗
- 前言这篇博客介绍Java环境的配置,主要是安装JDK,以及path、JAVA_hOME、CLASSPAT的配置,还会介绍配置这些的原因。一.
- 前言之前采取项目中嵌套html页面,实现基本的登录校验、权限校验、登出操作、记住我等功能试下。但是,现在的开发基本都是前后分离样式,后端并不
- 在平时的开发过程中,会有很多场景需要实时监听文件的变化,如下:1、通过实时监控 mysql 的 binlog 日志实现数据同步2、修改配置文
- package com.cooly;import java.util.LinkedList;/*** @author coolyqq*模拟打
- 本文为大家分享了Android实现水波纹效果展示的具体代码,供大家参考,具体内容如下一、效果二、实现原理自定义view,使用Path和贝塞尔
- 最近准备整理一套关于UI效果的文章,算是对这段时间的一个总结,主要讲Android开发中的UI效果设计模块。初步分为一下几个篇幅:Andro
- 1.类的6个默认成员函数默认成员函数:用户没有显示实现,编译器会生成的成员函数称为默认成员函数。如果一个类中什么成员都没有,简称为空类。但空
- 本文实例讲述了C#冒泡法排序算法。分享给大家供大家参考。具体实现方法如下:static void BubbleSort(IComparabl
- Unity脚本中枚举类型在inspector面板中文显示,供大家参考,具体内容如下效果:工具脚本:ChineseEnumTool.csusi