hujunhua 发表于 2012-12-6 21:24:30

10# wayne
实际玩的时候是连续用牌的。当然,只用一回合就重新洗牌也没有什么不可,只要玩家勤快。不过玩家通常都比较懒,即使不用尽8回合,也会用到六、七回合的。

KeyTo9_Fans 发表于 2017-8-3 01:30:08

“牌组最大的赢$6$分,其它$3$家从大到小各输$1$分、$2$分和$3$分”

实战会出现打平的情况,如下图所示:



上图的第$3$组牌中,输$1$分和输$2$分的两家打平了,

按照楼主的计分规则,这两家应该平分所输的分数,即每家各输$1.5$分。

于是计分就出现小数了,令人不爽。

为了避免计分出现小数,每局的计分应该加倍,

也就是牌组最大的赢$12$分,其它$3$家从大到小各输$2$分、$4$分和$6$分,

于是计分就不会出现小数了:

$2$个赢家打平,则各得$5$分;

前$2$个输家打平,则各输$3$分;

后$2$个输家打平,则各输$5$分;

$3$个赢家打平,则各得$2$分;

$3$个输家打平,则各输$4$分;

$4$家打平,则均无得失。

#####

根据【豹子>顺金>金花>顺子>对子>散牌】的比牌规则,以及输赢加倍的计分规则,

做成的九张诈金花游戏如下:



下载附件,解压后就可以玩了。

注意,要把【count.txt】和【GF9.exe】放同一个文件夹下,才能正常运行【GF9.exe】。

#####

【count.txt】是电脑做决策的重要数据,里面记录了$20$亿组随机的$9$张牌分$3$组后,每组每一种牌出现的频数。

这$20$亿组牌的分组策略都是使得该评分函数的值最大:

$Sco re(P_1,P_2,P_3)=S_1(P_1)+S_2(P_2)+S_3(P_3)$

其中,$S_1(P_1)$、$S_2(P_2)$、$S_3(P_3)$为第$1$组、第$2$组、第$3$组牌的估分。

估分方法如下。

假设另一玩家的这组牌更大的概率是$p$,那么我方有

$(1-p)^3$的概率得$12$分;

$3p(1-p)^2$的概率得$-2$分;

$3p^2(1-p)$的概率得$-4$分;

$p^3$的概率得$-6$分。

期望得分是$12*(1-p)^3-2*3p(1-p)^2-4*3p^2(1-p)-6*p^3$。

如何知道另一玩家的这组牌更大的概率呢?

通过旧版的【count.txt】就知道了。

旧版的【count.txt】也记录了$20$亿组随机的$9$张牌分$3$组后,每组每一种牌出现的频数。

这$20$亿组牌的分组策略依然是使得上述评分函数的值最大。

而上述评分函数的值需要更旧版本的【count.txt】得出。

依次类推。

而最初的【count.txt】,只需要统计$52$张牌任选$3$张牌得到的每一种牌的频数即可。

而压缩包里的【count.txt】是第$7$个版本,

与第$6$个版本相比,已经没有什么差异了,

所以就不需要再更新了。

#####

楼主的第$1$个问题是:那里的计算模型和结果正确吗,会影响到概率的大小顺序吗?

Fans答:

那里的概率是根据$52$张牌中随机选$3$张牌得到的,结果是正确的。

概率大小不符合物以稀为贵是受到了美学的左右。

-----

楼主的第$2$个问题是:九张诈金花,如何计算各组合的出现概率,与$3$张诈金花的顺序还一样吗?

Fans答:

准确的模型应该是:$52$张任意抽取$9$张,三三分组,计算各组合的概率。

关键问题在于如何分组。

如果是随机分组,那么各种组合的概率与【从$52$张牌中随机选$3$张牌得到的各种组合的概率】是一样的。

Fans认为,应该以实战的分组为准。

举个例子,$9$张牌里有$3$张$A$,实战组成了$3$组带$A$金花,就应该计$3$次金花,而不计豹子。

据此得到的各种组合的概率为:

豹子$5.36%$,顺金$4.39%$,金花$40.97%$,顺子$12.45%$,对子$18.86%$,散牌$17.97%$。

其中,【金花】出现得最多。

Fans认为这并没有什么不妥,因为这个游戏本来就叫【诈金花】。

#####

之前上传的游戏有Bug,就是两组牌一样大的时候,点击确定没反应。

Fans玩到第$104$局的时候发现了该Bug。

该Bug已于2017-08-03 20:36修正,附件已更新。

在此之前下载了附件的朋友需要重新下载更新后的附件,方可修复Bug。

hujunhua 发表于 2017-8-8 17:05:24

下载玩了一下,挺好玩的,谢谢@KeyTo9_Fans。

9张牌等分为3组,必可组成一个金花。但是如果金花的价值不是那么高,玩家就会刻意放弃金花的组合。

