预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
自动扫雷游戏技术概览onlyownedbyChenJianglong一.“影响区域”划定如上图,假如这个局面摆在我们的面前了。只有红线圈定的内部区域里面的未被挖开的方块才可能被当前局面直接影响。只有在红线圈定区域内的方块确定后,其他区域的未被挖开的方块含有的雷数才能由雷的总数做减法求得。所以我们应该先尽可能的确定红色区域内部雷的分布情况。顺便写几个有用的提示:红色区域内部的雷数是有多种可能的;红色区域内部每个方块有雷情况,有的可以精确地推出,有的不能精确推出,只能给个概率值了;最后红线外部每个方块有雷的概率是一样的。二.算式推理技术对影响区域每一位置都赋予一个符号名,或叫变量名,进行“算式推理”。对于下图的局面(calledby局面1):自动扫雷游戏技术概览onlyownedbyChenJianglong根据每个数字可以列出一个算式,总共得到3个算式:a+b=1;e+d=1;a+b+c+d+e=2;约束条件是a,b,c,d,e,f取0-1值。对于下面的这个图(局面2):根据每个数字可以列出一个算式,总共得到4个算式:a+b=2;a+b+c=2;d+e=2;b+c+d+e+f=3;约束条件是a,b,c,d,e,f取0-1值。“算式推理”指得是由原始的算式集合S0(这里是4个算式)尽可能多的推出算式中符号的确定取值。具体的算法如下:1.若算式集合S0中含有类似局面2中a+b=2这样的算式,即符号数目和等号右边的数字相等,那么可以确定每个符号的值为1,然后把确定的符号的值给S0中的其他算式中的该符号赋值,如此还可能出现类似c=0自动扫雷游戏技术概览onlyownedbyChenJianglong这样的算式(对局面2带入a=1,b=1),即左边一些符号相加后得0,那么也可以确定此类算式中每个符号取值0。不断寻找集合S0中的所有类似上面两种情况的算式,确定一些符号的取值,直到集合S0中没有类似的算式。此时得到的算式集合称作S0’。局面1,S0最后化简得到的S0’集合为:a+b=1;e+d=1;a+b+c+d+e=2;约束条件是a,b,c,d,e,f取0-1值。局面化简后得到的是a=1,b=1,c=0,d=1,e=1,f=0。这两个例子举得不好,第一个没有得到化简,第二个全化简完了。2.对S0’中的每两个式子之间做检测,若其中某个式子左边的符号是另一个式子左边符号的子集,那么这连个式子相减得到一个新的式子,并加入S0’。如,局面1通过这个过程可以得到:a+b=1;d+e=1;a+b+c+d+e=2;c+d+e=1;a+b+c=1;把S0’看做S0,转到第一步继续计算。直到集合不再能推出符号的确定值,也不能产生新的算式为止。这个算法最终得到的是一些符号的确定取值,还有一些不能“消融”的式子集合,把它叫做集合St。下面给出局面2完整的演算过程:1.a+b=1;e+d=1;a+b+c+d+e=2;(步骤一结果)2.a+b=1;d+e=1;a+b+c+d+e=2;c+d+e=1;a+b+c=1;(步骤二结果)3.a+b=1;d+e=1;a+b+c+d+e=2;c+d+e=1;a+b+c=1;(步骤一结果)4.a+b=1;d+e=1;a+b+c+d+e=2;c+d+e=1;a+b+c=1;c=0;(步骤一结果,每次只要两两检测上一轮新产生的算式和原来的算式就可以,而且有重复的话只留一个就可以)自动扫雷游戏技术概览onlyownedbyChenJianglong5.a+b=1;d+e=1;a+b+d+e=2;c=0(步骤一结果,同样也要去重)6.a+b=1;d+e=1;c=0(终止)算式推理应该是线性代数里面的线性方程的求解或者数论里面的不定方程求解,肯定还有理论和实现上的优化,由于数学基础较差,只能做到这里了。三,枚举手段经过“算式推理的过程”,现在我们手头有一些符号确定了,还有一些符号不确定但是他们之间的约束集合St是有的。接下来对于不确定的符号我们只能算出他们有雷的概率了。为了编程实现的方便,我们可以采取回溯+枚举这种手段。假设还有a1,a2,…,an这些符号还没确定,b1,b2,…,bm这些符号确定了。我们采用递归实现枚举a1,…,an取0-1的每种可能,中间结合不确定符号的约束关系做剪枝。最终枚举出来的可能情况假设如下:1110101011010….101911010100101010….100981111100010100….11191…1000011101010….10189前面那个01阵是枚举结果,第i行j列表示第i个枚举