三菱plc高级编程语言。
st语言编写的俄罗斯方块程序,st语言是plc编程高级语言,学会了st才算是高级工程师,无任何加密,有注释。
对于想学三菱st语言控制等有很好的学习借鉴意义。
三菱PLC高级编程语言ST语言与俄罗斯方块程序的融合 一、引言 随着工业自动化水平的不断提高,PLC(可编程逻辑控制器)技术得到广泛应用。三菱PLC作为其中的佼佼者,其高级编程语言ST语言更是受到广泛关注。本文将介绍如何将ST语言与俄罗斯方块程序结合,展示ST语言的强大功能,并对有志于学习三菱ST语言控制技术的朋友们提供有益的参考。 二、三菱PLC与ST语言概述 三菱PLC是三菱电机自动化产品线中的主力产品,广泛应用于各种工业控制领域。ST语言是PLC编程的高级语言,其强大的功能和灵活性使得工程师能够更高效地编写复杂的控制程序。掌握ST语言,意味着工程师具备了解决复杂问题的能力,是迈向高级工程师的重要一步。 三、俄罗斯方块程序在ST语言中的实现 俄罗斯方块是一个经典的电子游戏,其编程实现对于学习ST语言具有很好的借鉴意义。下面将详细介绍如何在ST语言中编写俄罗斯方块程序。 俄罗斯方块游戏的核心逻辑包括:方块的生成、移动、旋转和消除。这些逻辑可以通过ST语言中的程序结构、函数和指令来实现。 在ST语言中,我们可以使用结构化程序设计的方法,将游戏逻辑分为多个模块,如初始化模块、游戏循环模块、方块生成模块、移动/旋转模块等。这样的设计使得程序更加清晰、易于维护。 在编写俄罗斯方块程序时,我们将大量使用ST语言中的函数和指令。例如,使用数组来存储方块和矩阵的数据,使用循环和条件语句来控制游戏流程,使用位移和变换指令来实现方块的移动和旋转。 四、ST语言学习的路径与建议 对于想要学习三菱ST语言控制技术的朋友们,建议从以下几个方面入手: - 熟练掌握ST语言的基本语法和指令集。
- 通过实践项目来巩固所学知识,如编写俄罗斯方块程序。
- 积极参与技术社区的交流与讨论,向资深工程师请教。
- 不断阅读技术文档和参考资料,了解最新的技术趋势和最佳实践。
五、结语 通过将ST语言与俄罗斯方块程序结合,我们可以更深入地了解ST语言的强大功能,同时也为学习PLC技术提供了一个具体的实践项目。对于想要成为三菱PLC高级工程师的朋友们,掌握ST语言是必经之路。希望本文能够为大家的学习与实践提供有益的参考。
下面就是三菱PLC的俄罗斯方块程序。
R_TRIG_1(_CLK:= ONOFF ,Q:=秒P );
TON_E_1(EN:= TRUE ,IN:= NOT 计时启动 ,PT:= T#1000S ,Q:= 计时启动 ,ET:=扫描周期_us ); (*产生随机数*)
TIME_TO_DINT_E(TRUE , 扫描周期_us , 扫描周期_D );
DINT_TO_INT_E( TRUE, (扫描周期_D/K100) , 扫描周期_I );
时钟随机数:=扫描周期_I;
左移P := NOT 左移ON AND 左移;
右移P := NOT 右移ON AND 右移;
启动P := 启动 AND NOT 启动ON;
变形P := 变形 AND NOT 变形ON;
左移ON := 左移;
右移ON := 右移;
启动ON := 启动;
变形ON := 变形;
i_tra:= 0;
J_tra:= 0;
k_tra := 0;
可消行数据 := 0;
消除数据[1] := 0;
消除数据[2] := 0;
消除数据[3] := 0;
消除数据[4] := 0;
Gen_实时后景数据图 := FALSE;
Gen_实时前景数据图 := FALSE;
撞后保存检测 := FALSE;
允许下降 := TRUE;
允许左移 := TRUE;
允许右移 := TRUE;
图形可变 := FALSE;
IF 启动P THEN
Gameover := FALSE;
END_IF;
IF NOT 启动 THEN (*停止清零*)
Gen_实时后景数据图 := FALSE;
Gameover := FALSE;
FOR i_tra := 24 TO 1 BY -1 DO
FOR J_tra := 16 TO 1 BY -1 DO
显示图像[ i_tra, J_tra] := FALSE;
实时前景数据图[ i_tra, J_tra] := FALSE;
预判[ i_tra, J_tra] := FALSE;
END_FOR;
END_FOR;
实时后景数据图Type := 0;
实时后景数据图Stat := 0;
实时前景数据图Type := 0;
实时前景数据图Stat := 0;
ELSIF 启动P OR 实时后景数据图Type = 0 THEN
Gen_实时后景数据图 := TRUE;
END_IF;
IF Gen_实时后景数据图 AND NOT Gameover THEN
实时后景数据图Type := ( 时钟随机数 MOD 7) + 1;
实时后景数据图Stat := ( 时钟随机数 MOD 4) + 1;
END_IF;
IF 实时后景数据图Type > 0 AND 实时前景数据图Type = 0 AND NOT Gameover THEN (*NEXT上传NOW*)
实时前景数据图Type := 实时后景数据图Type;
实时前景数据图Stat := 实时后景数据图Stat;
Gen_实时前景数据图 := TRUE;
实时后景数据图Type := 0;
实时后景数据图Stat := 0;
END_IF;
FOR i_tra := 1 TO 4 DO
FOR J_tra := 1 TO 4 DO
图形显示Next[ i_tra, J_tra] := FALSE;
END_FOR;
END_FOR;
CASE 实时后景数据图Type OF (*NEXT图形显示*)
1:
IF ( 实时后景数据图Stat = 1 OR 实时后景数据图Stat = 3) THEN
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
图形显示Next[2, 4] := TRUE;
END_IF;
IF ( 实时后景数据图Stat = 2 OR 实时后景数据图Stat = 4) THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 2] := TRUE;
图形显示Next[4, 2] := TRUE;
END_IF;
2:
IF 实时后景数据图Stat = 1 THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 2] := TRUE;
图形显示Next[3, 3] := TRUE;
END_IF;
IF 实时后景数据图Stat = 2 THEN
图形显示Next[1, 3] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
END_IF;
IF 实时后景数据图Stat = 3 THEN
图形显示Next[1, 1] := TRUE;
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 2] := TRUE;
END_IF;
IF 实时后景数据图Stat = 4 THEN
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
图形显示Next[3, 1] := TRUE;
END_IF;
3:
IF 实时后景数据图Stat = 1 THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 2] := TRUE;
图形显示Next[3, 1] := TRUE;
END_IF;
IF 实时后景数据图Stat = 2 THEN
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
图形显示Next[3, 3] := TRUE;
END_IF;
IF 实时后景数据图Stat = 3 THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[1, 3] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 2] := TRUE;
END_IF;
IF 实时后景数据图Stat = 4 THEN
图形显示Next[1, 1] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
END_IF;
4:
IF 实时后景数据图Stat = 1 THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
END_IF;
IF 实时后景数据图Stat = 2 THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 2] := TRUE;
END_IF;
IF 实时后景数据图Stat = 3 THEN
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
图形显示Next[3, 2] := TRUE;
END_IF;
IF 实时后景数据图Stat = 4 THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
图形显示Next[3, 2] := TRUE;
END_IF;
5:
IF ( 实时后景数据图Stat = 1 OR 实时后景数据图Stat = 3) THEN
图形显示Next[1, 1] := TRUE;
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[2, 3] := TRUE;
END_IF;
IF ( 实时后景数据图Stat = 2 OR 实时后景数据图Stat = 4) THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 1] := TRUE;
END_IF;
6:
IF ( 实时后景数据图Stat = 1 OR 实时后景数据图Stat = 3) THEN
图形显示Next[1, 2] := TRUE;
图形显示Next[1, 3] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
END_IF;
IF ( 实时后景数据图Stat = 2 OR 实时后景数据图Stat = 4) THEN
图形显示Next[1, 1] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
图形显示Next[3, 2] := TRUE;
END_IF;
7:
IF ( 实时后景数据图Stat = 2 OR 实时后景数据图Stat = 4 OR 实时后景数据图Stat = 1 OR 实时后景数据图Stat = 3) THEN
图形显示Next[1, 1] := TRUE;
图形显示Next[1, 2] := TRUE;
图形显示Next[2, 1] := TRUE;
图形显示Next[2, 2] := TRUE;
END_IF;
END_CASE;
CASE 实时前景数据图Type OF
1:
IF ( 实时前景数据图Stat = 1 OR 实时前景数据图Stat = 3) THEN
Init_X := 8;
Init_Y := 24;
IF GX > 1 AND GX < 15 AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY, GX + 2] THEN
XX1 := GX - 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX + 1;
YY3 := GY;
XX4 := GX + 2;
YY4 := GY;
图形可变 := TRUE;
END_IF;
END_IF;
IF ( 实时前景数据图Stat = 2 OR 实时前景数据图Stat = 4) THEN
Init_X := 8;
Init_Y := 23;
IF GY < 24 AND GY > 2 AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY - 1, GX] AND NOT 预判[ GY - 2, GX] THEN
XX1 := GX;
YY1 := GY + 1;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY - 1;
XX4 := GX;
YY4 := GY - 2;
图形可变 := TRUE;
END_IF;
END_IF;
2:
IF 实时前景数据图Stat = 1 THEN
Init_X := 8;
Init_Y := 23;
IF GX < 16 AND GY > 1 AND GY < 24 AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY - 1, GX] AND NOT 预判[ GY - 1, GX + 1] THEN
XX1 := GX;
YY1 := GY + 1;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY - 1;
XX4 := GX + 1;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 2 THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GX < 16 AND GY < 24 AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY + 1, GX + 1] THEN
XX1 := GX - 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX + 1;
YY3 := GY;
XX4 := GX + 1;
YY4 := GY + 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 3 THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GY < 24 AND GY > 1 AND NOT 预判[ GY - 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY + 1, GX - 1] THEN
XX1 := GX;
YY1 := GY - 1;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY + 1;
XX4 := GX - 1;
YY4 := GY + 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 4 THEN
Init_X := 8;
Init_Y := 23;
IF GX < 16 AND GX > 1 AND GY > 1 AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY - 1, GX - 1] THEN
XX1 := GX + 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX - 1;
YY3 := GY;
XX4 := GX - 1;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
3:
IF 实时前景数据图Stat = 1 THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GY > 1 AND GY < 24 AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY - 1, GX] AND NOT 预判[ GY - 1, GX - 1] THEN
XX1 := GX;
YY1 := GY + 1;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY - 1;
XX4 := GX - 1;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 2 THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GX < 16 AND GY > 1 AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY - 1, GX + 1] THEN
XX1 := GX - 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX + 1;
YY3 := GY;
XX4 := GX + 1;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 3 THEN
Init_X := 8;
Init_Y := 23;
IF GX < 16 AND GY < 24 AND GY > 1 AND NOT 预判[ GY - 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY + 1, GX + 1] THEN
XX1 := GX;
YY1 := GY - 1;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY + 1;
XX4 := GX + 1;
YY4 := GY + 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 4 THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GX < 16 AND GY < 24 AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY + 1, GX - 1] THEN
XX1 := GX + 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX - 1;
YY3 := GY;
XX4 := GX - 1;
YY4 := GY + 1;
图形可变 := TRUE;
END_IF;
END_IF;
4:
IF 实时前景数据图Stat = 1 THEN
Init_X := 8;
Init_Y := 23;
IF GX < 16 AND GX > 1 AND GY < 24 AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY + 1, GX] THEN
XX1 := GX - 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX + 1;
YY3 := GY;
XX4 := GX;
YY4 := GY + 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 2 THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GY < 24 AND GY > 1 AND NOT 预判[ GY - 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY, GX - 1] THEN
XX1 := GX;
YY1 := GY - 1;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY + 1;
XX4 := GX - 1;
YY4 := GY;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 3 THEN
Init_X := 8;
Init_Y := 24;
IF GX < 16 AND GX > 1 AND GY > 1 AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY - 1, GX] THEN
XX1 := GX + 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX - 1;
YY3 := GY;
XX4 := GX;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF 实时前景数据图Stat = 4 THEN
Init_X := 8;
Init_Y := 23;
IF GX < 16 AND GY > 1 AND GY < 24 AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY - 1, GX] AND NOT 预判[ GY, GX + 1] THEN
XX1 := GX;
YY1 := GY + 1;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY - 1;
XX4 := GX + 1;
YY4 := GY;
图形可变 := TRUE;
END_IF;
END_IF;
5:
IF ( 实时前景数据图Stat = 1 OR 实时前景数据图Stat = 3) THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GX < 16 AND GY < 24 AND NOT 预判[ GY, GX - 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY + 1, GX + 1] THEN
XX1 := GX - 1;
YY1 := GY;
XX2 := GX;
YY2 := GY;
XX3 := GX;
YY3 := GY + 1;
XX4 := GX + 1;
YY4 := GY + 1;
图形可变 := TRUE;
END_IF;
END_IF;
IF ( 实时前景数据图Stat = 2 OR 实时前景数据图Stat = 4) THEN
Init_X := 8;
Init_Y := 23;
IF GX < 16 AND GY > 1 AND GY < 24 AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY - 1, GX + 1] THEN
XX1 := GX;
YY1 := GY + 1;
XX2 := GX;
YY2 := GY;
XX3 := GX + 1;
YY3 := GY;
XX4 := GX + 1;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
6:
IF ( 实时前景数据图Stat = 1 OR 实时前景数据图Stat = 3) THEN
Init_X := 8;
Init_Y := 23;
IF GX > 1 AND GX < 16 AND GY < 24 AND NOT 预判[ GY + 1, GX - 1] AND NOT 预判[ GY + 1, GX] AND NOT 预判[ GY, GX] AND NOT 预判[ GY, GX + 1] THEN
XX1 := GX - 1;
YY1 := GY + 1;
XX2 := GX;
YY2 := GY + 1;
XX3 := GX;
YY3 := GY;
XX4 := GX + 1;
YY4 := GY;
图形可变 := TRUE;
END_IF;
END_IF;
IF ( 实时前景数据图Stat = 2 OR 实时前景数据图Stat = 4) THEN
Init_X := 8;
Init_Y := 23;
IF GX < 16 AND GY > 1 AND GY < 24 AND NOT 预判[ GY + 1, GX + 1] AND NOT 预判[ GY, GX + 1] AND NOT 预判[ GY, GX] AND NOT 预判[ GY - 1, GX] THEN
XX1 := GX + 1;
YY1 := GY + 1;
XX2 := GX + 1;
YY2 := GY;
XX3 := GX;
YY3 := GY;
XX4 := GX;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
7:
IF ( 实时前景数据图Stat = 2 OR 实时前景数据图Stat = 4 OR 实时前景数据图Stat = 1 OR 实时前景数据图Stat = 3) THEN
Init_X := 8;
Init_Y := 24;
IF GX < 16 AND GY > 1 THEN
XX1 := GX;
YY1 := GY;
XX2 := GX + 1;
YY2 := GY;
XX3 := GX;
YY3 := GY - 1;
XX4 := GX + 1;
YY4 := GY - 1;
图形可变 := TRUE;
END_IF;
END_IF;
END_CASE;
IF Gen_实时前景数据图 THEN
GX := Init_X;
GY := Init_Y;
预判Stat := 实时前景数据图Stat;
END_IF;
IF ( XX1 > 1) THEN
IF 预判[ YY1, XX1 - 1] THEN
允许左移 := FALSE;
END_IF;
END_IF;
IF ( XX2 > 1) THEN
IF 预判[ YY2, XX2 - 1] THEN
允许左移 := FALSE;
END_IF;
END_IF;
IF ( XX3 > 1) THEN
IF 预判[ YY3, XX3 - 1] THEN
允许左移 := FALSE;
END_IF;
END_IF;
IF ( XX4 > 1) THEN
IF 预判[ YY4, XX4 - 1] THEN
允许左移 := FALSE;
END_IF;
END_IF;
IF ( XX1 < 16) THEN
IF 预判[ YY1, XX1 + 1] THEN
允许右移 := FALSE;
END_IF;
END_IF;
IF ( XX2 < 16) THEN
IF 预判[ YY2, XX2 + 1] THEN
允许右移 := FALSE;
END_IF;
END_IF;
IF ( XX3 < 16) THEN
IF 预判[ YY3, XX3 + 1] THEN
允许右移 := FALSE;
END_IF;
END_IF;
IF ( XX4 < 16) THEN
IF 预判[ YY4, XX4 + 1] THEN
允许右移 := FALSE;
END_IF;
END_IF;
IF XX1 = 1 OR XX2 = 1 OR XX3 = 1 OR XX4 = 1 THEN
允许左移 := FALSE;
END_IF;
IF XX1 = 16 OR XX2 = 16 OR XX3 = 16 OR XX4 = 16 THEN
允许右移 := FALSE;
END_IF;
IF ( YY1 > 1) THEN
IF 预判[ YY1 - 1, XX1] = TRUE THEN
允许下降 := FALSE;
END_IF;
END_IF;
IF ( YY2 > 1) THEN
IF 预判[ YY2 - 1, XX2] = TRUE THEN
允许下降 := FALSE;
END_IF;
END_IF;
IF ( YY3 > 1) THEN
IF 预判[ YY3 - 1, XX3] = TRUE THEN
允许下降 := FALSE;
END_IF;
END_IF;
IF ( YY4 > 1) THEN
IF 预判[ YY4 - 1, XX4] = TRUE THEN
允许下降 := FALSE;
END_IF;
END_IF;
IF YY1 = 1 OR YY2 = 1 OR YY3 = 1 OR YY4 = 1 THEN
允许下降 := FALSE;
END_IF;
IF 允许下降 AND (秒P OR 下降) AND 启动 AND NOT 暂停 THEN
GY := GY - 1;
END_IF;
IF 允许左移 AND 左移P AND 启动 AND NOT 暂停 THEN
GX := GX - 1;
END_IF;
IF 允许右移 AND 右移P AND 启动 AND NOT 暂停 THEN
GX := GX + 1;
END_IF;
IF 变形P AND 启动 AND NOT 暂停 THEN
预判Stat := 实时前景数据图Stat;
实时前景数据图Stat := 实时前景数据图Stat + 1;
IF 实时前景数据图Stat > 4 THEN
实时前景数据图Stat := 1;
END_IF;
END_IF;
IF NOT 图形可变 THEN
实时前景数据图Stat := 预判Stat;
END_IF;
IF NOT 允许下降 THEN
IF 秒P AND NOT 暂停 THEN
Cnt := Cnt + 1;
END_IF;
IF Cnt > 2 THEN
撞后保存检测 := TRUE;
Cnt := 0;
实时前景数据图Type := 0;
END_IF;
ELSE
Cnt := 0;
END_IF;
FOR i_tra := 24 TO 1 BY -1 DO
FOR J_tra := 16 TO 1 BY -1 DO
实时前景数据图[ i_tra, J_tra] := FALSE;
END_FOR;
END_FOR;
IF 启动 THEN
实时前景数据图[ YY1, XX1] := TRUE;
实时前景数据图[ YY2, XX2] := TRUE;
实时前景数据图[ YY3, XX3] := TRUE;
实时前景数据图[ YY4, XX4] := TRUE;
END_IF;
FOR i_tra := 24 TO 1 BY -1 DO
FOR J_tra := 16 TO 1 BY -1 DO
显示图像[ i_tra, J_tra] := 实时前景数据图[ i_tra, J_tra] OR 预判[ i_tra, J_tra];
END_FOR;
END_FOR;
IF 撞后保存检测 THEN
IF YY1 = 24 OR YY2 = 24 OR YY3 = 24 OR YY4 = 24 AND NOT 允许下降 THEN (*碰撞后检测是否结束*)
Gameover := TRUE;
Gen_实时后景数据图 := FALSE;
END_IF;
FOR i_tra := 24 TO 1 BY -1 DO (*碰撞后检测是否消行*)
可消行 := TRUE;
FOR J_tra := 16 TO 1 BY -1 DO
IF NOT 显示图像[ i_tra, J_tra] THEN
可消行 := FALSE;
END_IF;
END_FOR;
IF 可消行 THEN
可消行数据 := 可消行数据 + 1;
消除数据[ 可消行数据] := i_tra;
END_IF;
END_FOR;
FOR k_tra := 1 TO 4 DO
IF 消除数据[ k_tra] > 0 THEN
FOR i_tra := 消除数据[ k_tra] TO 23 DO
FOR J_tra := 1 TO 16 DO
显示图像[ i_tra, J_tra] := 显示图像[ i_tra + 1, J_tra];
END_FOR;
END_FOR;
END_IF;
END_FOR;
FOR i_tra := 24 TO 1 BY -1 DO
FOR J_tra := 16 TO 1 BY -1 DO
预判[ i_tra, J_tra] := 显示图像[ i_tra, J_tra];
END_FOR;
END_FOR;
END_IF; |