模拟斗地主发牌功能的设计与实现

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

牌类

牌有牌面值、花色及实际大小三个属性

import java.util.Objects;public class Card {private String name;//牌面值private String flower;//花色private int num;//大小点数public Card() {super();}public Card(String name, String flower, int num) {super();this.name = name;this.flower = flower;this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getFlower() {return flower;}public void setFlower(String flower) {this.flower = flower;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}@Overridepublic String toString() {if (Objects.nonNull(flower)) {return flower + name + "-" + num + "点";}return name + "-" + num + "点";}
}

玩家类

玩家有编号、姓名、是否是地主、手中牌集合四个属性

import java.util.ArrayList;public class Player {private int id;private String name;private boolean boss;private ArrayList<Card> cards = new ArrayList<>();public Player() {super();}public Player(int id, String name, boolean boss, ArrayList<Card> cards) {super();this.id = id;this.name = name;this.boss = boss;this.cards = cards;}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 boolean isBoss() {return boss;}public void setBoss(boolean boss) {this.boss = boss;}public ArrayList<Card> getCards() {return cards;}public void setCards(ArrayList<Card> cards) {this.cards = cards;}@Overridepublic String toString() {return name + (boss ? "(地主)" : "(农民)") + "--牌:" + cards;}
}

游戏类

实现一副扑克牌(54张),并实现随机一位地主和根据玩家角色分发牌的功能。
1、定义牌集合(动态数组)、牌面值集合(不含大小王)、牌花色集合、玩家集合(动态数组)、随机数生成器
2、用笛卡尔积组合牌面值和花色得到52张牌,添加进牌集合,再添加大小王
3、创建三名玩家对象并添加进玩家集合
4、在玩家集合中根据动态数组下标随机一位地主
5、遍历玩家集合得到三位玩家,每位玩家在牌集合里随机抽取17次,每抽取一张,牌数组删除一张,玩家牌集合添加一张,最后剩下三张加入地主的牌集合,完成发牌

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class GameManage {/**牌集合*/private static ArrayList<Card> all = new ArrayList<>();/**牌面值集合*/private static String[] names = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2", "Queen","King" };/**花色集合*/private static String[] flowers = { "黑桃", "红桃", "梅花", "方块" };/**玩家集合*/private ArrayList<Player> players = new ArrayList<>();/**随机数生成器*/private static Random randomGen = new Random();static {int i = 0;for (; i < names.length - 2; i++) {for (int j = 0; j < flowers.length; j++) {Card c = new Card(names[i],flowers[j],i);all.add(c);}}all.add(new Card(names[names.length - 2],null,i++));all.add(new Card(names[names.length - 1],null,i++));for (Card card : all) {System.out.println(card);}System.out.println("=========================");}/*** 添加玩家*/public void addPlayer(){Scanner sc = new Scanner(System.in);System.out.println("请输入玩家1名称:");String name1 = sc.nextLine();System.out.println("请输入玩家2名称:");String name2 = sc.nextLine();System.out.println("请输入玩家3名称:");String name3 = sc.nextLine();Player p1 = new Player();p1.setId(1);p1.setName(name1);Player p2 = new Player();p2.setId(2);p2.setName(name2);Player p3 = new Player();p3.setId(3);p3.setName(name3);players.add(p1);players.add(p2);players.add(p3);}/*** 随机地主*/public void randomBoss(){addPlayer();int i = randomGen.nextInt(players.size());players.get(i).setBoss(true);}/*** 发牌* @return */public ArrayList<Player> sendCard(){randomBoss();for (Player p : players) {for (int i = 0; i < 17; i++) {int cardIndex = randomGen.nextInt(all.size());Card card = all.get(cardIndex);p.getCards().add(card);all.remove(card);}}for (Player p : players) {if (p.isBoss()) {            p.getCards().addAll(all);}}return players;}public static void main(String[] args) {ArrayList<Player> playerss = new GameManage().sendCard();for (Player p : playerss) {System.out.println(p);}}
}

