PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 71|回复: 0

[三菱] 三菱PLC的俄罗斯方块程序:ST语言程序

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式

三菱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语言的基本语法和指令集。
  • 通过实践项目来巩固所学知识,如编写俄罗斯方块程序。
  • 积极参与技术社区的交流与讨论,向资深工程师请教。
  • 不断阅读技术文档和参考资料,了解最新的技术趋势和最佳实践。

五、结语

通过将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;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-20 00:43 , Processed in 0.046109 second(s), 27 queries .

快速回复 返回顶部 返回列表