麻将是亚洲最流行的游戏之一(不是Windows 7中自带的纸牌接龙)。市面上有很多麻将游戏,包括雅虎上的在线游戏和DOS时代的离线游戏!
有一天我在想,如何编写一个麻将游戏(不包括GUI)?
数据建模部分很简单。
胜负和计分规则是… 模式匹配吗?
游戏中的策略部分,例如决定扔哪张牌,以及何时进行吃、碰操作,是最难的部分。 如何实现这一点?
谢谢!
研究:
- 一个麻将演示(日式麻将):http://www.nobleflash.com/game/4495/Japanese-Mahjong.html
- http://www.ninedragons.com/ – 我以前玩过的一个麻将游戏,其计分系统:http://www.ninedragons.com/mahjong/scoring2.html
- 函数式语言更适合吗?在哪些方面? F#是卡牌游戏AI的好语言吗?
- AI 麻将 – http://www.stanford.edu/class/cs229/proj2009/Loh.pdf
回答:
阅读此内容
http://homepage.mac.com/s_lott/books/python/html/p05/p05c05_mahjongg.html
它可能会有所帮助。
“确定扔哪张牌”实际上非常简单。 考虑到弃牌和手牌性质,定义“听牌”就是确定哪些潜在的组合拥有最多的可用牌(未弃牌,未在游戏中)。
每张牌属于几种可能的模式之一(对子,最多3个顺子,刻子,杠)。 计算填满该模式所需的牌很容易。 根据已打出的牌和暴露的牌,减少可能牌的数量很容易。 由此产生的可能模式可以进行排名。 弃牌从最难填满的组合中选择。
[参见此书http://www.amazon.com/Mah-Jong-Handbook-Play-Score/dp/0804838747]