加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于Flash中的黑白棋AI编写心得

发布时间:2020-12-15 20:07:57 所属栏目:百科 来源:网络整理
导读:?????? 最近几天终于把老早开始做的黑白棋AI大致完成了,黑白棋的人人对战版本和五子棋相比并没有太大的本质上的区别。难点主要在吃子等方面我在前面的博客也讲了一部分了。这篇博客主要讲的还是在写人机对战的时候遇到的一些问题。 ?????? 首先界面模式问题

?????? 最近几天终于把老早开始做的黑白棋AI大致完成了,黑白棋的人人对战版本和五子棋相比并没有太大的本质上的区别。难点主要在吃子等方面我在前面的博客也讲了一部分了。这篇博客主要讲的还是在写人机对战的时候遇到的一些问题。

?????? 首先界面模式问题。游戏还是一个,但分成了两个模式,所以之前还要再加一帧用来使玩家选择。由于在之前已经写好了人人对战部分的代码,但吃子,胜负判定等等都是一个原理。所以我设立一个变量gamemode,如果玩家选择人人对战,则其值为1,随后人人对战的落子部分前面加一个判断if (gamemode == 1),人机对战同理。同时在界面上根据游戏模式显示出当前游戏模式(可以用visible实现)。

?????? 随后我们要做的是在gamemode=2的情况下人和电脑落子的代码。因为默认玩家是黑方,所以应该吧电脑白子落子写在黑方落子的监听后面保持连贯。为了效果,这里要在玩家落子后1秒,电脑才落子。于是这里就需要一个暂停程序的代码:

?????? 这段代码的意思就是暂停1000毫秒后执行tr函数,把电脑落子函数写在里面即可。

???????接下来,我们要让电脑下棋,分这么3步:0.判断哪些点是可以下白子的,筛选出来。1.选出其中的“最值得落子”的地点。2.落子,并且像人人对战一样触发吃子等函数效果。接下来我来逐一讲讲梗概。首先我先做的黑白棋人人对战版本,会有代码判断玩家点击的地方是否在逻辑上允许落子。这个代码其实和我们要求的目的已经很接近了。但由于我当时没有意识到,于是把判断和落子是写在一起的,于是把判断部分提取出来花了我一段时间(所以保持良好的编程习惯很重要啊,程序要分块写)。把这个判断作用于所有的未落子的格点便可以选出目标了。

???????然后是判断价值,AI的强大与否就主要在这个上面体现了。我的想法还是比较简单的,那个点吃的子最多,就价值最高,同时要注意占据角,边等有利位置(也要防止玩家获得)。这一部分在程序完成后任然可以不断改进完善。重要的是算法思想,语言编写对新手也是没有什么困难的。

?????? 最后是一些后续的效果触发,这就要求我们在之前有良好的习惯,分类分块的写代码,这个时候就只要引用代码就行了,会省事很多(反正我是有重新把之前的一大堆监听什么的又改成了函数。。。。)。吃子,记录逻辑坐标等等就不提了,为了悔棋,棋盘记录函数要调用。还有数子函数等等,具体看你自己的黑白棋有哪些功能而定,毕竟人机模式又是一套新的流程。

?????? 至于其他的一些辅助功能,比如倒计时,换手等等,原理都不难。我在这里稍微再讲一下倒计时。人人对战时,我留给双方的时间是10秒逾期就换手,于是就要有一个倒计时的钟表。我们可以加入一个影片剪辑(钟表的样子),然后对这个影片剪辑进行编辑,例如是每秒钟面改变一次。我就可以在第一帧钟面放上"10",然后隔24帧(这个视你的帧频而定)把上面改成“9”.做出来是这样子的:

需要注意的是,因为不在一个场景内,所以彼此引用变量的时候,需要运用特殊的引用方式,例如:

if里面表示的是主时间轴里面的exhand函数。

??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读