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

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,还有一些就是要算打出的牌失张和进张的比例,感觉很复杂,没有一个完整的思路。

求大家指导!

8211 次点击
所在节点    程序员
60 条回复
garzon
2019-06-04 21:20:46 +08:00
lyshine
2019-06-04 21:27:30 +08:00
v 站真是出人才. 我到现在还没体验到牌和麻将里面的智慧
garzon
2019-06-04 21:28:35 +08:00
再附送讨论最优实现算法的论文一篇 https://arxiv.org/pdf/1903.03294.pdf
icekingcy
2019-06-04 22:15:17 +08:00
@simonlu9 Bingo !
msg7086
2019-06-04 22:19:39 +08:00
@simonlu9 #24 虽然汉字顺序不影响阅读,但那是九莲宝灯。
newtype0092
2019-06-05 08:06:06 +08:00
#28
源码没了,太早了。。。
停牌的思路和前面说的混、癞子、万能牌的算法是一样的。
假如一开始手里有 n 张万能牌,检查牌是否成副时,如果当前最左边的是 1 万,检查的是 123 万,这时如果 n>1 要多检查两种情况 12x 和 1x3,如果成牌的话 n-1,然后继续往下走。
如果允许两张万能牌的话还要检查 1xx,成牌的话 n-2,然后继续往下走。

听牌的算法就是当你打出 1 张后手上剩 13 张,这时假设手里多 1 张万能牌,然后用胡牌算法算一下,有多少种胡法,就是听多少张。
w274189159
2019-06-05 08:34:57 +08:00
@OxQMask #6 我怀疑你和我同一个地方。。我玩过很多地方的麻将。只有我那边有赖子
turi
2019-06-05 09:15:38 +08:00
贪心
pricesong
2019-06-05 09:48:40 +08:00
hh,经验早就有总结了,遇到运气都是扯淡。

你吃别家碰
你立别家胡
你听就出铳
不铳就弃胡。


@simonlu9
mk0114
2019-06-05 09:49:00 +08:00
我写了一个自动打雀魂的机器人,用 opencv 搜索图片识别,简单的只考虑了在为了向听数下降而打那张牌,牌效率练习

没有考虑防守、点数、吃碰杠。目前只打到了雀杰。。。https://github.com/mk014/mahjong
Eugene1024
2019-06-05 09:52:24 +08:00
麻将的精髓在于变化,每一局都不一样
mk0114
2019-06-05 10:13:08 +08:00
发现了一个更牛的,但是我不懂 go
https://github.com/EndlessCheng/mahjong-helper
HanMeiM
2019-06-05 11:01:17 +08:00
这个还是要考虑怎么出牌的吧。
有的人不打生章,有的人喜欢把生章打出去。。。。
z960112559
2019-06-05 11:07:01 +08:00
只要找对那对将牌就比较好判断了,反正胡牌必有一对将,剩下手里牌按三个一组移除,移除完就能胡牌了(普通胡),七对那些另算
z960112559
2019-06-05 11:09:00 +08:00
游戏地方麻将有癞子,有幸做过一次宜宾麻将,最多 11 个癞子,还得根据癞子算最大番,搞死人
winglight2016
2019-06-05 13:21:31 +08:00
枚举全部的胡牌可能组合,放到 hashmap 里,这样更容易适配不同规则
coderluan
2019-06-05 14:13:43 +08:00
重点:麻将是竞技游戏,不是单机,只算自己牌不算对手牌,基本只能输死。
slime7
2019-06-05 14:35:10 +08:00
出牌算法熟悉一下某个流派,然后按这个流派的出牌优先级就可以了,进攻和防守都会涉及;比如人脑费力的饼流,反正计算机不会累。
jabari
2019-06-05 14:56:27 +08:00
10.1007/s11042-019-7682-5
jimliang
2019-06-05 14:59:13 +08:00
光看牌效没有用,还有各种防守、副露策略,每一把都要根据情况作出对策,什么时候防什么时候攻,该弃就弃不要头铁。这些都是不简单的算法可以实现的。

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

https://yangjunhui.monster/t/570771

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

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

© 2021 V2EX