从零开始写游戏之斗地主-数据结构-CSDN博客

文章浏览阅读461次,点赞5次,收藏9次。最近看游戏直播的过程中,老是看到主播在玩欢乐斗地主。突发奇想,我能不能用Java写一个斗地主的游戏呢?说干就干!Java天下第一(开玩笑的)。

斗地主这个玩法大家都知道A~K各4张,再加上大小王各一张,总共54张牌。有两个阵营:地主和农民,其中两个农民各持有17张牌,地主持有21张牌。根据上面的信息以及平常斗地主时的经历,我们就能先一步构想出斗地主设计的一些数据结构了。

数据结构

扑克牌-Poker

我们都知道一张扑克牌有着两种属性:大小以及花色。当然了,大小王肯定是排除在外滴。所以自然而然就能写出扑克牌对应的类了。扑克牌大小以及花色都能用一个枚举来声明:

@GetterpublicenumPokerCardEnums{JOKER_BIG(“Big Joker”,17,false),JOKER_SMALL(“Small Joker”,16,false),TWO(“2”,15,true),ACE(“A”,14,true),KING(“K”,13,true),QUEEN(“Q”,12,true),JACK(“J”,11,true),TEN(“10”,10,true),NINE(“9”,9,true),EIGHT(“8”,8,true),SEVEN(“7”,7,true),SIX(“6”,6,true),FIVE(“5”,5,true),FOUR(“4”,4,true),THREE(“3”,3,true);privatefinalString name;privatefinalint rank;privatefinalboolean hasSuit;PokerCardEnums(String name,int rank,boolean hasSuit){this.name = name;this.rank = rank;this.hasSuit = hasSuit;}}@GetterpublicenumSuitEnums{/** * 黑桃 */SPADES("♠"),/** * 红桃 */HEARTS("♥"),/** * 梅花 */CLUBS("♣"),/** * 方块 */DIAMONDS("♦");privatefinalString desc;SuitEnums(String desc){this.desc = desc;}}此时就能写出一张扑克牌的数据结构了:

@Data@NoArgsConstructor@AllArgsConstructorpublicclassPoker{privatePokerCardEnums pokerCard;privateSuitEnums suit;@OverridepublicStringtoString(){return(Objects.nonNull(suit)? suit.getDesc():"")+ pokerCard.getName();}}在扑克牌这个类中,也是重写了toString()方法,用于可视化的显示当前是哪一张牌。

牌堆-PokerPile

牌堆,是每一位斗地主玩家当前所持有的牌。那么肯定有个属性来区分当前牌堆的持有人的角色:userType。那么角色我们也可以用一个枚举类来实现:

@GetterpublicenumUserType{FARMER(“农民”),LANDLORD(“地主”);privatefinalString desc;UserType(String desc){this.desc = desc;}}然后得有一个列表来存放当前持有的扑克牌:pokerList。两个重要的元素有了,那么出牌的顺序也需要加上:order

publicclassPokerPile{/** * 当前玩家角色 */privateUserType userType;/** * 当前持有的牌 */privateList<Object> pokerList;/** * 出牌顺序 */privateInteger order;}

出牌记录-PlayingRecord

对于出牌记录来说,只需要简单的记录下这轮次所处的牌以及当前轮次就行了。

publicclassPlayingRecord{/** * 本次所出的牌 */privateList<Poker> usePokerList;/** * 当前的轮次 */privateInteger rounds;}

记牌器-CardRecorder

这个记牌器的数据结构我想了比较久,突然想到一种比较奇技淫巧的方法。那就是一幅扑克牌总是会分配给三位玩家,那么我们只需要将这副牌存起来,然后在玩家出牌的时候,将这一张或这一次所出的扑克牌的状态设置成已经使用,剩下来没有使用的就自然而然能知道了。这个时候,需要把往扑克牌增加一个新的属性use是否已经使用这张扑克牌。此时就能在记牌器中写出获取尚未使用的扑克牌的方法了。

publicclassCardRecorder{/** * 一副扑克牌 */privateList<Poker> pokerList;/** * 返回尚未使用的扑克牌 * * @return 尚未使用的扑克牌 */publicList<Poker>getUnusedPokerList(){return pokerList.stream().filter(poker ->!poker.isUse()).collect(Collectors.toList());}}

总结

