首页 > 黑暗科技研究 > 日麻听牌分析器

日麻听牌分析器

2013年9月14日 发表评论 阅读评论

话说我不知道多久之前就放言要做一个日麻的自动听牌分析器,但是这个“企划”刚冲我脑海中诞生就被我关进小黑屋了,原因一个字——懒,但是最近想起来这个东西了,就实现了一下,原因也就只有一个字——闲!!

好吧,说起来以前为什么会产生这个想法呢,还得追溯到我以前玩“东方幻想麻将”的时候【所以我说这个想法被我关了多久的小黑屋了。。。】,里面有一个模式,是出牌面,然后让你回答这副牌听什么,其中最高难度的牌,不仅散序,而且有可能是没有听的,好想你要在10分钟内判断12副牌吧,好像。。。然后最后那个其实要全对真的很难,好吧,或许是我那个时候比较鶸,现在先玩也懒得装了。。。

而且当时刚做了那个自动扫雷机不久,所以想到的就是截获游戏的界面,然后判断出题目,在自动判断出听牌的东西,但是基于图像处理的题目分析,想想就很烦,虽然不是不能做,但是我觉得后面那个判断逻辑更加有“思维含金量”,所以我还是做一下后面那个判断内核吧~

某人说了,你这个东西如果不是用于打《东方幻想麻将》,实际鸟笼天风或者实麻的时候,基本都是派不上用场的,但是我说,其实如果我想做一个日麻的AI,这个不就成为了AI的最基础的一个模块了么?嗯,如果,我说了如果。。。【还是不要随便乱立什么奇怪的flag的好。。】

嘛,虽然想想这个东西技术含量和实用性确实不强,还不如学学学校某位棍力十足的大牛写那个舍牌分析器,可以判断出怎么打可以让接下来的进章面最广~

好吧,其实也就是几个小时的产物,所以界面什么的,就别在意啦~

QQjietu20130914190357其实以前CSDN上有人发布过一个版本,【我会告诉你我软件的那些麻将图片就是那个里面偷来的!??】,当时我记得哪里说了这个版本不能分析七对子和国士无双,嘛~也没办法,谁让这两个役在所有役里面是最奇葩的两个呢?

我自己在写的时候,也发现很难把这两个役归入到一般的通用算法里面去,最后,经过我的不懈努力,我终于把七对子给搞进去了,所以真的要判断国士无双,那么就另外判别吧,虽然也很简单的说。。。但是我的软件里面也不能判断国士无双,原因有两个,第一,我不想为国士无双这种魂淡役满专门写一段判断程序,而且要写也真的很简单啊不是么?其次,我听牌结果里面只放了9个牌的位置,因为,根本没有给国士无双13面听机会!!

嘛~随便说说实现思路就算水了这篇文章吧,另外几个核心的代码放在最后面。。


嘛,也没啥好说的,一个麻将牌的类,里面指示了每张牌的数字和类型,字牌也统一进去了

然后面子类,只是某几张牌是顺子,还是刻子,还是对子,还是不完整的顺子(就是顺子缺一张),或者是某张单独的牌

然后就是牌面类,包含若干个面子

然后就是一个迭代啦~在待分析的13张牌里面每次选取出一个面子来,可以是上面所说的五种中的任意一种,然后把这几张牌标记为不可用,然后继续迭代,知道足以判断听牌为止,再返回听牌的值。

标记结果我采用的是一个unsigned long int量就可以了,虽然位数很多,但是我只用其中的34位,每次一种牌面算出听的牌,就把对应的位置1,然后返回,每次迭代都和之前的结果做位或运算,这样就可以避免重复的了。。。

反正,大概如此。。。不明白的就自己yy脑部一下啦~【我才不会告诉你我是为了赶着去打天凤才随便写写的。。】


【完】

本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com


Majong_Card.h

Majong_Card.cpp

Majong_Analyse.h

Majong_Analyse.cpp

PaiMian.h

PaiMian.cpp

MianZi.h

MianZi.cpp

MajongDlg.h

MajongDlg.cpp

分类: 黑暗科技研究 标签: , , ,
  1. 本文目前尚无任何评论.
验证码:6 + 9 = ?

友情提示:留言可以使用大部分html标签和属性;

添加代码示例:[code lang="cpp"]your code...[/code]

添加公式请用Latex代码,前后分别添加两个$$