在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~