java简单实现斗地主发牌功能

 更新时间:2021年06月29日 15:56:34   作者:qq_35937045  
这篇文章主要为大家详细介绍了java简单实现斗地主发牌功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java简单实现斗地主发牌的具体代码,供大家参考,具体内容如下

问题:

参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色;三名玩家,其中地主比其他玩家多3张牌)
要求实现以下功能:

1、洗牌
2、发牌(发牌按照常规方式A-B-C-A-B-C-A…,不允许一次性随机17张给某个玩家)
3、玩家手中牌的展示(要求按点数实现排序)

分析

运用面向对象的程序设计思维分为扑克、玩家和游戏三部分,扑克类属性有花色,点数,次序;玩家类属性有玩家id,昵称,是否地主,牌的集合;游戏过程分为洗牌,随机产生地主,发牌,完成牌的排序,玩家手里的牌展示功能

程序实现

package com.lesson17.homework;

/**
 * @author HUC
 *
 */

/**扑克类*/
public class Poker {

 /** 扑克花色 */
 private String flower;
 /** 扑克点数 */
 private String pointer;
 /** 扑克顺序 */
 private int sort;

 public Poker(String flower, String pointer, int sort) {
  super();
  this.flower = flower;
  this.pointer = pointer;
  this.sort = sort;
 }

 public String getFlower() {
  return flower;
 }

 public void setFlower(String flower) {
  this.flower = flower;
 }

 public String getPointer() {
  return pointer;
 }

 public void setPointer(String pointer) {
  this.pointer = pointer;
 }

 public int getSort() {
  return sort;
 }

 public void setSort(int sort) {
  this.sort = sort;
 }

 @Override
 public String toString() {
  return flower + pointer;
 }

package com.lesson17.homework;
   
public class Player {

 /** 玩家id */
 private int id;
 /** 玩家昵称 */
 private String name;
 /** 玩家拿到的牌 */
 private ArrayList<Poker> pokers = new ArrayList<>();
 /** 玩家是否地主 */
 private boolean boss;

 public Player(int id, String name) {
  super();
  this.id = id;
  this.name = name;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public ArrayList<Poker> getPokers() {
  return pokers;
 }

 public void setPokers(ArrayList<Poker> pokers) {
  this.pokers = pokers;
 }

 public boolean isBoss() {
  return boss;
 }

 public void setBoss(boolean boss) {
  this.boss = boss;
 }

package com.lesson17.homework;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class PokerGame {

 static List<Player> players;
 static ArrayList<Poker> list = new ArrayList<>();
 static String[] flowers = {"方块","梅花","黑桃","红心"};
 static String[] pointers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
 int bossIndex; //地主索引
 
 static{
  //初始化扑克
  for (int i = 0; i < flowers.length; i++) {
   for (int j = 0; j < pointers.length; j++) {
    //生成一张扑克对象
    Poker p = new Poker(flowers[i], pointers[j], j);
    list.add(p);
   }
  }
  //单独将大小王加入集合
  list.add(new Poker("小", "王", 13));
  list.add(new Poker("大", "王", 14));
  
  //初始化玩家
  players = Arrays.asList(
    new Player(1, "刘备"),
    new Player(2, "关羽"),
    new Player(3, "张飞"));
 }
 
 /**洗牌*/
 public void washPoker(){
  Collections.shuffle(list);
 }
 
 /**随机地主*/
 public void pushBoss(){
  Random r = new Random();
  bossIndex = r.nextInt(players.size());
  //设置被随机到的玩家为地主
  players.get(bossIndex).setBoss(true);
 }
 

 /**依次发牌*/
 public void pushPoker(){
  for (int i = 0; i < 51; i+=3) {
   players.get(0).getPokers().add(list.get(i));
   players.get(1).getPokers().add(list.get(i+1));
   players.get(2).getPokers().add(list.get(i+2));
  }
  for(int i = 51;i < 54 ;i++){
   //将最后剩余的牌(3张)全部给地主
   players.get(bossIndex).getPokers().add(list.get(i));
  }
 }
 
 /**排序*/
 public void sortPoker() {
  Collections.sort(players.get(0).getPokers(), (a,b)->a.getSort()-b.getSort());
  Collections.sort(players.get(1).getPokers(), (a,b)->a.getSort()-b.getSort());
  Collections.sort(players.get(2).getPokers(), (a,b)->a.getSort()-b.getSort());
 }
 
 public void start(){
  //随机地主
  pushBoss();
  //洗牌
  washPoker();
  //发牌
  pushPoker();
  //排序
  sortPoker();
  //展示牌
  for(Player p : players){
   System.out.println(p.getPokers());
  }
 }
 
 public static void main(String[] args) {
  new PokerGame().start();
 }
}

结果

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

相关文章

  • SpringMVC的处理器拦截器HandlerInterceptor详解

    SpringMVC的处理器拦截器HandlerInterceptor详解

    这篇文章主要介绍了SpringMVC的处理器拦截器HandlerInterceptor详解,SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理,需要的朋友可以参考下
    2024-01-01
  • JAVA使用hutool工具实现查询树结构数据(省市区)

    JAVA使用hutool工具实现查询树结构数据(省市区)

    今天通过本文给大家分享JAVA使用hutool工具实现查询树结构数据(省市区),代码分为表结构和数据结构,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • Java实现接月饼小游戏的示例代码

    Java实现接月饼小游戏的示例代码

    本文将用Java语言自制一个小游戏:《接月饼小游戏》,游戏规则为不要被月亮砸到,尽可能地多接月饼。文中的实现代码讲解清晰,感兴趣的可以动手试一试
    2022-02-02
  • Spring Aop+Redis实现优雅记录接口调用情况

    Spring Aop+Redis实现优雅记录接口调用情况

    通常情况下,开发完一个接口,无论是在测试阶段还是生产上线,我们都需要对接口的执行情况做一个监控,所以本文为大家整理了Spring统计接口调用的多种方法,希望对大家有所帮助
    2023-06-06
  • Spring Boot Jwts Token生成方法示例

    Spring Boot Jwts Token生成方法示例

    这篇文章主要为大家介绍了Spring Boot Jwts Token生成方法示例,非适合java初学者,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Zookeeper如何实现分布式服务配置中心详解

    Zookeeper如何实现分布式服务配置中心详解

    Zookeeper在实际使用场景很多,比如配置中心,分布式锁,注册中心等,下面这篇文章主要给大家介绍了关于Zookeeper如何实现分布式服务配置中心的相关资料,需要的朋友可以参考下
    2021-11-11
  • Java lastIndexOf类使用方法原理解析

    Java lastIndexOf类使用方法原理解析

    这篇文章主要介绍了Java lastIndexOf类使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • request.getRequestURL()等方法得到路径的区别及说明

    request.getRequestURL()等方法得到路径的区别及说明

    这篇文章主要介绍了request.getRequestURL()等方法得到路径的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Spring Boot定制type Formatters实例详解

    Spring Boot定制type Formatters实例详解

    在本篇文章里小编给大家整理的是关于Spring Boot定制type Formatters实例知识点,需要的朋友们学习下。
    2019-11-11
  • Java实现给图片添加图片水印,文字水印及马赛克的方法示例

    Java实现给图片添加图片水印,文字水印及马赛克的方法示例

    这篇文章主要介绍了Java实现给图片添加图片水印,文字水印及马赛克的方法,涉及java针对图片的读取、水印添加、马赛克设置等相关操作技巧,需要的朋友可以参考下
    2018-01-01

最新评论