之前的版本,游戏还无法暂停,这样玩家如果有事离开的话,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~

上下篇

下一篇: zengl俄罗斯方块v8 修复消行BUG

上一篇: zengl俄罗斯方块v6 传统消行法

相关文章

zengl俄罗斯方块v6 传统消行法

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

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

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

zengl俄罗斯方块v3 添加按键功能

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