在zengl编程语言v1.0.6中添加了问号冒号的选择运算符,该运算符可以用来替代简单的if...else...endif结构,让语句变得更简短,不过该运算符应该适当使用,过多的使用则会让代码的可读性变差。...

    在zengl编程语言v1.0.6中添加了问号冒号的选择运算符,该运算符可以用来替代简单的if...else...endif结构,让语句变得更简短,不过该运算符应该适当使用,过多的使用则会让代码的可读性变差。

    下载地址:http://pan.baidu.com/share/link?shareid=396056&uk=940392313 (百度共享链接地址),进入zengl俄罗斯方块共享文件夹,在该文件夹中有个version_11_tetris.rar的压缩包就是v11版本的代码 包 (需要点击按修改日期排列,才能在第一个位置看到,百度好像是按字母排列,不是按修改日期排列的,这点设计的有点不好),压缩包中有个版本11说明.txt文件,包含了该版本的相关说明:

    该版本是俄罗斯方块的第十一个测试版本,该版本没增加什么游戏方面的功能,只是在脚本方面使用了zengl编程语言v1.0.6版本的新的语法特性,比如 新增的问号冒号条件选择语句,以及endclass和endswitch关键字,按ESC键可以随时退出游戏,按P键可以暂停游戏。

    该游戏版本是zengl编程语言v1.0.6或更高语言版本环境下的完整可玩的版本。

    如果是linux用户,在成功编译了zengl v1.0.6或更高版本的程序后(注意编译需要root权限,因为需要将.so动态链接库拷贝到/usr/lib中),可以将 version_11_tetris文件夹拷贝到zengl根目录中,最后运行./zenglrun version_11_tetris/tetris.zl -n 即可,如果要调试脚本,可以加个-d参数 (参数的含义请参考"zengl编程语言"栏目,其中的"zengl编程语言v1.0.5 编译,执行,源码调试一体化,开发俄罗斯方块"这篇文章,或者通过-h参数来查看帮助)。

    在tetris_def.zl脚本中统一使用endclass来代替endcls,当然endcls也可以用,这些关键字可以根据自己的喜好来定。

class clsPosition //和绘制矩形有关的类定义
    x; //左上角x坐标
    y; //左上角y坐标
    w; //矩形宽
    h; //矩形高
//endcls //类定义结束
endclass //类定义结束,既可以用endcls,也可以用endclass

    在tetris.zl脚本中对两处if...else...endif结构使用问号冒号结构来代替:

fun myCollisionDetect()

    ...............................  //省略N行代码

    /*if(tetris.direct == KeyDown) //如果按了下方向键,则设置初始速度为2,即每次移动两格来加速下落。
        tetris.speed = 2;
    else
        tetris.speed = 1; //否则按照常规的1格速度。
    endif*/

    tetris.speed = tetris.direct == KeyDown ? 2 : 1; //使用问号冒号结构来代替上面的if..endif的写法,两种做法都可以。

    ...............................  //省略N行代码

endfun

    在myRemoveMainBgFixTetris自定义函数中,也将if...else...endif结构使用问号冒号来代替:

fun myRemoveMainBgFixTetris()

    /*if(mixvy == -1) //mixvy是需要消除的最低下的行
        topvy = mixvy = vy;
    else
        topvy = vy; //topvy是需要消除的最上端的行
    endif*/

    topvy = mixvy == -1 ? (mixvy = vy): vy; //使用问号冒号结构来代替上面的if...endif的写法,因为问号,冒号的优先级比赋值语句的优先级高,所以? ... :中间的语句如果有赋值运算符,就需要用括号括起来,如本句的 ... ? (mixvy = vy): ...

endfun

    虽然问号冒号结构简单,但是可以看出来如果表达式简短的话,可读性还可以,如果表达式复杂,或者嵌套了其他问号冒号结构时,可读性就会变的很差了,所以要根据实际情况而定。

    另外在tetris.zl中还使用endswitch来代替之前的endswt,endswt关键字依然保留着,之所以加入endswitch是因为比endswt好记点。可以根据需要选择关键字。


switch(event.keytype)
   
    ............................  //省略N行代码
      
    case KeyR: //R键重开一轮游戏
        myReStartGame();
        break;
    case KeyP: //P键暂停游戏
        myGameDoPause();
        break;
//endswt
endswitch //既可以用endswt,也可以用endswitch

    OK,休息,休息一下 O(∩_∩)O~

上下篇

下一篇: 暂无

上一篇: zengl俄罗斯方块v10 连续按键,顶部非可见区域

相关文章

zengl俄罗斯方块v8 修复消行BUG

zengl俄罗斯方块v4 堆砌碰撞过的方块

zengl俄罗斯方块v2 初始化七种形状

zengl俄罗斯方块v5 简单消行法

zengl俄罗斯方块v10 连续按键,顶部非可见区域

zengl俄罗斯方块v1 入门篇