广告位联系
返回顶部
分享到

Java实现斗地主的发牌功能

java 来源:转载 作者:秩名 发布时间:2021-06-29 18:35:47 人浏览
摘要

斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。 首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建

斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。

首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建一个扑克牌实体类和一个玩家实体类,具体代码如下:

 

首先是Poker类,含点数,花色和排序属性,大小王之后额外添加,这里我们必须实现一个Comparable接口,方便之后进行排序:

public class Poker implements Comparable<Poker>{

 private String flower;
 private String pointer;
 private int sort;
 
 public Poker() {

 }

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

 @Override
 public int compareTo(Poker a) {
  return this.getSort() - a.getSort();
 }
 
}

然后就是Player类,这里我们定义属性有id,玩家名字以及玩家手牌和是否地主:

import java.util.ArrayList;

public class Player {

 private int id;
 private String name;
 private ArrayList<Poker> pokers = new ArrayList<>();
 private boolean boss;
 public Player() {

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

}

实体类建完之后,我们就要开始实现功能了,首先我们将要实现的功能简单叙述一下,首先我们要求有一副54张的完整牌,然后洗牌(此处我们用Collections里的静态shuffle方法实现),然后开始按洗好的牌发牌51张,发完随机地主,将剩余的三张牌给地主,并将三名玩家的牌均按大小显示出来。

 

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 pushBoss(){
  /**随机一个索引,随到的为地主*/
  Random r = new Random();
  bossIndex = r.nextInt(players.size());
  players.get(bossIndex).setBoss(true);
 }
 
 /**洗牌功能*/
 public void XiPai(){
  /**用Collections中的一个静态方法实现随机顺序集合*/
  Collections.shuffle(list);
 }
 
 /**发牌功能*/
 public void FaPai(){
  /**每次按顺序给每人发一张牌直到51张牌发完*/
  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 j = 51;j < 54;j++){
   players.get(bossIndex).getPokers().add(list.get(j));
  }
 }
 
 /**排序功能*/
 public void PaiXu(){
  /**用Collections的sort方法实现排序功能*/
  Collections.sort(players.get(0).getPokers());
  Collections.sort(players.get(1).getPokers());
  Collections.sort(players.get(2).getPokers());
 }
 
 /**开始游戏*/
 public void start(){
  pushBoss();
  XiPai();
  FaPai();
  PaiXu();
  for(Player p:players){
   System.out.println(p.getPokers());
  }
 }
}

下面我们来看看具体实现:

public class Test {

 public static void main(String[] args) {
  new PokerGame().start();
 }
 
}

结果如下:


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/weixin_45416065/article/details/97431378
相关文章
  • SpringBoot自定义错误处理逻辑介绍

    SpringBoot自定义错误处理逻辑介绍
    1. 自定义错误页面 将自定义错误页面放在 templates 的 error 文件夹下,SpringBoot 精确匹配错误信息,使用 4xx.html 或者 5xx.html 页面可以打印错误
  • Java实现手写一个线程池的代码

    Java实现手写一个线程池的代码
    线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和
  • Java实现断点续传功能的代码

    Java实现断点续传功能的代码
    题目实现:网络资源的断点续传功能。 二、解题思路 获取要下载的资源网址 显示网络资源的大小 上次读取到的字节位置以及未读取的字节
  • 你可知HashMap为什么是线程不安全的
    HashMap 的线程不安全 HashMap 的线程不安全主要体现在下面两个方面 在 jdk 1.7 中,当并发执行扩容操作时会造成环形链和数据丢失的情况 在
  • ArrayList的动态扩容机制的介绍

    ArrayList的动态扩容机制的介绍
    对于 ArrayList 的动态扩容机制想必大家都听说过,之前的文章中也谈到过,不过由于时间久远,早已忘却。 所以利用这篇文章做做笔记,加
  • JVM基础之字节码的增强技术介绍

    JVM基础之字节码的增强技术介绍
    字节码增强技术 在上文中,着重介绍了字节码的结构,这为我们了解字节码增强技术的实现打下了基础。字节码增强技术就是一类对现有字
  • Java中的字节码增强技术

    Java中的字节码增强技术
    1.字节码增强技术 字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术。 参考地址 2.常见技术 技术分类 类
  • Redis BloomFilter布隆过滤器原理与实现

    Redis BloomFilter布隆过滤器原理与实现
    Bloom Filter 概念 布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射
  • Java C++算法题解leetcode801使序列递增的最小交换次

    Java C++算法题解leetcode801使序列递增的最小交换次
    题目要求 思路:状态机DP 实现一:状态机 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public int minSwap(int[] nums1, int[] nums2) { int n
  • Mybatis结果集映射与生命周期介绍

    Mybatis结果集映射与生命周期介绍
    一、ResultMap结果集映射 1、设计思想 对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了 2、resultMap的应用场
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计