有人讨论下麻将胡牌,出牌算法吗,求思路

2019-06-04 15:15:57 +08:00
 simonlu9

前段时间学会了打麻将,觉得老祖宗的智慧真的博大精深,很好玩,食胡的时候真兴奋啊,于是空余时间就想自己写个麻将游戏出来,模仿欢乐麻将那种,数学差,想了两个礼拜才想出一个胡牌算法,前段时间学会了打麻将。

觉得老祖宗的智慧真的博大精深,很好玩,食胡的时候真兴奋啊,于是空余时间就想自己写个麻将游戏出来,模仿欢乐麻将那种,数学差,想了两个礼拜才想出一个胡牌算法,

源码 https://github.com/simonlu9/majiang/blob/master/tests/HuTest.php

大概思路是这样的 比如你手中的牌是这样的 m 代表是万子的意思

['m1','m1','m1','m2','m2','m2','m2','m3','m3','m3','m4','m4','m4','m4'];

如上所述,我们可以得出 ,当 m1 为对子的时候,所有牌的可能性

那么可能的路线有

等等,相当于一个排列算法,这里就有 132*3 = 12 种可能性,若到最后每种牌剩余数都为 0,则胡牌,当 m1 作对子不成立时候,依次尝试 m2,m3,m4 作对子,重复以上的步骤,都不行的话就不能胡了 不知道有没有 bug

第二个就是出牌的算法,目前只想到把自己手中的牌计分,分低的优先出牌,比如一些孤张,边张的,还有一些牌效重复的比如 134 679 一般都会舍去 1 和 9,还有一些就是要算打出的牌失张和进张的比例,感觉很复杂,没有一个完整的思路。

求大家指导!

7510 次点击
所在节点    程序员
60 条回复
lkan
2019-06-04 15:17:20 +08:00
老哥有斗地主的算法吗
binux
2019-06-04 15:21:27 +08:00
胡牌规则就那么几种,扫一遍就完了。
msg7086
2019-06-04 15:24:39 +08:00
看和牌算法效率的话可以测一下九莲这种极端情况。
至于 AI 的话就复杂了,最基础就是算搭子,再高级点的话还要看役种期望值,再往上还有场况分析和防守等等,无聊的话可以买一些研究类书籍读一下。AI 的算法其实就是数码派的理论依据转化成代码的结果了。
hhhsuan
2019-06-04 15:25:33 +08:00
网上搜一下,论文很多
rogwan
2019-06-04 15:25:44 +08:00
麻将的精髓就是把人的不确定性,加在程序执行的过程中了,所以没有准确的方法可以预判啦。
OxQMask
2019-06-04 15:31:08 +08:00
我们那有一种玩法还有赖子,如果加上这个应该会复杂很多吧😂
cway
2019-06-04 15:39:58 +08:00
如果单纯胡牌那不是很复杂,
x86
2019-06-04 15:42:00 +08:00
麻将说起来就那么点,实战去打的时候就知道了
winterfell30
2019-06-04 15:42:14 +08:00
uvaoj 上有道题就是判断麻将胡牌的,刘汝佳的大白书上还讲了
zsc8917zsc
2019-06-04 15:45:49 +08:00
n*AAA+m*ABC+DD,mn 可以等于 0
Beeethoven
2019-06-04 15:52:06 +08:00
github 上搜麻将 /mahjong 一大把
newtype0092
2019-06-04 15:52:23 +08:00
写过个简单的递归算法:
0.所有牌按 id 排序,这步可以在发牌时就做插入排序,这样手牌始终是有序的
1.取最左边一张牌,依次检查所有成副的牌型[对、刻、杠、顺]
2.不成副或超过两副对(全是对有的地方有七对的胡法)说明不成胡,继续检查下一副牌型
3.成副则用除去这副的剩下的牌继续取最左边一张从第 1 步递归
4.所有牌都成副就是胡了
Narwhal
2019-06-04 15:52:37 +08:00
AI 雀士爆打が天鳳 9 段という衝撃の事実が知れる麻雀本 | 麻雀グッズ研究所
玩天凤的都知道天凤有个 AI 帐号 稳定高分段
antonia0912
2019-06-04 15:59:57 +08:00
算法不太懂,但是你要让我打麻将,我可是一个相当厉害的牌友哦
c4f36e5766583218
2019-06-04 16:45:17 +08:00
我觉得还行。(这个三角函数我不会
murmur
2019-06-04 16:51:28 +08:00
日麻算法不是黑鸡儿复杂,还要算役的
jsun
2019-06-04 17:18:49 +08:00
dallaslu
2019-06-04 17:24:07 +08:00
一个角度叼钻的思路:
https://dallaslu.com/mahjong-regex/
unknowncheater
2019-06-04 17:35:35 +08:00
這思路牛皮嗷,假裝自己會麻將
luob
2019-06-04 18:22:30 +08:00
如果有胡牌算法,那我可以提供一个非常暴力的出牌算法:遍历一下出哪张牌能让剩下的牌向听数减少就行了,至于向听数,也用暴力计算,用胡牌算法遍历 27 种牌
已知随机 14 张牌的向听数期望约等于 3,所以此出牌算法的复杂度是胡牌算法的 27*27*27*14 ≈ 3x10^5 倍 ……(逃

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/570771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX