之前的版本,游戏还无法暂停,这样玩家如果有事离开的话,game就基本上over了,所以该版本就添加了暂停功能。 下载地址:http://pan.baidu.com/share/link?shareid=3...
之前的版本,游戏还无法暂停,这样玩家如果有事离开的话,game就基本上over了,所以该版本就添加了暂停功能。
下载地址:http://pan.baidu.com/share/link?shareid=396056&uk=940392313 (百度共享链接地址),进入zengl俄罗斯方块共享文件夹,在该文件夹中有个version_7_tetris.rar的压缩包就是v7版本的代码包,里面有个版本7说明.txt文件,包含了该版本的相关说明:
该版本是俄罗斯方块的第七个测试版本,该版本在原来的基础上添加了暂停功能,可以按P键暂停,再按一次P键可以恢复执行,另外在主游戏区域的右侧,得分信 息的下方添加了zengl program的背景图片,最后为了增加游戏的可玩性,将方块的下落间隔设为250毫秒,和上一个版本一样,还存在消行算法的BUG,该BUG将在后面的 版本中进行处理,按ESC键可以随时退出游戏。如果要玩完整版,可以查看"zengl编程语言"栏目,其中的"zengl编程语言v1.0.5 编译,执行,源码调试一体化,开发俄罗斯方块"这篇文章里有俄罗斯方块正式发布版的下载地址。
如果是linux用户,在成功编译了zengl v1.0.5或更高版本的程序后(注意编译需要root权限,因为需要将.so动态链接库拷贝到/usr/lib中),可以将 version_7_tetris.rar里的version_7_tetris文件夹拷贝到zengl根目录中,最后运行./zenglrun version_7_tetris/tetris.zl -n 即可,如果要调试脚本,可以加个-d参数(参数的含义请参考上面提到的zengl v1.0.5的文章,或者通过-h参数来查看帮助)。
在该版本的tetris.zl脚本中添加了myGameDoPause自定义函数:
/*
当玩家有事需要暂停系统时,可以按"p"键暂停,再按一次"p"键即可恢复执行
*/
fun myGameDoPause()
global pause_game,scores_text,isneedDraw,screen,zengl_lang_bgimg;
clsPauseText pause_game;
clsScores scores_text;
clsZenglBgImg zengl_lang_bgimg;
if(!pause_game.needPause)
pause_game.needPause = TRUE; //设置needPause为TRUE,则系统将暂停游戏
pause_game.needDraw = TRUE;
else
pause_game.needPause = FALSE;
isneedDraw = TRUE;
scores_text.needDraw = TRUE;
zengl_lang_bgimg.needDraw = TRUE;
sdlFillRect(screen,NULL,array(0, 0xFF, 0xFF));
endif
endfun
当玩家按下P键时,就会调用上面的函数,例如该版本tetris.zl的390行:
case KeyP: //P键暂停游戏
myGameDoPause();
break;
endswt
在暂停状态下,将在游戏窗口中显示游戏暂停的字符串信息,例如该版本tetris.zl的398行:
if(pause_game.needPause) //判断用户是否暂停
if(pause_game.needDraw)
sdlBlitImg(pause_game.font.img , NULL , screen , pause_game.font.pos); //在游戏窗口中显示暂停字符串信息
sdlShowScreen(); //将主屏幕表面输出到显卡显示出来。
pause_game.needDraw = FALSE;
endif
continue; //在暂停状态下,跳过后面的代码
endif
按P键暂停时的截图如下:
在tetris_def.zl脚本中,将clsFont字体类单独提取出来:
class clsFont
fontobj; //SDL FONT加载的字体对象指针
fontcolor; //字体的前景色
img; //存放需要绘制的SDL字符串位图表面指针,字符串都是先转为位图,然后再绘制到游戏窗口的
clsPosition pos; //字符串位图需要绘制到游戏窗口中的坐标信息
endcls
在得分和暂停信息类中都用到了上面的clsFont类成员:
class clsScores
clsFont font; //和得分相关的字符串及字体资源
scores; //得分
needDraw; //判断是否需要绘制得分
endcls
class clsPauseText
clsFont font; //和暂停相关的字符串及字体资源
needPause; //判断是否需要暂停
needDraw; //判断是否需要绘制暂停字符串信息
endcls
最后在tetris_def.zl脚本中添加了和zengl program背景图片相关的类定义:
class clsZenglBgImg
img; //zengl program背景图片
needDraw; //判断是否需要绘制该背景图片
clsPosition pos; //背景图片在游戏窗口中的坐标
endcls
在version_7_tetris目录中的lang.png就是zengl program的PNG背景图片资源。
至于脚本中的其他代码都在重要的部分加了注释,可以结合注释和调试器进行分析。该版本的脚本运行截图如下:
OK,下节介绍v8的版本,休息,休息一下 O(∩_∩)O~