编程环境:TIA V16 WINCC Professional.
主要功能:
正确找出隐藏的地雷并标记出来,此处预定义了15*8个位置和20颗地址,其中地雷是随机分布的;
游戏启动后通过点击左右键,有对应的action响应;
左键 1.没有雷的方块时候显示一大片空白数字。
2.周围有雷的方块,只显示方块本事的数字。
3.点到雷上,显示所有方块和地类图标,游戏结束;
右键 1.没有红旗的地方,点击后会出现一面红旗;如果该方块下面有地雷,地雷数会减一,不然保持不变;
2.有红旗的地方,右键后红旗消失;
运行后的画面:

左键分别点击普通数字区域,大片没有地雷区域后:

右键正确标记地雷位置后,数字减少

左键点击埋藏地雷方块后,游戏结束,全部区域可见:

主要代码:(红色下划线不是错误,是在Load动作定义的全局变量,这算是脚本编辑器的一个缺陷)
首先是装载画面,涉及到初始化变量,摆放方块, 随机产生地雷,计算周边地雷的数据矩阵,等工作内容比较多;

右键主要是用来插旗和判断插的对不对做记录(红色是正常的);

下面的模块叫做ZERO扩展, 是把周围连在一片没雷的区域显示出来,类似水滴**的效果,此处使用递归实现,有一定小难度;

左键点击的时候会有三种情况处理:
下面是数字。显示数字;
下面是地雷,红色标记,显示全部的地雷和数字,弹出失败对话框;
下面是一片0, 把一片0全都显示出来。

具体实现步骤:
在画板上主要有三类元素:按钮120个,地雷图标20,红旗图标20.
1. 首先是第一层是方块的满画布,一开始方块是随意放在边角的,Load 画面后,按顺序把方块整齐排列为8*15的队列;
2. 随机生成地雷的坐标位置,把地雷布列到方块中,地雷不可见;
3. 根据周围地雷所在坐标,生成周围坐标的数字显示,比如某个方块周围(8个方向)有2颗地址,那么这个方块就该显示2;数字生成后存放于全局数组,不显示;
4. 左键点击出现一大片空白功能有一定难度;此处使用递归实现,往4个方向去发散,同时判断是否已有相同坐标已经存在数组中,排除掉相同的坐标,这是第一步扩散,完成周围没有地雷块的扩散,同时颜色标绿;第二布扩散是让前面第一步存储的坐标网四周再有限扩散一步(不同于递归的无限扩散),这步扩散不会显示出地雷,因为完全没有雷的区域和地雷之间至少存在一层数字间隔;
5. 右键标记的过程中,实现旗帜的标记和地雷的数量显示,所以如果放错位置的旗子,可以通过是否地雷数发生变化来发现,呵呵;
Tips: WINCC advanced 也支持脚本,但是好多函数不支持,比如Msgbox; 也不支持全局变量;因为有多个函数组成(Sub or Function),所以只好用了Processional 版本;在WINCC RPO 中全局变量一直是红色,虽然编译不报错,但是也是有点别扭的感觉;整个过程也是边写边调试,熟练后效率会提高;随机数函数生成的数字在ADV 中没问题,但是在PRO 中会重复,不知道什么鬼,加入randomize后解决;
-------------------------------------------------------------------------------END---------------------------------------------