狗万 赢钱ok_狗万新闻_狗万什么意思意思汇编语言的俄罗斯方块游戏

Dreamlover

发布日期: 2019-04-22 22:44:23 浏览量: 668
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

报告说明

此次报告根据自己的兴趣编了个简单的游戏,模仿经典游戏俄罗斯方块。左右方向键控制方块的水平位置,上方向键旋转方块,END键水平翻转之。有简单的积分功能,并能根据得分多少调整游戏难度,即方块下落速度。

游戏甚少创新,权为练笔。

程序说明

游戏有一个依得分而改变的周期,在每一个周期中,用10h号BIOS中断调用检查键盘缓冲是否为空,若不为空,则读出缓冲数据,根据输入指示,调整游戏内部状态,最后根据内部记录的状态用适当的方法表现在屏幕上。

主程序流程

  • 初始化游戏环境:
    • 清除得分,清空屏幕,初始化相关数据结构
    • 产生两个方块组,一个为即将显示的,一个为下一个要显示的。
  • 进入游戏循环:
    • 延时,达到一定的游戏周期,在此期间也检查用户输入
    • 根据输入,应用相应功能,如:ESC键则跳至4,控制方向键则检查并改变当前方块位置响应输入,F3键主动提高游戏关数,DEL键游戏暂停……。
    • 根据更新的内部数据状态,执行相应检查,如:是否满行?是否游戏结束?是否游戏完成?……
  • 无条件跳转至游戏循环。
  • 退出程序

附加说明

  • 随机数的的产生,首先从CMOS实时钟读取的秒数作为随机数的初始值,其后再根据线性同余法产生下一个数。

  • 游戏区域暂定为12*20,为了纪录区域中每个格子是否已被方块占据,用了一个长度为20的字数组,每个字的一位代表区域中的一个方格,这样计算满行时容易判断,设置位也较为容易。不过由于16位汇编指令中并没有bt之类位操作指令所以,测试某位是否置位时,也相当令人不快。

  • 为了更好的控制方块左右移动以及完成旋转水平、翻转等操作,在方块组中选取了一个方块作为参照点,极大简化了编写代码的过程。

  • )游戏难度,具体到此游戏就是方块自动下落的速度,通过设置延时长短控制,随着得分的增加,Level也增加,所对应的延时缩短,下落速度加快,为了减小游戏复杂度,在较高关数时方块组形状(共16种,其中2种相同,为仅一个格的穿透方块,设为2增加出现概率)趋于正常。

  • 输入的获取,首先调用INT 10h的1号功能,判断键盘缓冲区是否为空,若不为空再用0号功能读取,以读取到的输入改变内部状态,即方块位置、游戏状态等。

编写步骤

  • 先构思出一个大概的框架

  • 将构建出的框架上.逐步分解

  • 逐步添加子程序

  • 不断添加代码、DEBUG,最后测试。

结果(部分画面截图)

分析与讨论

  • 虽然是用汇编语言编写代码,现代一些优秀的编程思想仍然是极为有用的,如面向对象,能很大程度为编写代码提供导航。思维决不局限于所用的编程语言,绝大部分编程语言在功能上是完全可以等价的,而思维决定一切,C到C++ 的发展,功能上并无不同,不过在语法上C++为我们提供了便利,对事物的理解也更为直观。如果用VC++写此程序就不用那么艰难了。不过,编写代码过程中很多体悟却不能仅通过几行高级语言的代码所能得到的。

  • 程序虽说不算大,但为了更好的控制其变化,我使用了tortoiseSVN工具,其对版本的控制程度非同一般,源代码交给它,非常放心。同时IDE用的是MasmPlus,至少它提供了语法高亮显示、子程序快速跳转(其实也不够快)、快速检索等功能。

  • Makefile文件的使用也省了不少事,通常是交待它一下怎样通过编译、连接出最终可执行文件后就不用管它了。 所以说好的工具仍是不可忽视的。

结论

所谓万事开头难,像汇编这样非常不让人省心的语言,看来看去就那几个单调的指令,阅读别人的代码,总有些乏味,只有真正开始自己编写时,才能知道其实它并不难,相反它把所有细节全部展现在我们面前,不像有些高级语言为了通用性,隐藏了很多细节。在用高级语言编写代码的时候,总觉得有些糊涂度日。不过话说回来,两者之间的生产效率却不是汇编所能企及的。

在用汇编写代码时,每一条指令的执行都能直接感受其变化到,这时候需要有十分的耐心。有时候一个不留神寄存器写错了名,半天没得到自己想要的结果还不知道错在哪。我在编写此程序过程中,就曾有写错的时候,浪费了不少时间。

所以随时DEBUG是必须的,一旦错误扩大了范围,要找到它是要费很多手脚的。

最后,在编任何或大或小的程序之前都需要事先有个清晰的规划,然而我却通常是想到哪写到哪,最后做了不少无用功,可惜了那宝贵的时间。

上传的附件 cloud_download 狗万 赢钱ok_狗万新闻_狗万什么意思意思汇编语言的俄罗斯方块.zip ( 74.78kb,?24次下载 )
error_outline 下载需要7点积分
eject