我们本来是为了以概率大小来安排组合的价值,若以实战的分组为准来统计概率,如何保证不受“价值先定”的影响呢?

比如,若把顺子和金花的价值顺序交换一下,会不会使顺子的组合概率变高呢?

KeyTo9_Fans 发表于 2017-8-10 13:10:18

按照物以稀为贵的原则,正确的大小顺序应该是

顺金 > 豹子 > 顺子 > 金花 > 对子 > 散牌

根据此大小顺序进行实战模拟,得到各种组合的概率如下。

顺金$4.77%$,豹子$5.13%$,顺子$26.70%$,金花$24.58%$,对子$22.52%$,散牌$16.30%$。

我们可以看到,顺金和豹子保序了。

而顺子和金花的差距虽然明显变小,但还是乱序了。

说明实战中各种组合的概率是受到“价值先定”的影响的。

要想不受“价值先定”的影响,我觉得只能按照随机分组得到的各种组合的概率来决定价值了。

KeyTo9_Fans 发表于 2017-8-11 09:56:39

按照【顺金 > 豹子 > 顺子 > 金花 > 对子 > 散牌】的比牌规则,做成的【九张诈金顺】游戏如下。



下载附件,解压后就可以玩了。

其中【count.txt】迭代了$6$次,训练了$12$亿局牌。

由于需要优先组顺子,而顺子的种类数较少,打平的情况明显增多了,例如:

hujunhua 发表于 2017-8-12 19:03:57

为什么我玩第二种游戏,输分比第一种游戏多得多,大约有2倍多。

KeyTo9_Fans 发表于 2017-8-14 16:32:12

楼主提到,本贴的真正目的是合理地设定复式$4$张诈金花每种组合的大小顺序。

为此,我们可以先看一下随机分组的结果。

随机分组后,将每种组合的频数从小到大排序,结果如下。

豹子:$13$
顺金:$44$
既是顺子又是小顺金:$264$
既是金花又是小顺金:$392$
既是对子又是小顺金:$432$
双连对:$468$
只是小顺金:$1176$
双对:$2340$
只是金花:$2424$
三带一:$2496$
只是顺子:$2508$
既是对子又是小顺子:$3024$
只是小顺子:$23520$
只是对子:$78912$
什么都不是:$152712$
合计:$270725=C(52,4)$

#####

上述组合,除了【什么都不是】,一共有$14$种,与楼主的期望【$10$种】不符。

为了与楼主的期望达成一致,我们需要将这$4$种特殊的组合去掉:

既是顺子又是小顺金:$264$
既是金花又是小顺金:$392$
既是对子又是小顺金:$432$
既是对子又是小顺子:$3024$

将他们去掉一共有$2^4=16$种方案,但我不知道哪一种方案最合理。

如果以稀有组合为准,得到的归并方案如下:

既是顺子又是小顺金:$264$ -> 当作【小顺金】
既是金花又是小顺金:$392$ -> 当作【小顺金】
既是对子又是小顺金:$432$ -> 当作【小顺金】
既是对子又是小顺子:$3024$ -> 当作【小顺子】

由此得到各种组合的频数和排序如下。

豹子:$13$
顺金:$44$
双连对:$468$
小顺金:$2264$
双对:$2340$
金花:$2424$
三带一:$2496$
顺子:$2508$
小顺子:$26544$
对子:$78912$
什么都不是:$152712$
合计:$270725=C(52,4)$

#####

于是我们发现【小顺金】、【双对】、【金花】、【三带一】、【顺子】的频数非常接近,

无论如何安排他们的大小顺序,实战的频数都会乱序,

所以我建议这些牌型不分好坏,认为是一样大的。

这些牌型应该按照排列顺序,一张一张地比点数。

具体的排列顺序如下。

小顺金:三张小顺金放前面,单张散牌放后面;

双对:大对放前面,小对放后面;

金花:按点数从大到小排列;

三带一:三张小豹子放前面,单张散牌放后面;

顺子:按点数从大到小排列($432A$是特殊的顺子,$A$的点数是$1$,比$2$还小,放最后面)。

如果按顺序比较$4$张牌的点数,均为一样大,则认为这两手牌一样大。

例如,小顺金$AKQ$加散牌$9$和同花的$AKQ9$一样大。

需要注意的是,由于顺子$432A$里$A$的点数是$1$,顺子$432A$比小顺金$4322$还小。

由此得到$7$种牌型的大小和频数排序如下。

$1$、豹子,$13$
$2$、顺金,$44$
$3$、双连对,$468$
$4$、小顺金/双对/金花/三带一/顺子,$12032$
$5$、小顺子,$26544$
$6$、对子,$78912$
$7$、散牌,$152712$
合计:$270725=C(52,4)$

#####

由于我们将【小顺金/双对/金花/三带一/顺子】看作了同一种牌型,需要按点数比大小,

于是这$3$种组合:

