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();
 }
 
}

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

相关文章

  • Spring Security跳转页面失败问题解决

    Spring Security跳转页面失败问题解决

    这篇文章主要介绍了Spring Security跳转页面失败问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 详解lombok @Getter @Setter 使用注意事项

    详解lombok @Getter @Setter 使用注意事项

    这篇文章主要介绍了详解lombok @Getter @Setter 使用注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 解决springboot中mongodb不启动及Dao不能被扫描到的问题

    解决springboot中mongodb不启动及Dao不能被扫描到的问题

    这篇文章主要介绍了解决springboot中mongodb不启动及Dao不能被扫描到的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java 入门图形用户界面设计之复选框

    Java 入门图形用户界面设计之复选框

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的复选框
    2022-02-02
  • SpringBoot+WebSocket实现IM及时通讯的代码示例

    SpringBoot+WebSocket实现IM及时通讯的代码示例

    项目中碰到需要及时通讯的场景,使用springboot集成websocket,即可实现简单的及时通讯,本文介绍springboot如何集成websocket、IM及时通讯需要哪些模块、开发和部署过程中遇到的问题、以及实现小型IM及时通讯的代码,需要的朋友可以参考下
    2023-10-10
  • Java Web项目中使用Socket通信多线程、长连接的方法

    Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听。接下来通过本文给大家介绍Java Web项目中使用Socket通信多线程、长连接的方法,感兴趣的朋友一起学习
    2016-04-04
  • 详解SpringBoot之集成Spring AOP

    详解SpringBoot之集成Spring AOP

    本篇文章主要介绍了详解SpringBoot之集成Spring AOP,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • JAVA 继承基本类、抽象类、接口介绍

    JAVA 继承基本类、抽象类、接口介绍

    Java是一个面向对象的语言,java面向对象一般有三大特征:封装、继承、多态
    2013-01-01
  • SpringBoot依赖管理的源码解析

    SpringBoot依赖管理的源码解析

    这篇文章主要介绍了SpringBoot依赖管理的源码解析,maven提供了一套依赖管理机制,通过在pom.xml定义坐标,通过坐标从互联网的中央仓库下载依赖的构件(jar包),规范去管理依赖所有构件,这就叫依赖管理,需要的朋友可以参考下
    2023-04-04
  • java  HashMap和HashTable的区别详解

    java HashMap和HashTable的区别详解

    这篇文章主要介绍了java HashMap和HashTable的区别详解的相关资料,需要的朋友可以参考下
    2016-12-12

最新评论