java实现斗地主发牌系统

 更新时间:2020年04月22日 14:13:02   作者:翻腾的茶叶蛋  
这篇文章主要为大家详细介绍了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();
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Swagger异常定位纪实Swagger设计问题分析

    Swagger异常定位纪实Swagger设计问题分析

    这篇文章主要为大家介绍了Swagger异常定位纪实Swagger设计的问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • Java中seata框架的XA模式详解

    Java中seata框架的XA模式详解

    这篇文章主要介绍了Java中seata框架的XA模式详解,Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务,Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案,需要的朋友可以参考下
    2023-08-08
  • 浅析java的foreach循环

    浅析java的foreach循环

    foreach语句是java5之后的新特征之一,在循环遍历数组、集合方面更加简洁,有需要的朋友可以参考一下
    2013-12-12
  • hadoop上传文件功能实例代码

    hadoop上传文件功能实例代码

    这篇文章主要介绍了hadoop上传文件功能实例代码,需要的朋友可以参考下
    2017-09-09
  • 深入理解java1.8之supplier

    深入理解java1.8之supplier

    这篇文章主要介绍了深入理解java1.8之supplier,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • SpringBoot2.0.3打印默认数据源为 HikariDataSource (null)问题

    SpringBoot2.0.3打印默认数据源为 HikariDataSource (null)问题

    这篇文章主要介绍了SpringBoot2.0.3打印默认数据源为 HikariDataSource (null)问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java 如何将前端传来的数字转化为日期

    Java 如何将前端传来的数字转化为日期

    这篇文章主要介绍了Java 如何将前端传来的数字转化为日期,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • JFreeChart简单实现光滑曲线绘制

    JFreeChart简单实现光滑曲线绘制

    这篇文章主要为大家详细介绍了JFreeChart简单实现光滑曲线的绘制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • netty服务端辅助类ServerBootstrap创建逻辑分析

    netty服务端辅助类ServerBootstrap创建逻辑分析

    这篇文章主要介绍了netty服务端辅助类ServerBootstrap创建逻辑分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Thread线程的基础知识及常见疑惑点总结

    Thread线程的基础知识及常见疑惑点总结

    在本篇内容里小编给大家分享的是关于Thread线程的基础知识及常见疑惑点,对此有学习需求的朋友们可以学习参考下。
    2019-05-05

最新评论