|
近来比较忙,没有能够及时升级游戏及更正些BUG,非常抱歉!这里简单介绍下本游戏的一些思路和技术实现,做为同道中人的借鉴或者反面教材吧。
本游戏AI层的思路基本沿用了台湾吴先生在象棋算法论文,其核心搜索算法采用了AlPHA-BETA剪枝,实际上这算法本身就意味着游戏水平不可能达到上乘的象棋境界--舍子取势,因此如果不配合象棋专家系统的话,棋力是可以限量的,无论计算机多快。当然全搜索是几乎不可能的,目前我还没有更好的解决办法。。。顺便提一句,为表示计算机实际水平,本游戏没有采用任何的棋谱辅助,也就是说,完全是计算机的棋力。
在这里,我主要解释下花费我很多时间的长将问题的解决方案,无论您赞同与否,希望能对您有所帮助。
我借鉴了其他同类游戏的思路,基本上采用的是一种Move-UnMove的虚走一步的方案,然后交替扮演红方黑方,如果某走法会造成对方只有一种应法,则避免重复走此招。此思路有两大优点,一、可以防患于未然;二、可以沿用要长捉等场合,但由于判断在递归循环中(这里不解释了,想必同道们明了此意),所以对游戏运算有较大影响,虽然可以通过预先的条件过滤,但到残局阶段占运算负载比例过高。但如果您是这游戏的参赛者,您可能发现,这里的想法和上述不同。这里采用的是一种“亡羊补牢”的处理思路,就是说,等到已经出现长将再处理。虽然此思路可能造成长将时多走一个半回合的废棋,但对非长将棋步的运算负载可以忽略不计,因为长将毕竟不常出现,应该说,利多弊少。
由于本游戏是单步处理系统,也就是说,每步棋都不依赖于其前手,当时主要考虑到能够实现多机器分散处理(当然分散处理是开发成功了,但却没有高速机器可用),这给处理长将带来额外的难度,显然保存以前每一步是不妥的,因此就希望算法中回溯尽量少些,因为这是个特例,这里就不多解释了。
此外,关于游戏的难度问题,因为本游戏未采用棋谱杀着,所以总体感觉偏于防守,对进攻算法有明显的缺陷,往往示弱于“临门一脚”,这是可以通过只改进算法调整的,但需要时间精力。
总之,想做点自己想做的事情总是很难,不想做却非要做的事总是很多 ......这也许是你我共同的悲哀?
Musix, 2001/3/18, 扬州
|