合成类游戏基本玩法就是同样游戏角色拖动到一起,就可以合成一个高一级别的新角色。
对于我们写脚本来说,首要解决的问题就是如何准确识别角色的级别,以上图为例,每个人物左侧有一个编号,这个数字就是角色的等级。
针对于这个游戏,人物虽然在不停的颤动,但是级别的数字是固定不动的。所以这个对于我们识别是比较容易的。
在识别的过程中,为了提高识别效率,我们只识别12个人物所在的位置区域,当然别的游戏可能16格或者更多,暂时不考虑无格子的类型啊。
识别完第一个人物等级,再识别第二个人物等级,这个识别范围的变化是有规律的,先横向依次移动4个格子,然后在第二行、第三行执行同样的操作。这种代码表示就是双重循环。
- For j = 0 To 2
- For i = 0 To 3
- //要循环的内容
- Next
- Next
复制代码假定我们初始位置是x0,y0,也就是下图中红框左上角的点坐标。
红框的大小是每个人物占的位置,宽度x,高度是y,这个距离一定要测量准确,不能瞎填。
得到上面的数据以后,我们的找图范围就可以定下来了。
x0+i*x,y0+j*y,x0+(i+1)*x,y0+(j+1)*y
- For j = 0 To 2
- For i = 0 To 3
- //找图范围是 x0+i*x,y0+j*y,x0+(i+1)*x,y0+(j+1)*y
- Next
- Next
复制代码这个范围是随着循环而有规律变化的,保证每次循环找不同区域。
下面是识别数字,我的思路是从小到大,原因是小的人物合成会变成大一级别的人物。这样识别操作会友好一些,不过也不唯一看个人习惯。
接下来要解决的拖动合成问题了,拖动合成分两个步骤:
①确定有两个一样等级(数字相同)的人物,获取他们的坐标。
②把第一个人物拖动到第二个人物上。
我解决这个问题的思路是,用一个数组存储坐标。
比如,我获取到等级为11的人物坐标,当获取到第一个以后,我会先存入数组中备用,之后我会继续往后识别看看还有没有等级11的人物。
到这里有两种可能性:一是还有1个或多个等级11的人物,二是没有等级11的人物。
先说第一种情况:还有等级11的人物,把获取到第二个等级11人物的坐标再次存入到之前的数组中。这时数组里面就有两组坐标。之后加个判断当数组里面有两个内容以后,执行拖动人物的操作(滑动)。下面的操作很关键,拖动完以后,原有的坐标已经没用了,清空数组里面的坐标,开始新的识别操作,以上操作重复执行。
第二种情况:也就是没有识别到等级11的人物,那么此时说明整个画面上就只有一个11级的人物,那么11级的识别结束到此为止。开始识别等级12的人物。这个时候一定要注意,也要清空数组的坐标,否则会出现这种情况:就是数组中存在等级11的坐标,又再得到一个等级12的坐标,误以为两个是同等级人物的坐标,而执行了拖动人物合成的操作。
关于拖动人物合成这一步就比较简单,一个滑动命令解决了,每次拖动成功以后,点一下购买新的人物,补充因合成后造成的空缺。
在识别的时候,我是用的找图命令,每个数字截一个图,之后每张图用数字命名,目的是把循环的计次变量作为找图的名称。
比如像找等级6-10,就可以这样写,n作为图片名称的变量。
- For n = 6 To 10
- FindPic 0, 0, 0, 0, "Attachment:"&n&".png","000000", 0, 0.9, intX, intY
- If intX > -1 And intY > -1 Then
- End If
- Next
复制代码关于合成基本思路就是这样的,这类有固定格子的都可以用这个思路。当然也会有一些“意外情况”,比如金币不足,出现飞过去的宝箱等等,遇到这种情况加上对应的判断。