欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实现斗地主的发牌功能

程序员文章站 2022-06-27 15:01:11
斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。首先,斗地主要求有扑克和玩...

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

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

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

结果如下:

Java实现斗地主的发牌功能

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