现在已经构思好斗地主所涉及的数据结构了,那么下一篇文章就会开始玩法的代码开发了!代码仓库:https://github.com/AzirZsk/FightTheLandlord

  • Xxl-Job定时任务调度失败的排查与解决 3389

  • 一文带你读懂RocketMQ5中定时消息实现原理 1541

  • ChatGPT介绍 1309

  • 新版攻略-如何发布Java代码到中央仓库中 1219

  • 【Java引用规范】强软引用 1028

  • RocketMQ特性详解 3篇

  • Java引用关系 2篇

  • ThreadLocal详解 2篇

  • Java 数据结构 1篇

  • Java底层 3篇

  • Spring Framework 2篇

  • Spring Aop 1篇

  • 深入源码,探究#、$号替换符的区别CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • 深度探索RocketMQ5:定时消息新特性解析【上】qq_41685877: 哥们很棒!

  • 一个开源的工具类轮子是怎么造出来的CSDN-Ada助手: 恭喜作者第20篇博客《一个开源的工具类轮子是怎么造出来的》,阅读了您的分享,深感受益匪浅。持续创作是非常了不起的事情,希望您能坚持下去,继续分享您的见解和经验。或许下一步可以探讨一下如何优化开源工具类轮子的性能,或者分享一些实用的开源工具类轮子的应用场景。期待您更多的精彩内容,谢谢您的分享!

  • Redisson中分布式锁的实现原理CSDN-Ada助手: 恭喜您在博客中分享了Redisson中分布式锁的实现原理,让读者们更加深入地了解了这一领域的知识。希望您能继续坚持创作,分享更多有价值的内容给大家。或许下一步可以探讨一下Redisson在分布式系统中的应用场景,或者是与其他分布式锁实现进行比较分析,为读者提供更全面的视角。期待您更多的精彩文章!愿您在创作道路上不断进步,谢谢您的分享!

  • 深度探索RocketMQ5:定时消息新特性解析【上】CSDN-Ada助手: 恭喜作者发布了第15篇博客,内容深度探索RocketMQ5的定时消息新特性,非常值得学习!希望作者能够继续保持创作的热情和耐心,为大家带来更多有深度的技术分享。下一步建议可以考虑探索RocketMQ5其他新功能或者与其他消息中间件的对比分析,期待作者的更多精彩内容!

  • Netty系列之为什么Netty是网络编程的首选

  • 用好Interceptor,你也能写一个MybatisPlus

  • 深入源码,探究#、$号替换符的区别

2024年20篇2023年1篇2021年4篇2020年2篇- RocketMQ特性详解 3篇

  • Java引用关系 2篇
  • ThreadLocal详解 2篇
  • Java 数据结构 1篇
  • Java底层 3篇
  • Spring Framework 2篇
  • Spring Aop 1篇

FAQ

gg撲克台灣可以玩嗎?

最多美國人在打的撲克APP,Club GG你可不能錯過了! 不論你在台灣、香港、馬來西亞、美國等等地區遊玩,而且不需要下載模擬器,直接下載程式即

台灣可以玩德州撲克嗎?

以往德州撲克在台灣許多人眼裡就是賭博,甚至有許多不好的刻板印象。 但經過多位前輩的努力爭取下,如今德州撲克不僅在台灣是合法的競技比賽,更是國際

線上德州撲克可以賺錢嗎?

投入德州撲克能賺多少錢,要看自己本身有沒有熱忱和付出多少,心態、情緒、撲克資金控管、撲克技術,以及天時、地利、人和等因素都會影響最終獲利。 以

神來也德州撲克要錢嗎?

MyCard娛樂中心» 神來也德州撲克 千萬撲克玩家鬥心機,按一下就入桌! 正宗撲克玩法,免註冊,免費體驗Texas Poker!

撲克牌幾張?

遊戲的目標是最先打完手上全部的牌。 第一位玩家需要打出一至三張牌,背面向上,覆蓋在桌上,並告訴全部玩家所出的是甚麼牌,例如「一張Q」。 出牌的玩

桌遊是賭博嗎?

當你玩的遊戲偶然性質越低、人為影響越高,就越不容易被視為賭博。 如果是一些燒腦的桌遊、象棋等等,大家都是在同一個起跑點,勝負的因素也不靠運氣,

台灣可以玩德州撲克嗎?

以往德州撲克在台灣許多人眼裡就是賭博,甚至有許多不好的刻板印象。 但經過多位前輩的努力爭取下,如今德州撲克不僅在台灣是合法的競技比賽,更是國際

德州撲克1bb是多少錢?

左邊第二位玩家叫做大盲(Big Blind),簡稱【BB】。 在還沒發牌前,小盲位要先支付0.5個大盲注,大盲位要先支付1個大盲注。 起始盲注大小

德州撲克 犯法 嗎?

