Java實(shí)現(xiàn)斗地主的發(fā)牌功能
斗地主是全國(guó)范圍內(nèi)的一種桌面游戲,盡管全國(guó)各種類(lèi)型,但大同小異,今天我們先來(lái)實(shí)現(xiàn)一下斗地主中的發(fā)牌功能,為了程序的可讀性以及可拓展性,此次我們使用面向?qū)ο蟮姆椒▉?lái)實(shí)現(xiàn)此功能。
首先,斗地主要求有撲克和玩家才能開(kāi)始游戲,所以這里我們首先要?jiǎng)?chuàng)建一個(gè)撲克牌實(shí)體類(lèi)和一個(gè)玩家實(shí)體類(lèi),具體代碼如下:
首先是Poker類(lèi),含點(diǎn)數(shù),花色和排序?qū)傩裕笮⊥踔箢~外添加,這里我們必須實(shí)現(xiàn)一個(gè)Comparable接口,方便之后進(jìn)行排序:
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類(lèi),這里我們定義屬性有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; }}
實(shí)體類(lèi)建完之后,我們就要開(kāi)始實(shí)現(xiàn)功能了,首先我們將要實(shí)現(xiàn)的功能簡(jiǎn)單敘述一下,首先我們要求有一副54張的完整牌,然后洗牌(此處我們用Collections里的靜態(tài)shuffle方法實(shí)現(xiàn)),然后開(kāi)始按洗好的牌發(fā)牌51張,發(fā)完隨機(jī)地主,將剩余的三張牌給地主,并將三名玩家的牌均按大小顯示出來(lái)。
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.Random;public class PokerGame { /**定義為靜態(tài)以簡(jiǎn)化代碼量*/ 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,'馬濤') ); } /**隨機(jī)地主*/ public void pushBoss(){ /**隨機(jī)一個(gè)索引,隨到的為地主*/ Random r = new Random(); bossIndex = r.nextInt(players.size()); players.get(bossIndex).setBoss(true); } /**洗牌功能*/ public void XiPai(){ /**用Collections中的一個(gè)靜態(tài)方法實(shí)現(xiàn)隨機(jī)順序集合*/ Collections.shuffle(list); } /**發(fā)牌功能*/ public void FaPai(){ /**每次按順序給每人發(fā)一張牌直到51張牌發(fā)完*/ 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)); } /**將剩余的三張牌發(fā)給地主*/ for(int j = 51;j < 54;j++){ players.get(bossIndex).getPokers().add(list.get(j)); } } /**排序功能*/ public void PaiXu(){ /**用Collections的sort方法實(shí)現(xiàn)排序功能*/ Collections.sort(players.get(0).getPokers()); Collections.sort(players.get(1).getPokers()); Collections.sort(players.get(2).getPokers()); } /**開(kāi)始游戲*/ public void start(){ pushBoss(); XiPai(); FaPai(); PaiXu(); for(Player p:players){ System.out.println(p.getPokers()); } }}
下面我們來(lái)看看具體實(shí)現(xiàn):
public class Test { public static void main(String[] args) { new PokerGame().start(); } }
結(jié)果如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. moment轉(zhuǎn)化時(shí)間戳出現(xiàn)Invalid Date的問(wèn)題及解決2. python爬蟲(chóng)實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊3. 使用JSP技術(shù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的在線測(cè)試系統(tǒng)的實(shí)例詳解4. asp批量添加修改刪除操作示例代碼5. 開(kāi)發(fā)效率翻倍的Web API使用技巧6. HTML 絕對(duì)路徑與相對(duì)路徑概念詳細(xì)7. 解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問(wèn)題8. ajax請(qǐng)求后臺(tái)得到j(luò)son數(shù)據(jù)后動(dòng)態(tài)生成樹(shù)形下拉框的方法9. .NET6打包部署到Windows Service的全過(guò)程10. WML的簡(jiǎn)單例子及編輯、測(cè)試方法第1/2頁(yè)
