文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java实现斗地主的发牌功能

2024-04-02 19:55

关注

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

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

首先是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.shuffle(list);
 }
 
 
 public void FaPai(){
  
  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(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();
 }
 
}

结果如下:

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