1、序言
前文已介绍,Codesys编程软件拥有的各种编译方式,以及强大的可视化功能,完全可以实现类似的小游戏程序编写,让疲惫的工控人员在调机的空闲之余可以休闲下,本文编写另一个小游戏,也是十几年前的文曲星上比较流行的,推箱子。
2、游戏规则
a、仓库内有若干个需要搬运的箱子和对应需要推到位的地址;
b、仓库范围内除墙体和箱子外,搬运小人可以随意走动;
c、搬运小人只能推箱子,不能拉箱子,且只能够推动一个箱子,当推的方向前有箱子或者墙时无法推动;
d、只要所有的指定位置都有箱子就算过关。
3、程序编写
3.1、编程思路
要实现推箱子游戏主要包括以下内容:
a、关卡数据:不同的关卡有不同的图形排列方式,图形有墙壁,箱子,目标红旗,推箱小人;
实现方法:关卡图形可以用数组记录,用三维数组记录所有数据,三维分别代表各图形的X坐标和Y坐标,以及对应的关数,通过X,Y坐标对应数据的数值来确定图形的样子,设定墙壁=20,箱子=10,目标红旗=1,推箱小人=5,则关口数据[2,3,1]=20,表示X轴第3列,Y轴第4行,关数是第2关(数组计数从0开始),即第2关第3列第4行的位置是一堵墙;
b、图形移动:游戏中需要推箱小人一直移动,而箱子也需要对应的移动;
实现方法:Codesys可视化中,可以改变图形的绝对运动的X坐标Y坐标来控制图形的移动,而作为软PLC,Codesys可以使用两个伺服轴来模拟图形的X轴和Y轴坐标。
c、操作方式:游戏的操作性,即如何操作实现游戏功能;
实现方法:使用上下左右4个按键控制小人移动及推进箱子,通过重新开启按钮复位。
d、关卡编辑:自定义的关卡就是需要用户自行编辑;
实现方法:使用数组记录关卡数据,通过改变数组的值就能实现关卡的编辑功能。
e、其他功能:
(1)、通关显示:通过目标位置数值判断是否完成,显示提示,并跳出下一关;
(2)、选关功能:改变关卡对应的数值,选关。
3.2、程序编写
程序编写主要包括:
a、创建多个POU,有梯形图编译模式和ST结构化文本编译模式两种,梯形图编写动作程序,ST编写数据计算和逻辑分析程序等,本例创建3个固定关卡,以及2个预制关卡供编辑是快速输入用;
b、创建两个虚轴,X轴,Y轴,显示图形移动的实际变化,通过按键控制轴动作;
c、创建两个可视化界面,界面一为游戏操作界面,界面二为关卡编辑界面;
d、通过各图形不可见控制实现变化功能,通过数据运算判断物体状态和移动位置;
4、程序运行
4.1、操作方法
本文通过Codesys仿真实现运行,操作方法如下:
a、关卡选择,改变关卡数字可以进入对应的关,本例固定关卡为3关,可以输入1,2,3;另外第4关和第5关为可编辑关口,未编辑前选择4或5是,会无数据,显示空白。
b、通过点击上下左右,控制小人移动,无法移动时小人不动作,当绿色箱子推到目标位置是,会显示黄色箱子,表示推到目标为;
c、当操作错误进入死局时,可以点击重新开始恢复到初始状态重新开始玩;
d、点击关卡编辑进入编辑页面。
4.2、关卡编辑
a、选关,只可选4,5(本例只制作了5关,有兴趣的小伙伴可以自行开发更多关卡);
b、关卡数据编辑数据表,20表示墙,10表示绿色箱子,11表示黄色箱子(绿色箱子和旗子重叠),1表示目标旗子,5表示移动小人。
c、创建确认,当关卡数据编辑完成后,点击创建确认将数据写入当前关口中,
d、预制关口与清除数据,将备选的关口数据快速输入,清除数据可将全部数据清零。
e、预览,创建确认点击后,再点击预览可以显示当前编辑出来的对应图形。
5、游戏运行
游戏运行效果如下
Codesys使用ST语言开发推箱子小游戏
Codesys使用ST语言开发推箱子小游戏
6、待改进功能
a、本案例仅做简单的推箱子功能,关卡数量较少;
b、未编写记录游戏中每一步的内容,所以无法实现反悔功能;
c、可以通过读写数据库,excel或CSV格式导入关卡数据;
d、测试时间较短,可能存在未知的BUG,哈
7、综述
a、通过本案例开发,Codesys至少可以实现类似VB,C语言等高级语言的基本编程功能。
b、本例基本实现开发目的,但只做研究开发,目前暂无实战意义哈
本文编写所使用的Codesys版本为V3.5.14.10,禾川官网下载,源程序下载地址:
https://download.csdn.net/download/qq_19979629/87266302