#### 要求和条件
- 给定任意两组牌, 每组5张, 能够输出两组牌的牌面及比较的结果.
- 使用52张扑克, 分为四个花色(将红桃, 方块, 黑桃, 梅花简化为A, B, C, D), 每个花色13张牌, 数字从2到14(将J, Q, K, A简化为11, 12, 13, 14).
#### 规则
1. 都是散牌的话, 比较各自五张牌中数字最大的
- **例1: "B11, A2, A9, D10, A8" < "D4, A8, C5, C6, B12"**
2. 对子(两张牌数字相同)大于散牌
- **例2: "B14, A3, A9, D10, A8" < "D4, A2, C2, C6, B11"**
3. 都有对子则比较对子之间大小
- **例3: "B11, A9, D9, D5, A8" < "D4, B10, C10, C6, B12"**
4. 顺子(五张牌数字连续)大于对子
- **例4: "D2, B2, C10, A10, B12" < "D5, A6, C7, C8, B9"**
#### 关于德州扑克
- 规则和术语(下列**牌型按照从大到小排列**, 下面的设计思路将采用这些**术语**命名)
- 皇家同花顺(royal flush): 由AKQJ10五张组成, 并且这5张牌花色相同
- 同花顺(straight flush): 由五张连张同花色的牌组成
- 4条(four of the kind): 4张同点值的牌加上一张其他任何牌
- 葫芦(full house): 3张同点值加上另外一对
- 同花(flush): 5张牌花色相同, 但是不成顺子
- 顺子(straight): 五张牌连张, 至少一张花色不同
- 3条(three of the kind): 三张牌点值相同, 其他两张各异
- 两对(two pairs): 两对加上一个杂牌
- 一对(one pair): 一对加上3张杂牌
- 高牌(high card): 不符合上面任何一种牌型的牌型,由单牌且不连续不同花的组成
#### 设计思路
1. 总则: 拿到5张牌, **先比较牌型, 如果牌型相同, 再根据牌型比较大小即可**
2. 由于上述要求只有四个, 但是实际上德州扑克的牌型包含了**10种**, 因此我扩展了全部的规则, 避免在出现类似**葫芦**这种牌型的时候被当做**高牌**处理
3. 为了使整个系统更加完善, 避免直接数据运行, 抽象出如下几个角色:
- Poker: 代表一副扑克, 包含`发牌`动作
- Dealer: 荷官, 系统的主导者, 负责`发牌`, `计算玩家牌型比较`等
- Player: 玩家, 持有`5张牌`及其`牌型结果`对象等, 该类实现`Comparable`作为内部排序, 调用**comparing**逻辑实现**玩家的输赢**
4. 系统其他设计:
- Card: 包括`牌色`和`牌数字`, 很明显, 这2个对象都用**枚举**来存储, 该类实现`Comparable`接口作为集合的内部排序
- CardSuitEnum: `牌色`, 包括**红心, 黑桃, 草花, 方块**
- CardRankEnum: `牌数字`, **2-A**, 其中A最大, 抽象成数字**14**表示
- RankingEnum: `牌型`, 如`high card`, `one pair`等10种牌型
5. 关键设计: 根据**总则**, 抽象出如下2个过程
- ranking: 5张牌牌型的解析
- comparing: 相同牌型的比较, 比如都是`高牌`, 依次比较最大牌即可
6. ranking的设计
- 使用模板设计模式, 每个`牌型解析器`作为一个单独的类自己实现其解析逻辑, 如`FourOfTheKindRankingImpl`用于检验5张牌是不是`四条`
- 每个`解析类`都具有**可插拔**的性质, 全部注册在**门面类RankingFacade**中, 如**题目要求**只要四个规则, 即注册对应的4个解析类即可
- 继承结构: `XXXRankingImpl` < `AbstractRanking` < `IRanking`
7. comparing的设计
- 依赖`ranking`的解析结果, 使用`策略模式`取得对应的`比较器`, 比较相同的牌型结果
- 继承结构: `XXXComparingImpl` < `AbstractComparing` < `IComparing` < `Comparator<Player>`
#### 代码结构
- com.alibaba.game.*: 主函数入口
- com.alibaba.game.texasholdem.*: 基本对象
- com.alibaba.game.texasholdem.ranking.*: `ranking`的逻辑, 每个实现类具有可插拔的性质, 如要扩展`牌型规则`, 在这里实现具体的`解析类`即可
- com.alibaba.game.texasholdem.comparing.*: `comparing`的逻辑, 每个实现类具有可插拔的性质, 如要扩展`牌型比较规则`, 在这里实现具体的`比较类`即可
- TEST: 包含对应类的**单元测试**
#### 其他
- 支持1副牌(52张)的多个玩家(每个玩家5张牌)
- TDD
- 开发的时候系统环境为`jdk7`, 未在7以下的版本运行过
- 代码风格参考了`阿里巴巴java开发手册`, 但还未读完, 因此不完全体现
#### 思考
- 之前从来没玩过德州扑克, 所以简单查了下规则才开始写代码. 所以写代码的本质应该是对业务的理解和抽象, 然后在这基础上的扩展
没有合适的资源?快使用搜索试试~ 我知道了~
Java版德州扑克小游戏.zip
共70个文件
java:65个
xml:1个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 107 浏览量
2024-05-12
15:09:39
上传
评论
收藏 69KB ZIP 举报
温馨提示
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
Java版德州扑克小游戏.zip (70个子文件)
manualType.properties 10B
系统.txt 7B
Java版德州扑克小游戏
pom.xml 661B
src
test
java
com
alibaba
game
texasholdem
DealerTest.java 661B
CardSuitEnumTest.java 608B
ranking
StraightRankingImplTest.java 1KB
TwoPairsRankingImplTest.java 1KB
ThreeOfTheKindRankingImplTest.java 1KB
RoyalFlushRankingImplTest.java 1KB
FullHouseRankingImplTest.java 1KB
FlushRankingImplTest.java 1KB
FourOfTheKindRankingImplTest.java 1KB
OnePairRankingImplTest.java 1KB
StraightFlushRankingImplTest.java 1KB
HighCardRankingImplTest.java 1KB
CardTest.java 2KB
comparing
OnePairComparingImplTest.java 4KB
ThreeOfTheKindComparingImplTest.java 2KB
FullHouseComparingImplTest.java 2KB
HighCardComparingImplTest.java 2KB
TwoPairsComparingImplTest.java 4KB
FlushComparingImplTest.java 2KB
RoyalFlushComparingImplTest.java 2KB
StraightFlushComparingImplTest.java 2KB
FourOfTheKindComparingImplTest.java 2KB
StraightComparingImplTest.java 2KB
PokerTest.java 492B
CardRankEnumTest.java 548B
RankingEnumTest.java 365B
PlayerTest.java 1KB
main
java
com
alibaba
game
texasholdem
RankingEnum.java 908B
Poker.java 850B
CardSuitEnum.java 416B
Card.java 2KB
Dealer.java 2KB
CardRankEnum.java 609B
ranking
HighCardRankingImpl.java 1KB
StraightFlushRankingImpl.java 1KB
RoyalFlushRankingImpl.java 1KB
FourOfTheKindRankingImpl.java 1KB
FullHouseRankingImpl.java 1KB
DefaultRankingImpl.java 477B
StraightRankingImpl.java 1KB
FlushRankingImpl.java 705B
RankingFacade.java 2KB
RankingResult.java 837B
ThreeOfTheKindRankingImpl.java 976B
IRanking.java 271B
OnePairRankingImpl.java 1KB
TwoPairsRankingImpl.java 1KB
AbstractRanking.java 1KB
Constants.java 153B
comparing
ThreeOfTheKindComparingImpl.java 541B
ComparingFacade.java 1KB
StraightFlushComparingImpl.java 358B
RoyalFlushComparingImpl.java 349B
FlushComparingImpl.java 356B
TwoPairsComparingImpl.java 568B
DefaultComparingImpl.java 343B
FullHouseComparingImpl.java 531B
StraightComparingImpl.java 345B
OnePairComparingImpl.java 543B
IComparing.java 183B
AbstractComparing.java 3KB
FourOfTheKindComparingImpl.java 539B
HighCardComparingImpl.java 345B
Player.java 3KB
Main.java 559B
.gitignore 31B
README.md 4KB
共 70 条
- 1
资源评论
枫蜜柚子茶
- 粉丝: 6346
- 资源: 4732
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功