作者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
1F:推 Yshuan:我第一次写的时候是一堆if-else... 很痛苦orz 01/27 17:39
2F:→ F23ko:我第一次写梭哈演算法的AI,他算一次牌花40秒.... 01/27 23:12
3F:→ F23ko:在那之後.... 好几年没碰程式.... 囧" 01/27 23:12
4F:→ F23ko:最近才重新开始学C# 01/27 23:13
5F:→ realmeat:我也写过一个 现在正被使用中就是... 01/27 23:53