五子棋禁止使用多个帐号刷取好分数帐号登录是什么意思,不允许使用两个帐号比赛吗

当前位置&&&&&&&&&同时使用多个帐号登陆QQ游戏
更多文章查询:&
同时使用多个帐号登陆QQ游戏
&&&&&&&日09:30&&来源:&&作者:kissmeszh&&
【文章摘要】如果你想用自己的多个QQ号码登陆上去自己和自己玩游戏,或者想在玩“五子棋”的同时还可以下“中国象棋”,是不,被允许的,因为腾讯怕有人使用故意输棋的方式提高自己的游戏等级(有作弊之嫌)。下边就教你突破这个限制。
  随着网络和宽带的普及,各种在线游戏平台如雨后春笋般冒了出来,腾迅QQ也不甘人后推出了自己的新型游戏平台。如果你下载了最新版的QQ聊天软件就会自动安装QQ游戏,只要用自己的QQ号码和密码登陆到游戏大厅,就可以玩各种游戏。可是在QQ游戏中我们只能用一个QQ账号登陆上去玩。如果你想用自己的多个QQ号码登陆上去自己和自己玩游戏,或者想在玩“五子棋”的同时还可以下“中国象棋”,是不,被允许的,因为腾讯怕有人使用故意输棋的方式提高自己的游戏等级(有作弊之嫌)。下边就教你突破这个限制。  如果你的电脑安装有最新版的QQ,就会自带QQ游戏。如果你的QQ版本老的话,可以到腾讯下载一个名为QQGame.exe文件回来,即QQ游戏客户端软件,下载地址:/hall/QQGame.EXE。游戏方法与传统的网上游戏方法类似,很容易上手。  下面就到了本文最关键的地方,用多个帐号同时登陆。这里必须修改QQGame.exe文件。此时我们需要一款十六进制文件编辑软件,例如 UltraEdit、WinHex或Hview,在本文中我们以UltraEdit为例来说明具体的方法和步骤,软件下载地址:.cn/html/701.html。  工具介绍:UltraEdit是一款非常出色的文字、Hex、Ascll码编辑软件,可以取代记事本,内建英文单字检查、C++及VB指令突显,可以对EXE和DLL文件进行编辑。该软件可以让我们随意修改应用程序,让软件听我们的指挥。在这里我们主要利用的是UltraEdit出色的文件编辑和查找功能,来查找并修改QQGame.exe中的关键代码,从而使得QQCame.exe不再按照腾讯事先设定的指令行事。  运行UltraEdit,点击“文件/打开”,找到“Program Files\Tencent\QQGame”文件夹中的 QQGame.exe文件(假设QQGame安装在该月录下),将它加载进来,然后单击“搜索/查找”,会打开“查找”对话框,在“查找内容”一栏中输人“EC07459”(注意输人时不要引号),将上述代码替换为, “EBC09090”,然后保存退出即可。  现在,你就可以在QQ游戏中使用两个以上的账号登陆了!还不赶快去试一试。^0^  注意:同一个QQ号码虽然可以多次登陆到QQ游戏中,但不能用该号码同时玩一个游戏,否则会出现一个对话框提示你:“您的同一个号码登陆了服务器,请注意保护您的密码”,再有,在用了某个QQ号码登陆到QQ游戏后,又使用另外一个QQ号码登陆QQ游戏,此时会弹出一个对话框,提示你:“无法注册指定的老板键Alt+Q” ,没有关系,只要单击、“确定”按钮即可进人QQ游戏大厅。热门推荐:
责任编辑:${ownEditor}
&关于&QQ游戏 技巧&相关报道
&硅谷动力最新热点
loading...
频道热文排行
经典软件下载
往期精彩文章
网站合作、内容监督、商务咨询、投诉建议:010-
Copyright © 2000--
硅谷动力公司版权所有 京ICP证000088号十四步实现拥有强大AI的五子棋游戏 - liugoodness - 博客园
又是本人一份人工智能作业&&首先道歉,从Word贴到Livewrter,好多格式没了,也没做代码高亮&&大家凑活着看&&想做个好的人机对弈的五子棋,可以说需要考虑的问题还是很多的,我们将制作拥有强大AI五子棋的过程分为十四步,让我来步步介绍。
第一步,了解禁手规则
做一个五子棋的程序,自然对五子棋需要有足够的了解,现在默认大家现在和我研究五子棋之前了解是一样多的。以这个为基础,介绍多数人不大熟悉的方面。五子棋的规则实际上有两种:有禁手和无禁手。由于无禁手的规则比较简单,因此被更多人所接受。其实,对于专业下五子棋的人来说,有禁手才是规则。所以,这里先对&有禁手&进行一下简单介绍:
五子棋中&先手必胜&已经得到了论证,类似&花月定式&和&浦月定式&,很多先手必胜下法虽然需要大量的记忆,但高手确能做到必胜。所以五子棋的规则进行了优化,得到了 &有禁手&五子棋。五子棋中,黑棋必然先行。因此&有禁手&五子棋竞技中对黑棋有以下&禁手&限制:&三三禁&:黑棋下子位置同时形成两个以上的三;&四四禁&:黑棋下子位置同时形成两个以上的四;&长连禁&:六子以上的黑棋连成一线。黑棋如下出&禁手&则马上输掉棋局。不过如果&连五&与&禁手&同时出现这时&禁手&是无效的。所以对于黑棋只有冲四活三(后面会有解释)是无解局面。反观白棋则多了一种获胜方式,那就是逼迫黑棋必定要下在禁点。
为了迎合所有玩家,五子棋自然需要做出两个版本,或者是可以进行禁手上的控制。
第二步,实现游戏界面
这里,我制作了一个简单的界面,但是,对于人机对弈来说,绝对够用。和很多网上的精美界面相比,我的界面也许略显粗糙,但,开发速度较高,仅用了不到半天时间。下面我们简单看下界面的做法。
界面我采用了WPF,表现层和逻辑层完全分开,前台基本可以通过拖拽完成布局,这里就不做过多介绍。根据界面截图简单介绍
1处实际上市两个渐变Label的拼接,2、3是两个label,4、5实际上是两个Button,但是没有做事件响应。通过按钮6、7、8、9 的控制,修改label和Button的Content属性。也许有人会奇怪,为什么Button会丝毫看出不出有Button的影子,这里战友whrxiao写过一个Style如下
&Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"&
&Setter Property="Template"&
&Setter.Value&
&ControlTemplate TargetType="{x:Type Button}"&
&ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/&
&/ControlTemplate&
&/Setter.Value&
这里我们把这个Style称为Style1。界面逻辑上,将是否开始、是否禁手和是否电脑先行作为两个全局变量的布尔型值,通过设置和判断bool型值进行逻辑上的控制。中间的棋盘是个canvas,一个15*15的Grid放满Button并将每个Button应用Style1开始时候透明度设为0,也就是根本看不到,在下棋的时候改变Button的背景和透明度,实现落子的效果,因为Grid的位置关系,所以可看起来好像是下在横竖的交线处。
第三步,进行输赢判断:
因为规则不同,&无禁手&和&有禁手&的输赢判断自然不同。先看无禁手:这个比较简单,遍历每个位置,然后从这个位置开始,分别判断它的四个方向:即横、竖、左上到右下、左下到右上。每个方向从中间点开始,往两边数连子数,然后将两个方向的连字数加和再加一(中间的棋子)。如果得到大于等于5,那么就说明下子方赢棋。
对于有禁手的五子棋,输赢判断还需要判断禁手,禁手的判定较为复杂。将待判断点放入黑棋子。然后搜索待判断点周边棋盘;还原棋盘;利用搜索结果依次对各方向进行分析,判断黑棋放入后所产生的棋型是否形成长连或形成某种四连或三连的的棋型。若形成长连,判定为禁手,返回长连禁手标识。若形成某种四连或三连的棋型,该棋型统计数加1,再对下一个方向进行判断,直到各个方向分析结束。若四连棋型或三连棋型的统计数大于1,则返回为禁手。其余情况返回非禁手。
第四步:构造棋型估分
&有禁手&规则比较复杂,涉及到比较多下棋方面的技巧,而且对算法的思路没有丝毫影响,所以下面我们主要考虑无禁手规则下的AI设计。若设计好无禁手AI,只需要让AI执黑时坚决不下到禁手点,就可以很快构造有禁手的AI。虽然这种方式没有利用有禁手规则下的技巧,但这些技巧只需要修改下面所讲到的估分函数即可。
我们可以将五子棋的连珠可以分为以下几种:
成5:即构成五子连珠
活4:即构成两边均不被拦截的四子连珠。
死4:一边被拦截的四子连珠
活3:两边均不被拦截的三字连珠
死3:一边被拦截的三字连珠
活2:两边均不被拦截的二子连珠
死2:一边被拦截的二子连珠
单子:四周无相连棋子
根据五子棋的技巧,可以将五子棋的棋型用连珠进行分类,分类过后我们按照威力给每种棋型打分。因为五子棋一次只落一子,因此很容易理解,双活三和三活三的威力是一样的,类似情况不多做解释。程序中,我以100分为满分,对棋型进行了以下打分:
成5, 100分
活4、双死4、死4活3, 90分
双活3, 80分
死3活3, 70分
死4, 60分
活3, 50分
双活2, 40分
死3, 30分
活2, 20分
死2, 10分
有了估分方法,就有了五子棋AI的基础,接下来就是一些博弈的方法了。
第五步:得到位置估分AI
单纯应用棋谱以及对五子棋当前局势的分析,对每步进行估分,程序中做如下工作:将每个位置进行分析,假设AI落子在该位置,用以上打分规则为AI打分,并将得到的分数加一。然后,假设玩家落子在该点,为玩家打分,然后将所有的分值汇总。取最高分作为这个位置的估分,接下来就是取分数最高的位置下棋了。&位置估分&,下棋的时候,既可以考虑到自己攻击对手,又能考虑到对对手的防御,可以说,很多时候可以顶上考虑两步的AI。作实验,从网上下载了一个用博弈做的AI,和&位置估分&对下,结果是一胜一负。谁先子,谁赢得胜利。而且一步估分毫无疑问是最快的,即使遍历所有位置,也能很快的做出决策。
第六步:应用博弈树,提高AI智能
做五子棋的博弈,自然会用到博弈树,这里我说下自己的思路。在对弈中,根据下一步由谁来走,AI对任何一个局面根据前面估分方法给出一个分数,我们把这个估分方法汇总成一个评估函数,并返回分值。据此来选择下一步的走法。由于人和AI是轮流落子,可以将人的估分也算入,并将前面加负号。那么,估值越大表明对AI越有利,估分越小则表明对AI越不利。那么每次AI选择都是从它可能的走法树的某层节点,返回评估值中最大点。而用户总是从走法树的某层节点中选择最小点,从而形成一棵极大极小搜索树,然后根据深度优先搜索,可以最后得到固定搜索深度下的一个最好的走法。我做了下试验,单纯应用博弈树,可以在100ms之内让AI考虑完整的两步,由于组合爆炸,当需要考虑三步的时候,就需要6s左右,4步就需要1分钟。拿两步来和一步估分作比较,虽然比较慢,但是确实有了一定智能。
第七步:考虑层数,提高AI智能
上面的设计对于返回值是统一处理的,但是,层数是个很重要的信息.因为下棋时如果能2步获胜,不应选择4步获胜。对于输的棋型层数就更重要,AI必须尽可能拖延输的时间,就有更大的可能让AI化险为夷。这样,可以通过设置一个dep值。深度约浅,dep越大,用dep和得到的得分相乘,得到搜索节点的得分,再进行以上算法,进一步提高AI的智能。
第八步:应用&-&剪枝,提高AI速度
在搜索博弈树的过程中,实际上搜索有很多点是多余的,例如下图
图中,方形框节点是该AI走,圆形框节点是该人走.比如C节点,它需要从E和F当中选取最大的值。目前已经得出E为2,当搜索F节点时,因为F是人走的节点,那么F需要从K L M中选取最小的,因为K已经是1,也就是说F&=1,那么L,M就不需要搜索,因此就发生了&剪枝。然后看A节点,该人走了,需要从C和D中选取最小值,因为C节点是2,而G是7,那么D至少是7。因此,D的其他节点不必再考虑,就发生如上图所示的&剪枝。总结上面规律,我们可以得到剪枝方法如下:
当前为AI下棋节点:
&剪枝:如果当前节点的值不比父节点的前兄弟节点的大值大,则舍弃此节点。
&剪枝:如果当前节点子节点的值不比当前节点的前兄弟节点中的最小值小,则舍弃该子节点和该子节点的所有后兄弟节点。
当前为用户下棋节点:
&剪枝:如果当前节点的某子节点的值不比当前节点的前兄弟节点中的最大值大,则舍弃该子节点和该子节点的所有后兄弟节点。 &剪枝:如果当前节点的子节点的值不比当前的父节点的前兄弟节点中的最小值小则舍弃此节点。
经过&-&剪枝,可以极大的减少搜索的数量,很多时候,能把几十亿的搜索数量,缩小到几亿,那么,就可以把搜索深度增1。
第九步:应用下棋范围,提高AI速度
当前节点的子节点的数量和排列顺序对于搜索的速度起着至关重要的影响。根据五子棋的特点,可以产生一个棋面搜索范围。记录当前棋面所有棋子的最左最右最上最下点构成的矩形,我们认为下一步棋的位置不会脱离这个框3步以上。这样在棋子较少的时候,搜索节点的数量大大减少。可以将AI的速度提高一倍左右。
第十步:利用棋型得分,提高AI速度
因为每种下法都对应一种得分,所以,可以每次只考虑当前得分前十的节点进行下一步搜索,大大减少了搜索范围,可以进一步增加搜索的深度。
第十一步:利用置换表,提高AI速度
我们一般用递归的方法实现博弈树,但是,递归的效率是低的,而且很明显,有很多重复搜索的节点,所以,我们可以用一个表,记录下所有搜索过节点的情况,然后只要遇到搜索到的节点,就可以直接得到结果。置于这个&表&是什么,就是一个置换表,利用Zobrist算法,进行Hash处理,使在表中查找的时间大大缩短,这样AI的速度又能提高一个数量级。
第十二步:利用多线程,提高AI速度
我们其实可以利用多核技术,利用多个线程,让算法实现并行计算,提高AI的速度。我们在第一层用一个线程分配器把第二层的候选节点分配给多个线程,每个线程包含着从第二层一个候选节点开始的搜索,然后等所有线程结束后,将所有线程的结果进行汇总,选出最大值。并行的程序,可以将速度提高一倍左右。
第十三步:利用随机化算法,让确定方法不能必胜
由于AI算法的固定性,所以一担玩家一次获胜,按照相同的走法,必然会再次获胜。但除了必杀招或者必防招,一个局面很多时候没有绝对最好的走法。而是有一些都不错的走法,那么可以把这些评分差不多走法汇集起来,然后随机选择它们中的一种走法,避免AI的走法的固定.这样最简单的方法避免固定方法AI必输。
第十四步:让AI自学习,不再同一个地方犯错
上面的算法还没有自学习的能力,这样AI在下棋时还可能会重蹈覆辙。因此在每盘棋结束时,如果AI输,则进行大于搜索深度的步数回退。可以把倒数为搜索深度数目的局面定为目标局面,从倒数深度加一步局面进行预测,找到不会导出必败目标局面的局面。然后记录下这个局面和前面的局面,并据此修改评分函数。这样AI就不会犯曾经犯过的错误,达到自学习的效果。
做到以上十四步,一个拥有强大AI的五子棋游戏即可诞生!1、五子棋黑棋在比赛和游戏中的区别?请举例!黑大优、平衡局和妖刀的下法,请举例!_百度知道
1、五子棋黑棋在比赛和游戏中的区别?请举例!黑大优、平衡局和妖刀的下法,请举例!
要和你视频、如果有位网友和你刚认识不久,你会怎么做,以前用钱买女人,在聊天时对你说吻你有感觉吗、请帮我取个好听的英语名字带怡字? 这句话是肉麻,在聊天时对你说吻你有感觉吗2,但一年没有联系?3?搂着你睡,并向你借游戏帐号,生活中有老婆、开玩笑还是真实的话,密码?请问用钱买女人,谢谢
提问者采纳
若两个只出现其中的一个33,如果长连和禁手一起出现,长连算赢,则都不能为赢、433是禁手
提问者评价
众多资深游戏玩家为您解答
地下城与勇士
其他类似问题
为您推荐:
其他3条回答
我也是啊换了好几个号都不好使 要是被举报了也不能好几个都被举报了吧 别的号我都没用过 也不是申请的新号 怎么回事 求大神指点 确认你的微信是在线状态,用你朋友的微信搜下你的号码,看是否能搜到。 微信搜附近的人
我是日出生我的幸运色,幸运数字! 蓝牙对战还是网络对战? cS蓝牙战 蓝牙有台球,斗地主,踢足球,篮球……网络就太多了,竞技的差不多都有 多…… 斗地主,张飞传,很多的 什么手机啊?诺基亚
没意思,不好玩
下法的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
使用您的微博帐号登录,即刻尊享微博用户专属服务。
使用您的QQ帐号登录,即刻尊享QQ用户专属服务。
使用您的人人帐号登录,即刻尊享人人用户专属服务。
按住视频可进行拖动
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
收藏成功,可进入查看所有收藏列表
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看:
五子棋比赛清晰
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/164eL4
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/164eL4
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
爸爸去哪儿2游戏 立即参与
五子棋比赛清晰
播放量数据:
你可能还想订阅他们:
&正在加载...
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"&
&a href="javascript:void(0);"&
&span>{{start}}-{{end}}&/span&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"&
&a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《》剧集:
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入300字
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制十四步实现拥有强大AI的五子棋游戏 - liugoodness - 博客园
又是本人一份人工智能作业&&首先道歉,从Word贴到Livewrter,好多格式没了,也没做代码高亮&&大家凑活着看&&想做个好的人机对弈的五子棋,可以说需要考虑的问题还是很多的,我们将制作拥有强大AI五子棋的过程分为十四步,让我来步步介绍。
第一步,了解禁手规则
做一个五子棋的程序,自然对五子棋需要有足够的了解,现在默认大家现在和我研究五子棋之前了解是一样多的。以这个为基础,介绍多数人不大熟悉的方面。五子棋的规则实际上有两种:有禁手和无禁手。由于无禁手的规则比较简单,因此被更多人所接受。其实,对于专业下五子棋的人来说,有禁手才是规则。所以,这里先对&有禁手&进行一下简单介绍:
五子棋中&先手必胜&已经得到了论证,类似&花月定式&和&浦月定式&,很多先手必胜下法虽然需要大量的记忆,但高手确能做到必胜。所以五子棋的规则进行了优化,得到了 &有禁手&五子棋。五子棋中,黑棋必然先行。因此&有禁手&五子棋竞技中对黑棋有以下&禁手&限制:&三三禁&:黑棋下子位置同时形成两个以上的三;&四四禁&:黑棋下子位置同时形成两个以上的四;&长连禁&:六子以上的黑棋连成一线。黑棋如下出&禁手&则马上输掉棋局。不过如果&连五&与&禁手&同时出现这时&禁手&是无效的。所以对于黑棋只有冲四活三(后面会有解释)是无解局面。反观白棋则多了一种获胜方式,那就是逼迫黑棋必定要下在禁点。
为了迎合所有玩家,五子棋自然需要做出两个版本,或者是可以进行禁手上的控制。
第二步,实现游戏界面
这里,我制作了一个简单的界面,但是,对于人机对弈来说,绝对够用。和很多网上的精美界面相比,我的界面也许略显粗糙,但,开发速度较高,仅用了不到半天时间。下面我们简单看下界面的做法。
界面我采用了WPF,表现层和逻辑层完全分开,前台基本可以通过拖拽完成布局,这里就不做过多介绍。根据界面截图简单介绍
1处实际上市两个渐变Label的拼接,2、3是两个label,4、5实际上是两个Button,但是没有做事件响应。通过按钮6、7、8、9 的控制,修改label和Button的Content属性。也许有人会奇怪,为什么Button会丝毫看出不出有Button的影子,这里战友whrxiao写过一个Style如下
&Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"&
&Setter Property="Template"&
&Setter.Value&
&ControlTemplate TargetType="{x:Type Button}"&
&ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/&
&/ControlTemplate&
&/Setter.Value&
这里我们把这个Style称为Style1。界面逻辑上,将是否开始、是否禁手和是否电脑先行作为两个全局变量的布尔型值,通过设置和判断bool型值进行逻辑上的控制。中间的棋盘是个canvas,一个15*15的Grid放满Button并将每个Button应用Style1开始时候透明度设为0,也就是根本看不到,在下棋的时候改变Button的背景和透明度,实现落子的效果,因为Grid的位置关系,所以可看起来好像是下在横竖的交线处。
第三步,进行输赢判断:
因为规则不同,&无禁手&和&有禁手&的输赢判断自然不同。先看无禁手:这个比较简单,遍历每个位置,然后从这个位置开始,分别判断它的四个方向:即横、竖、左上到右下、左下到右上。每个方向从中间点开始,往两边数连子数,然后将两个方向的连字数加和再加一(中间的棋子)。如果得到大于等于5,那么就说明下子方赢棋。
对于有禁手的五子棋,输赢判断还需要判断禁手,禁手的判定较为复杂。将待判断点放入黑棋子。然后搜索待判断点周边棋盘;还原棋盘;利用搜索结果依次对各方向进行分析,判断黑棋放入后所产生的棋型是否形成长连或形成某种四连或三连的的棋型。若形成长连,判定为禁手,返回长连禁手标识。若形成某种四连或三连的棋型,该棋型统计数加1,再对下一个方向进行判断,直到各个方向分析结束。若四连棋型或三连棋型的统计数大于1,则返回为禁手。其余情况返回非禁手。
第四步:构造棋型估分
&有禁手&规则比较复杂,涉及到比较多下棋方面的技巧,而且对算法的思路没有丝毫影响,所以下面我们主要考虑无禁手规则下的AI设计。若设计好无禁手AI,只需要让AI执黑时坚决不下到禁手点,就可以很快构造有禁手的AI。虽然这种方式没有利用有禁手规则下的技巧,但这些技巧只需要修改下面所讲到的估分函数即可。
我们可以将五子棋的连珠可以分为以下几种:
成5:即构成五子连珠
活4:即构成两边均不被拦截的四子连珠。
死4:一边被拦截的四子连珠
活3:两边均不被拦截的三字连珠
死3:一边被拦截的三字连珠
活2:两边均不被拦截的二子连珠
死2:一边被拦截的二子连珠
单子:四周无相连棋子
根据五子棋的技巧,可以将五子棋的棋型用连珠进行分类,分类过后我们按照威力给每种棋型打分。因为五子棋一次只落一子,因此很容易理解,双活三和三活三的威力是一样的,类似情况不多做解释。程序中,我以100分为满分,对棋型进行了以下打分:
成5, 100分
活4、双死4、死4活3, 90分
双活3, 80分
死3活3, 70分
死4, 60分
活3, 50分
双活2, 40分
死3, 30分
活2, 20分
死2, 10分
有了估分方法,就有了五子棋AI的基础,接下来就是一些博弈的方法了。
第五步:得到位置估分AI
单纯应用棋谱以及对五子棋当前局势的分析,对每步进行估分,程序中做如下工作:将每个位置进行分析,假设AI落子在该位置,用以上打分规则为AI打分,并将得到的分数加一。然后,假设玩家落子在该点,为玩家打分,然后将所有的分值汇总。取最高分作为这个位置的估分,接下来就是取分数最高的位置下棋了。&位置估分&,下棋的时候,既可以考虑到自己攻击对手,又能考虑到对对手的防御,可以说,很多时候可以顶上考虑两步的AI。作实验,从网上下载了一个用博弈做的AI,和&位置估分&对下,结果是一胜一负。谁先子,谁赢得胜利。而且一步估分毫无疑问是最快的,即使遍历所有位置,也能很快的做出决策。
第六步:应用博弈树,提高AI智能
做五子棋的博弈,自然会用到博弈树,这里我说下自己的思路。在对弈中,根据下一步由谁来走,AI对任何一个局面根据前面估分方法给出一个分数,我们把这个估分方法汇总成一个评估函数,并返回分值。据此来选择下一步的走法。由于人和AI是轮流落子,可以将人的估分也算入,并将前面加负号。那么,估值越大表明对AI越有利,估分越小则表明对AI越不利。那么每次AI选择都是从它可能的走法树的某层节点,返回评估值中最大点。而用户总是从走法树的某层节点中选择最小点,从而形成一棵极大极小搜索树,然后根据深度优先搜索,可以最后得到固定搜索深度下的一个最好的走法。我做了下试验,单纯应用博弈树,可以在100ms之内让AI考虑完整的两步,由于组合爆炸,当需要考虑三步的时候,就需要6s左右,4步就需要1分钟。拿两步来和一步估分作比较,虽然比较慢,但是确实有了一定智能。
第七步:考虑层数,提高AI智能
上面的设计对于返回值是统一处理的,但是,层数是个很重要的信息.因为下棋时如果能2步获胜,不应选择4步获胜。对于输的棋型层数就更重要,AI必须尽可能拖延输的时间,就有更大的可能让AI化险为夷。这样,可以通过设置一个dep值。深度约浅,dep越大,用dep和得到的得分相乘,得到搜索节点的得分,再进行以上算法,进一步提高AI的智能。
第八步:应用&-&剪枝,提高AI速度
在搜索博弈树的过程中,实际上搜索有很多点是多余的,例如下图
图中,方形框节点是该AI走,圆形框节点是该人走.比如C节点,它需要从E和F当中选取最大的值。目前已经得出E为2,当搜索F节点时,因为F是人走的节点,那么F需要从K L M中选取最小的,因为K已经是1,也就是说F&=1,那么L,M就不需要搜索,因此就发生了&剪枝。然后看A节点,该人走了,需要从C和D中选取最小值,因为C节点是2,而G是7,那么D至少是7。因此,D的其他节点不必再考虑,就发生如上图所示的&剪枝。总结上面规律,我们可以得到剪枝方法如下:
当前为AI下棋节点:
&剪枝:如果当前节点的值不比父节点的前兄弟节点的大值大,则舍弃此节点。
&剪枝:如果当前节点子节点的值不比当前节点的前兄弟节点中的最小值小,则舍弃该子节点和该子节点的所有后兄弟节点。
当前为用户下棋节点:
&剪枝:如果当前节点的某子节点的值不比当前节点的前兄弟节点中的最大值大,则舍弃该子节点和该子节点的所有后兄弟节点。 &剪枝:如果当前节点的子节点的值不比当前的父节点的前兄弟节点中的最小值小则舍弃此节点。
经过&-&剪枝,可以极大的减少搜索的数量,很多时候,能把几十亿的搜索数量,缩小到几亿,那么,就可以把搜索深度增1。
第九步:应用下棋范围,提高AI速度
当前节点的子节点的数量和排列顺序对于搜索的速度起着至关重要的影响。根据五子棋的特点,可以产生一个棋面搜索范围。记录当前棋面所有棋子的最左最右最上最下点构成的矩形,我们认为下一步棋的位置不会脱离这个框3步以上。这样在棋子较少的时候,搜索节点的数量大大减少。可以将AI的速度提高一倍左右。
第十步:利用棋型得分,提高AI速度
因为每种下法都对应一种得分,所以,可以每次只考虑当前得分前十的节点进行下一步搜索,大大减少了搜索范围,可以进一步增加搜索的深度。
第十一步:利用置换表,提高AI速度
我们一般用递归的方法实现博弈树,但是,递归的效率是低的,而且很明显,有很多重复搜索的节点,所以,我们可以用一个表,记录下所有搜索过节点的情况,然后只要遇到搜索到的节点,就可以直接得到结果。置于这个&表&是什么,就是一个置换表,利用Zobrist算法,进行Hash处理,使在表中查找的时间大大缩短,这样AI的速度又能提高一个数量级。
第十二步:利用多线程,提高AI速度
我们其实可以利用多核技术,利用多个线程,让算法实现并行计算,提高AI的速度。我们在第一层用一个线程分配器把第二层的候选节点分配给多个线程,每个线程包含着从第二层一个候选节点开始的搜索,然后等所有线程结束后,将所有线程的结果进行汇总,选出最大值。并行的程序,可以将速度提高一倍左右。
第十三步:利用随机化算法,让确定方法不能必胜
由于AI算法的固定性,所以一担玩家一次获胜,按照相同的走法,必然会再次获胜。但除了必杀招或者必防招,一个局面很多时候没有绝对最好的走法。而是有一些都不错的走法,那么可以把这些评分差不多走法汇集起来,然后随机选择它们中的一种走法,避免AI的走法的固定.这样最简单的方法避免固定方法AI必输。
第十四步:让AI自学习,不再同一个地方犯错
上面的算法还没有自学习的能力,这样AI在下棋时还可能会重蹈覆辙。因此在每盘棋结束时,如果AI输,则进行大于搜索深度的步数回退。可以把倒数为搜索深度数目的局面定为目标局面,从倒数深度加一步局面进行预测,找到不会导出必败目标局面的局面。然后记录下这个局面和前面的局面,并据此修改评分函数。这样AI就不会犯曾经犯过的错误,达到自学习的效果。
做到以上十四步,一个拥有强大AI的五子棋游戏即可诞生!}

我要回帖

更多关于 五子棋 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信