开始几次编的AI都能被自己轻松打败,几番修正最后才算成功编出无敌AI,再简单的问题,也会犯错,思虑要周全。
发现有这么几个问题需要注意:
1,原程序存在严重bug,即我仅在按出腿键不放直到出腿帧变化为未完全出腿状况后作了收脚处理,这样就导致完全出脚后放开动作键,脚的实际位置还永远停留在空中,导致AI多次傻乎乎上来挨揍掉血…
所以必须在前进、后退、无动作时均保证收脚。
(2013.8.12注:松开按键则收脚似乎更合理)
2,原程序存在的第二个严重bug,就是双方是在同一个周期完成各种计算,然后先判断左方是否击中右方,然后再判断右方是否击中左方,造成双方同时出脚时左方占优的不公平,而因为帧率较低同时出脚又极易发生。
所以在左方踢中右方时,不能立即调整右方脚的位置。如此保证双方同时击中对方时同时扣血。
3,注意AI代码的合理位置,不要放置在整段代码的末尾,这样可能在作判断时玩家未按键,定下错误决策,随后的100ms里,情况却已发生变化。应放在每个周期键盘刷新后,因为这段代码本质作用就是决定电脑的按键状况。
4,单纯的只进攻不防守,即便是人类玩家的反应速度,也能轻松打败电脑。安全的策略需要在危险距离内,即前进一步就可能被对方的脚触及的时候,判断对方是否有攻击行为,没有则继续前进,有则停止或退避。
实战检验多次,发现还是有小概率能战胜电脑,这个看似简单的问题确实不简单。不过我暂时不想深究缘由,而打算留下这个漏洞,因为这个难度已经足够高,从游戏设计的角度来说制造一个100%无敌的AI似乎没有任何意义,意外的留下些许破绽也没什么不好。
具体漏洞等有空且脑子清醒的时候再分析吧。
现在这个游戏除了因为操作简单,又没什么音效及动画效果,外加电脑的步步紧逼,玩起来让人感觉有一点狂躁之外…基本也没啥其他问题了。
“无敌型”AI的策略流程图记录如下:
下面制定第二档难度的策略。
1,对危险距离的把握放宽一步。在前进两步则进入敌方攻击范围内之前70%几率前进,30%几率停留。
2,敌方正攻击且处于敌方攻击范围时有30%可能不后退,10%可能发起错误攻击。
3,在距敌方攻击距离两步内但尚未进入必击中区间时,50%几率发起攻击,50%前进。
4,在敌方来不及闪避距离内,80%发起攻击,20%前进。
流程图:
很快改好代码,测试。
不知道为什么,故意卖出很多破绽的AI,反倒感觉更难,玩了三把都被打败…,这太神奇了,也许是因为电脑的行动更无规律性,让玩家更难以把握的缘故吧。
不过从某把前期能占优来看,打败AI的几率还是存在的。
自此完成两种策略的AI。考虑到时间关系和以后代码肯定还会有改动,还剩两种暂时不写了,毕竟已无技术障碍。
离计划完成作品的期限越来越近了,接下来想掌握多线程,并大致了解MFC是个神马玩意,看程序中会不会有需要用到。