模拟斗地主发牌功能的设计与实现相关推荐

  1. python斗地主出牌算法_python模拟斗地主发牌

    本文实例为大家分享了python模拟斗地主发牌的具体代码,供大家参考,具体内容如下 题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作 ...

  2. python 斗地主发牌_tkinter模拟斗地主发牌

    在上一篇文章的最后,我们留了一个小作业:花果山美男子:tkinter模拟扑克牌和狼人杀发牌​zhuanlan.zhihu.com 小作业2:模拟斗地主发牌,上方是牌库,实现从牌库到三个方向的动态发牌, ...

  3. java斗地主发牌代码_java代码实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下 实现斗地主发牌功能 共54张牌,地主比其他两名玩家多三张牌. 有一个card牌类和player玩家类,还有一个发牌类 ...

  4. python实现单机斗地主_python模拟斗地主发牌

    本文实例为大家分享了python模拟斗地主发牌的具体代码,供大家参考,具体内容如下 题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作 ...

  5. java斗地主代码_java代码实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下 实现斗地主发牌功能 共54张牌,地主比其他两名玩家多三张牌. 有一个card牌类和player玩家类,还有一个发牌类 ...

  6. java小程序扑克牌_用Java来写一个模拟斗地主发牌的小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. ...

  7. Python3模拟斗地主发牌

    模拟斗地主发牌,牌共54张, 花色:黑桃('\u2660'),梅花('\u2663'),方块('\u2665'),红桃('\u2666'),种类为:A2-10JQK,大小王(X, x) 三个人,每个人 ...

  8. 模拟斗地主发牌过程 C++

    遇到一个模拟斗地主发牌过程的编程题,在这里记录一下,供大家参考. 首先,斗地主有三个玩家,一共54张扑克牌,玩家抽完牌后剩余3张底牌.题目要求将54张牌发给三个玩家,并给每个玩家手中的扑克牌进行排序. ...

  9. 斗地主发牌Java课程设计

    课程设计 斗地主发牌 运行效果 斗地主发牌 Java课程设计 Player类 public class Player {// 玩家姓名private String name1;private Stri ...

最新文章

  1. 上拉加载下拉刷新了解下
  2. 开源服务专题之------ssh防止暴力破解及fail2ban的使用方法
  3. Java读取、创建xml(通过dom方式)
  4. 常州大学阿里云大数据学院举行“创新思维”课程答辩
  5. Android高级开发面试题目,再也不用担心不能升职加薪了。
  6. r语言adf检验结果怎么看_从AR模型到VAR模型——R语言实现
  7. java io 高级,JavaSE - [10] 高级部分之IO流
  8. 两台电脑怎么互传文件?用它就能搞定!
  9. 六年级上册计算机教材分析,人教版六年级上册数学教材分析
  10. 测量运放的输入偏置电流 - 实验准备
  11. Win10计算机默认排序,win10系统文件夹自动排列怎么取消?win10文件夹不自动排列设置方法...
  12. HDU - 5510 Bazinga
  13. 蓝牙的文件传输服务器,文件传输速度大比拼:Wi-Fi完爆蓝牙
  14. arm mali 天梯图_最全处理器排名:2017年处理器天梯图
  15. word 如何删除边框黑线
  16. java老师实例_java实例关于继承求实例,有关学生和老师的程序代码!望诸位软件达人帮忙,谢谢大虾!...
  17. GitLab官网安全更新(2022-06-30)
  18. word交叉引用的理解
  19. 线性代数考研笔记(四)
  20. 在推广中竞价排名是什么?

热门文章

  1. c语言sht 和ch,普通话指导:z、c、s和zh、ch、sh的分辨
  2. 自动添加控件,一次提交多条记录。
  3. 项目整体管理:制定项目章程--启动过程组
  4. 20220729 证券、金融
  5. 巧妙复制网页中的文本——复制网页上不能复制的文字
  6. 化工厂人员定位系统--化工厂定位--新导智能
  7. 【ps】裁剪图片的某一块
  8. 一起卷吧,arduino/mixly语音识别模块,10元,可以自定义,提供自制的mixly库
  9. 为什么电脑计算机里没有桌面,为什么电脑开机后桌面上什么都没有?
  10. python ip动态代理_动态代理服务器