模拟斗地主发牌功能的设计与实现
模拟斗地主发牌功能的设计与实现
参考斗地主的游戏规则,完成一个发牌的功能(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);}}
}
模拟斗地主发牌功能的设计与实现相关推荐
- python斗地主出牌算法_python模拟斗地主发牌
本文实例为大家分享了python模拟斗地主发牌的具体代码,供大家参考,具体内容如下 题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作 ...
- python 斗地主发牌_tkinter模拟斗地主发牌
在上一篇文章的最后,我们留了一个小作业:花果山美男子:tkinter模拟扑克牌和狼人杀发牌zhuanlan.zhihu.com 小作业2:模拟斗地主发牌,上方是牌库,实现从牌库到三个方向的动态发牌, ...
- java斗地主发牌代码_java代码实现斗地主发牌功能
本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下 实现斗地主发牌功能 共54张牌,地主比其他两名玩家多三张牌. 有一个card牌类和player玩家类,还有一个发牌类 ...
- python实现单机斗地主_python模拟斗地主发牌
本文实例为大家分享了python模拟斗地主发牌的具体代码,供大家参考,具体内容如下 题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作 ...
- java斗地主代码_java代码实现斗地主发牌功能
本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下 实现斗地主发牌功能 共54张牌,地主比其他两名玩家多三张牌. 有一个card牌类和player玩家类,还有一个发牌类 ...
- java小程序扑克牌_用Java来写一个模拟斗地主发牌的小程序
一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. ...
- Python3模拟斗地主发牌
模拟斗地主发牌,牌共54张, 花色:黑桃('\u2660'),梅花('\u2663'),方块('\u2665'),红桃('\u2666'),种类为:A2-10JQK,大小王(X, x) 三个人,每个人 ...
- 模拟斗地主发牌过程 C++
遇到一个模拟斗地主发牌过程的编程题,在这里记录一下,供大家参考. 首先,斗地主有三个玩家,一共54张扑克牌,玩家抽完牌后剩余3张底牌.题目要求将54张牌发给三个玩家,并给每个玩家手中的扑克牌进行排序. ...
- 斗地主发牌Java课程设计
课程设计 斗地主发牌 运行效果 斗地主发牌 Java课程设计 Player类 public class Player {// 玩家姓名private String name1;private Stri ...
最新文章
- 上拉加载下拉刷新了解下
- 开源服务专题之------ssh防止暴力破解及fail2ban的使用方法
- Java读取、创建xml(通过dom方式)
- 常州大学阿里云大数据学院举行“创新思维”课程答辩
- Android高级开发面试题目,再也不用担心不能升职加薪了。
- r语言adf检验结果怎么看_从AR模型到VAR模型——R语言实现
- java io 高级,JavaSE - [10] 高级部分之IO流
- 两台电脑怎么互传文件?用它就能搞定!
- 六年级上册计算机教材分析,人教版六年级上册数学教材分析
- 测量运放的输入偏置电流 - 实验准备
- Win10计算机默认排序,win10系统文件夹自动排列怎么取消?win10文件夹不自动排列设置方法...
- HDU - 5510 Bazinga
- 蓝牙的文件传输服务器,文件传输速度大比拼:Wi-Fi完爆蓝牙
- arm mali 天梯图_最全处理器排名:2017年处理器天梯图
- word 如何删除边框黑线
- java老师实例_java实例关于继承求实例,有关学生和老师的程序代码!望诸位软件达人帮忙,谢谢大虾!...
- GitLab官网安全更新(2022-06-30)
- word交叉引用的理解
- 线性代数考研笔记(四)
- 在推广中竞价排名是什么?