既是顺子又是小顺金:$264$ -> 当作【小顺金】
既是金花又是小顺金:$392$ -> 当作【小顺金】
既是对子又是小顺金:$432$ -> 当作【小顺金】

就不一定非要当作小顺金了,而是当作哪种牌型有利就当作哪种牌型。

例如:

小顺金$32A$加散牌$4$,

这手牌既可以当作小顺金排列成$32A4$,也可以当作顺子排列成$432A$,

但显然排列成$432A$比排列成$32A4$更有利,

所以这手牌理应当作顺子,排列成$432A$来比较大小。

hujunhua 发表于 2017-9-11 19:37:21

各种整理归并,无不合情合理。@KeyTo9_Fans真乃游戏设计大师也:b:。

3×4的复式诈金花,还可以从顺子中提出一种满4组合:四花顺,频数为264.

学习KeyTo9_Fans的归并大法,我也提出一种归并方法:
1、豹子,13
2、顺金,44
3、四花顺/双连对/顺小金/金小顺,1388(平均频数347)
4、小顺金/双对/金花/三带一/顺子,11112(平均频数2222)
5、小顺子,26544
6、对子,78912
7、散牌,152712
合计:270725=C(52,4)

KeyTo9_Fans 发表于 2017-10-15 17:18:01

先占个坑,再慢慢编辑这张贴子:P



这游戏似乎能玩了:洗牌发牌、玩家组牌、电脑组牌、亮牌比牌、统计得分 这些游戏运行所需的基本步骤都没有问题了,

只是美学方面还需要做点优化:文字和牌面重叠了,影响了游戏者的视觉体验……

#####

把扑克牌缩小?可是扑克牌不是图片,想缩就缩的。

每张扑克牌都是用画笔的画线语句:

dc.MoveTo(x,y);
dc.LineTo(x+60,y);
dc.LineTo(x+60,y+80);
dc.LineTo(x,y+80);
dc.LineTo(x,y);
……

一笔一划画出来的,缩小一下得改多少画线语句啊?

只好退而求其次,把文字收紧一些,凑合着看吧~



#####

牌型太多,什么大什么小,什么什么一样大,眼花缭乱分不清楚?

那就用不同的颜色清楚地标示出来吧:

【豹子】最大,红字红底;
【顺金】第二大,红字橙底;
【四花顺、连对、顺小金、金小顺】4种牌型并列第三大,红字黄底;
【小顺金、两对、金花、三条、顺子】5种牌型并列居中,黑字黄底;
【小顺子】第三小,黑字灰底;
【对子】第二小,黑字淡底;
【散牌】最小,黑字无底。



这样就好辨认多啦~:P

#####

大家的牌型颜色都一样,怎么得分不一样?

因为当牌型颜色一样时,要按照牌面的点数来比较大小哦~

既然这样,那就把最关键的点数显示出来吧:



这样就方便查证啦~

需要注意的是:

当A需要跟2相连的时候,例如:A234、AA22,那么A的点数是1,比2还小;

当A需要跟K相连的时候,例如:JQKA、KKAA,那么A的点数是14,比K还大;

当A不需要与其它牌相连的时候,点数也是14,是最大的牌。

#####

前面演示的4局牌,怎么都是玩家赢?电脑怎么这么菜?

电脑的策略还在龟速训练中……

由于12张牌需要枚举的组合数太多,训练速度比9张诈金花慢多了,每秒只能打800局左右……

等电脑训练得足够强了,我就把这个游戏贴上来给大家挑战:P

#####

下载这个附件,解压后就可以玩这个游戏了。



牌型种类和大小关系是按照楼上的建议设计的。

其中,【count.txt】是电脑做决策要用到的数据,迭代了$10$次,统计了$1$亿局牌。

该文件要和【GF4.exe】放在一起才能正常游戏。

#####

在上述游戏规则下,实战中用到的每种牌型的频数比例如下:

散牌 :0.0935
对子 :0.0878
小顺子:0.1539
顺子 :0.0646
三条 :0.0466
金花 :0.1615
两对 :0.1137
小顺金:0.0087
金小顺:0.0563
顺小金:0.0270
连对 :0.0929
四花顺:0.0700
顺金 :0.0165
豹子 :0.0070

上述频数比例,最不合理的地方是小顺金的比例比顺金的比例还小,原因是小顺金相对稀少,牌力却很弱,所以很不实用。

如果拿到小顺金,一般都是加一张同花牌组成金小顺,或者加一张连牌组成顺小金,实在没牌才加杂牌组成小顺金的。

因此小顺金在实战中就很少出现了。

hujunhua 发表于 2017-10-20 23:21:34

由于富于变化,3X4的才真正开始需要策略和运气。究竟是做强一队,还是做强三队,常常需要做出取舍。
而3X3的游戏,我觉得基本还是要做强一队和二队。

当结果出来,发现另一种抉择更好时,好想能悔牌啊:lol
页: 1 [2]
查看完整版本: 复式诈金花的概率设计