Re: [請益] 請問撲克牌比牌的寫法
※ 引述《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
推
01/27 21:01, , 1F
01/27 21:01, 1F
討論串 (同標題文章)