作者F23ko (純潔)
看板GameDesign
標題Re: [請益] 請問撲克牌比牌的寫法
時間Wed Jan 27 15:37:30 2010
之前是用c++寫過,不過就演算法來說,應該沒差別
1.先判定順、鐵隻、胡蘆、三條、一對、二對、散牌
方法:
第一階段、取得配對數:
輸入的牌寫成陣列,寫個迴圈比對元素0~4之間的數字是否相等
宣告一配對組型變數A(int)
相等一次 將A+1
將最終值/2
如果是散牌 = 0
一對 = 1
二對 = 2
三條 = 3
葫蘆 = 4
鐵隻 = 6
/*不確定,有點忘記,請自己拿紙筆算一下
我記得最後出來的值,剛好一個數字 = 一種結果*/
第二階段:
當散牌時,判定是不是順子跟同花
如果是其他的,直接去判斷同型內大小
順子:降冪排列後檢查是不是序數
記得10、11、12、13、1 的特例
同花:這就直接五張比下去就對了
這樣一來,由順子、同花、對數三個函式,就能知道牌型
2.判定同型內大小
比較勝負的話,只有同型狀況下需要比較大小
方法是:用一個4個元素的陣列代表大小
第一個元素為為牌型
如果是散牌,取得數字最大者為第二元素
把第三元素排成花色(由大到小3~0)
同花,取最大張牌為第二元素,第三用不到,空著
/*其他一對、二對、葫蘆、鐵隻都是差不多的形式
比較大小時,依序取得代表大小陣列,開始比就能知道輸贏*/
※ 引述《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之中隨意的五個值判斷這個牌組是幾分呢?
: 不知道有經驗的版友能分享一下想法呢
--
◢
鄉民啊!鄉民! 請告訴我誰是最純潔的人!
◢█ │
PTT │
██
:就是你!Snow White F23ko!│
█◤ ╯
◤ ﹨(╯▽╰ )∕
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.27.109.99
推 Yshuan:我第一次寫的時候是一堆if-else... 很痛苦orz 01/27 17:39
→ F23ko:我第一次寫梭哈演算法的AI,他算一次牌花40秒.... 01/27 23:12
→ F23ko:在那之後.... 好幾年沒碰程式.... 囧" 01/27 23:12
→ F23ko:最近才重新開始學C# 01/27 23:13
→ realmeat:我也寫過一個 現在正被使用中就是... 01/27 23:53