WINCC “扫雷”-VBS

已锁定

1Shadow1

  • 帖子

    155
  • 精华

    6
  • 被关注

    76

论坛等级:侠士

注册时间:2013-12-11

白金 白金 如何晋级?

WINCC “扫雷”-VBS

2145

4

2023-06-24 14:20:10


编程环境:TIA V16 WINCC Professional.

主要功能

正确找出隐藏的地雷并标记出来,此处预定义了15*8个位置和20颗地址,其中地雷是随机分布的;


游戏启动后通过点击左右键,有对应的action响应;

左键 1.没有雷的方块时候显示一大片空白数字。

        2.周围有雷的方块,只显示方块本事的数字。

        3.点到雷上,显示所有方块和地类图标,游戏结束;

右键 1.没有红旗的地方,点击后会出现一面红旗;如果该方块下面有地雷,地雷数会减一,不然保持不变;

        2.有红旗的地方,右键后红旗消失;

运行后的画面:

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

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


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


主要代码:(红色下划线不是错误,是在Load动作定义的全局变量,这算是脚本编辑器的一个缺陷)


首先是装载画面,涉及到初始化变量,摆放方块, 随机产生地雷,计算周边地雷的数据矩阵,等工作内容比较多;


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




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


左键点击的时候会有三种情况处理:

  1. 下面是数字。显示数字;

  2. 下面是地雷,红色标记,显示全部的地雷和数字,弹出失败对话框;

  3. 下面是一片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---------------------------------------------



WINCC “扫雷”-VBS 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32968条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。