作者LPH66 ((short)(-15074))
看板GameDesign
标题Re: [请益] 请问扑克牌比牌的写法
时间Wed Jan 27 14:31:10 2010
※ 引述《jijuan (鸡卷)》之铭言:
: 梭哈游戏,每个人都有5张牌组成最大的牌面来比大小?
: 不过程式该怎麽去判断每副牌的大小呢?
: 目前我初步的想法是给每张牌一个分数
: 如A=14分,K=13分,...,2=2分
: 那如果我今天拿到胡烂 A K Q 5 3 总分就是14+13+12+5+3=47分
: 如果有对子就乘上100分 A A K Q J 总分就是 (14+14)*100+13+12+11=2836分
: 但是由於A A K Q J是最大的一对
: 那最小的两对如 2 2 3 3 4 就是 (2+2)*加权值+(3+3)*加权值+4 必须大於2836分
: 可以算出加权值至少要是284才会成立
: 那从胡烂、一对、到最大的同花大顺
: 该怎麽去写一个函式传入0-51之中随意的五个值判断这个牌组是几分呢?
: 不知道有经验的版友能分享一下想法呢
我会反过来 先判断大牌型 给大分数後再对每张牌排序後加上小分数
例如 (以下标 0x 的都是16进位数 没标的都是10进位数)
同花顺 0x800000
铁支 0x700000
葫芦 0x600000
同花 0x500000
顺子 0x400000
三条 0x300000
两对 0x200000
一对 0x100000
无赖 0x000000
然後例如是 方块 6 K 9 A 5 的同花
那就加上 0xED965
对应 AK965
於是这手牌的分数就是 0x5ED965 = 6216037
又例如是 红心 4 8 黑桃 7 梅花 7 8 的八带七两对(带kicker 4)
那加上的是 0x87000 + 0x4
於是这手牌的分数就是 0x287004 = 2650116
这样子大牌型的大分数会在高位首先赢过小牌的大分数
同样牌型的也由於依照牌的数字排序过(大的放高位)而能够比出大小来
例如同样是两对 十带八的两对(带kicker Q)的分数就是 0x2A800C = 2785292
正确的做出比上面那一手两对大的判断了
不过由於是先判断大牌型的关系
判断函式就不会像原来你想像的单纯加权而已了
而是抓出五张牌的花色数字後用个大大的 if/elseif 一种一种拆开
--
至於使用16进位的原因单纯就是一个花色有13张牌罢了...
--
[LPH] Oops, your OOP's a problem? 说:
你现在还是看不到狗?
************* 说:
看得到 只是 他们不会跑 就一直呆呆在那边 一直在起点
[LPH] Oops, your OOP's a problem? 说:
你要按"ㄅㄧㄤˋ"它们才会跑啊@@"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.254.23.234
1F:推 yoco315:好方法 = =+ 01/27 21:01