matlab 麻将,麻将AI开发计划正式启动!

策划开发麻将AI已久,差不多始于2年前的一个冲动,想到既然网络麻将互相看不见没有肢体信息等等,那么AI数据流不应该弱于人类才对。。当年因为实在懒得做GUI然后放弃了。之后因为时间上的问题一直没有捡起来。

这几天看到U9老师写了麻将GUI,突然觉得是时候了,于是开了这个博客,打算集中把这个AI搞起来

。。。嘛我基本来说并不是程序员,所以写出来的东西可能问题很大

而且最关键的是我平时的时间很少,几乎拿不出多少来做这种业余工作。。

总之加油吧!

测试一下code命令能不能用:

[code]

#define MIO "mio zui cong ming le , mio de

cheng xu cai mei you bug"

[/code]

咦。。不知道是不是这样用。。

好了进入正题

·开发平台 linux RH

·语言 c++

·开发工具 vim

·编译器 g++

·技术支持

CFv笨呆呆 最高七段R2116

先从最基本的函数入手,总之最基本的几个应该是

·IsAgari(IsTenpai) 判断和了与否,听牌与否

·Score 算点(分成算符和算番两部分)

·Syantensu 向听数

没有这几个函数,后面的工作全都无法进行。所以今晚刚开工就马上动手写了IsAgari函数

Agari算法有很多种,取决于手牌结构。虽然U9老师似乎用的是

t_pai tehai[14];

这样的结构,使用递归来削减面子数来判断和牌。这个算法很快就实现了,但是考虑到各种各样的问题,(主要是尽量优化AI计算效率?)最终决定在这里放弃递归而选择一种基于这样手牌结构

int tehai[34];

的一个O(1)的算法。于是这个算法也完成了,没有怎么测试不知道有没有问题。等测试后再写上这个算法。不过看起来貌似是没问题的!

至于听牌什么的 扫一遍34种牌就行了吧。。不想写什么快算法了,头很大

接下来的问题就是Score 算点

这个问题很大很大,mio想了一个小时也没想出怎么才能和刚才的IsAgari紧密联系,总觉得如果和往常一样写什么

IsSananko

IsPinfu

IsTanyao

神马的 有点不搭。。。因为前面的算法中使用了大量的位运算,这里也想尽可能的使用位运算来解决问题。役种大致想要做这样的结构:

enum{ Richi=0,

Iipatsu,

Tsumo,

...

Sananko

}

这样一个枚举(这是C语法吗?我都不记得enum要怎么写),然后用Yaku[n](n是役种数)来记录。

至于会不会这部分也变成位运算的(我够

以后再看吧。

插点图片

a4c26d1e5885305701be709a3d33442f.png

我似乎从学习用c写程序到现在也只写了这么几个。。一直都在用matlab呀python呀简单方便的东西呢

p8_maj就是这次的麻将程序了

a4c26d1e5885305701be709a3d33442f.png

只有这样子而已。。连个.h都没有写

a4c26d1e5885305701be709a3d33442f.png

像这个样子给定了手牌,是123m 123p 12344s 西西西

和了的牌,正确的运行结果应该是agari

a4c26d1e5885305701be709a3d33442f.png

于是果然是正确的。

嘛把名字遮起来什么的不要在意了。

好了今晚睡觉了~以后慢慢更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值