Re: [請益] 請問撲克牌比牌的寫法

看板GameDesign作者 ((short)(-15074))時間14年前 (2010/01/27 14:31), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #1BNzsnRy (GameDesign)
文章代碼(AID): #1BNzsnRy (GameDesign)