根據社會秩序維護法第84條規定:「於非公共場所或非公眾得出入之職業賭博場所,賭博財物者,處新臺幣九千元以下罰鍰。」 如果只是朋友聚會的暫時性娛

本網站僅收集相關文章。如需查看原文,請複製並打開以下連結:从零开始写游戏之斗地主-数据结构-CSDN博客

🔥 🎭 Poker Heat : 德州扑克 撲克牌的遊戲 在线WPT Global 👄
🎉 最新文章 🔥😈 熱門文章 🎭
🎲 推薦文章 😈
#文章標題關鍵詞文章連結文章詳情

Governor of Poker 3 - 在 Windows 上免費下載並播放 Microsoft Store 德州撲克 (Texas Holdem) 是一種非常流行的紙牌遊戲,《撲克州長》提供多種撲克遊戲供您選擇。您可以與朋友競爭、挑戰世界各地的玩家、還有其他更多有趣内容!如果您喜歡透過任務和日常挑戰來贏得那些令人讚嘆的各式帽子以及豐厚的回報,這個令人上癮的遊戲一定能爲您帶來更多歡樂! 成為職業撲克玩家是令人興奮的旅程;您將以牛仔撲克新人開始一步步晉升,直到成為參加出手數百萬籌碼的豪客賽。最終目標是成為VIP撲克明星,在拉斯維加斯錦標賽系列的高賭注遊戲中取得勝利! 遊戲特色: ●歡迎大禮包 立即下載就可以免費獲得30000撲克籌碼、黃金、頭像帽子! ●7種不同的撲克格式 現金桌,單桌即時賽,大輪盤,一對一挑戰賽,皇家撲克模式全押或棄牌,無限制和壓注限制! ●撲克團隊 與好友組隊並和其他團隊競爭以獲得豐厚的回報! ●多人撲克派對 邀請朋友在您自己的私人撲克桌上玩! ●免費籌碼 固定時間收取在線免費籌碼!每日獲得免費拉霸機次數! ●撲克之旅 從新手湖區到拉斯維加斯的娛樂城!旅程越長,賭注越高! ●黑傑克21(Blackjack) 在二十一點中下注各種金額! ●任務 在每張地圖中完成任務以獲得更多獎勵! ●成就 通過用您的撲克技巧贏得戒指,徽章和獎杯讓自己更獨特! ●排行榜 努力提升自己的排名成為頂級撲克明星! ●聊天頻道 利用消息和動畫表情符號進行交流。通過巧妙的唬弄或反激讓對手加碼,乘機撈個大收穫! ●隨時隨地盡情遊玩 使用相同的帳戶在手機、平板電腦、網頁、筆電或桌機上開心暢玩!足不出戶也能成爲“宅神爺”! ●認證RNG 保證所有遊戲都是公平的! 如果您熟悉奧哈瑪撲克或大老二,那麼在GOP3學習德州撲克會更簡單!學會保留,棄牌,過牌和抬高籌碼。從對手的撲克臉中找出蛛絲馬跡,再使用最佳的撲克策略勝過所有人。準備好成為桌上的鯊魚,主宰其他即將成為食物的魚。豐富大獎就在我們的社群賭場紙牌遊戲等著您! 您準備好全力以赴了嗎?立即下載GOP3,祝您多金好運! 立即與我們聯繫: Facebook - https://www.facebook.com/GOP3 Instagram – https://www.instagram.com/governorofpoker_official 網站 - https://governorofpoker.com/ 注意:我們喜歡公平的遊戲!我們使用行業標準的RNG(隨機機率)方法,絕不操縱牌或偏向某些玩家。這款撲克遊戲是供成人遊玩 (例如,18歲或以上的玩家)。遊戲不提供「真錢賭博」或贏取真錢或獎品的機會(遊戲僅用於娛樂目的)。在社群賭場紙牌遊戲中的實踐或成功並不意味著將來在「真錢撲克」中也能獲得成功。遊戲中要求選擇性別,只是為了讓玩家選擇使用男性或女性的角色進行遊戲。 ----------------------- -------- 客戶服務: 如果您有任何問題或建議,請聯繫[email protected],我們非常樂意提供幫助! ---------------------------------- 下載並暢玩《Governor of Poker 3》不需要付款,但可讓您在遊戲內用現金購買虛擬道具,包括隨機道具。

文章浏览阅读461次,点赞5次,收藏9次。最近看游戏直播的过程中,老是看到主播在玩欢乐斗地主。突发奇想,我能不能用Java写一个斗地主的游戏

09/18
WPT Global