用java實(shí)現(xiàn)斗地主發(fā)牌過(guò)程
本文實(shí)例為大家分享了java實(shí)現(xiàn)斗地主發(fā)牌過(guò)程的具體代碼,供大家參考,具體內(nèi)容如下
一、牌類(lèi)實(shí)現(xiàn)
定義牌的相關(guān)屬性,點(diǎn)數(shù)、花色、大小
package com.softeem.lesson18.doudizhu;
import java.util.Objects;
public class Card {
//牌面值
private String name;
//花色
private String flower;
//點(diǎn)數(shù)
private int num;
public Card() {
// TODO Auto-generated constructor stub
}
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;
}
@Override
public String toString() {
if(Objects.nonNull(flower)) {
return name+"-"+num+"-"+flower;
}
return name+"-"+num;
}
}
二、玩家類(lèi)
玩家類(lèi)中定義了萬(wàn)家的相關(guān)屬性,名字,ID,還定義了一個(gè)牌類(lèi)數(shù)組,將每位玩家的牌加入到數(shù)組中。
package com.softeem.lesson18.doudizhu;
import java.util.ArrayList;
public class Player {
private int id;
private String name;
private boolean boss;
private ArrayList<Card> cards = new ArrayList<>();
public Player() {
}
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;
}
@Override
public String toString() {
return name+(boss?"(地主)" : "") + cards;
}
}
三、功能類(lèi)
功能類(lèi)中實(shí)現(xiàn)了牌的分發(fā),每人17張牌,然后地主多三張牌的實(shí)現(xiàn),以及對(duì)玩家進(jìn)行隨機(jī)分配地主等功能。
package com.softeem.lesson18.doudizhu;
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<Player>();
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++));
}
public void addPlayer() {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入第一個(gè)玩家的名字:");
String name1 = sc.nextLine();
System.out.println("請(qǐng)輸入第二個(gè)玩家的名字:");
String name2 = sc.nextLine();
System.out.println("請(qǐng)輸入第三個(gè)玩家的名字:");
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();
//隨機(jī)地址索引
int i = randomGen.nextInt(players.size());
players.get(i).setBoss(true);
}
public void sendCard() {
randomBoss();
//對(duì)玩家遍歷
for(Player p : players) {
//先為每一位玩家隨機(jī)發(fā)17張牌
for(int i = 0;i <17;i++) {
int cardIndex = randomGen.nextInt(all.size());
Card card = all.get(cardIndex);
//將牌加入到玩家的牌容器中
p.getCards().add(card);
//從牌組中移除已經(jīng)發(fā)出去的牌
all.remove(card);
}
}
//最后三張牌給地主
for(Player p : players) {
if(p.isBoss()) {
p.getCards().addAll(all);
}
}
for(Player p : players) {
System.out.println(p);
}
}
public static void main(String[] args) {
new GameManage().sendCard();
}
}
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專(zhuān)題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java開(kāi)發(fā)RocketMQ之NameServer路由管理源碼分析
這篇文章主要為大家介紹了java開(kāi)發(fā)中RocketMQ之NameServer路由管理源碼分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11
Mybatis Plus select 實(shí)現(xiàn)只查詢(xún)部分字段
這篇文章主要介紹了Mybatis Plus select 實(shí)現(xiàn)只查詢(xún)部分字段的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java連接Linux服務(wù)器過(guò)程分析(附代碼)
這篇文章主要介紹了Java連接Linux服務(wù)器過(guò)程分析(附代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
SpringBoot調(diào)用Poi-tl實(shí)現(xiàn)渲染數(shù)據(jù)并生成Word文檔
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何調(diào)用Poi-tl實(shí)現(xiàn)渲染數(shù)據(jù)并生成Word文檔,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下2023-09-09
淺談java字符串比較到底應(yīng)該用==還是equals
這篇文章主要介紹了淺談java字符串比較到底應(yīng)該用==還是equals,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Java Web開(kāi)發(fā)中過(guò)濾器和監(jiān)聽(tīng)器使用詳解
這篇文章主要為大家詳細(xì)介紹了Java中的過(guò)濾器Filter和監(jiān)聽(tīng)器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-10-10
Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制的示例代碼
這篇文章主要介紹了Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制,本文通過(guò)示例代碼重點(diǎn)看一下統(tǒng)一認(rèn)證中心和業(yè)務(wù)網(wǎng)關(guān)的建設(shè),需要的朋友可以參考下2022-03-03
SpringBoot整合MD5加密完成注冊(cè)和登錄方式
MD5(MessageDigestAlgorithm5)是一種常見(jiàn)的哈希算法,用于生成固定長(zhǎng)度(128位)的哈希值,主要應(yīng)用于數(shù)據(jù)完整性校驗(yàn)和密碼存儲(chǔ),MD5具有快速計(jì)算、不可逆性和抗碰撞性等特點(diǎn),盡管存在碰撞漏洞,MD5仍廣泛應(yīng)用于文件下載校驗(yàn)和數(shù)字簽名等場(chǎng)景2024-10-10

