汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示

        为期将近一月(11-05公布题目,12-02晚截止提交)的校汇编比赛总算告一段落了,接下来可以专心其他方面的学习了。因为本人比较喜欢汇编(目前只学过8086),在上微机原理课的同时,在自学王爽老师的《汇编语言》(第三版),不得不说,这是国人写的很优秀的一本计算机科学系图书,但略有遗憾,我并没有完全学完学懂学会(太贪容易,太浮浅粗疏,太不能深入,太不能耐苦)。在此特将本次比赛做以总结,另外如果能够帮助到想学习的您,那将是我的荣幸(It's my pleasure)。

一、双窗口要求

        将显示器的屏幕划分成大小相等的左右两个显示窗口,并画出每个显示窗口的边框,窗口大小适中。 在左边显示窗口,能够运行简单的贪吃蛇游戏,即采用键盘按键控制贪吃蛇前进方向,如“W、S、A、D”键分别为上下左右方向控制按键,以贪吃蛇碰触窗口边框为游戏终止条件,以“R”键为游戏重新开始。若游戏进行当中无键按下,则贪吃蛇保持当前方向不变直至撞墙。 在右边显示窗口,能够画出等边三角形,要求:三角形位置在该显示区域的中部,参数边长由键盘输入确定。每次根据输入的参数,在该窗口将三角形重新绘制出来。 初始工作窗口为左边显示窗口,以后每按一次Tab键切换至旁边显示窗口。当某个显示窗口被选中时,则光标在该窗口底部闪烁,键盘输入对当前窗口有效。整个系统按ESC键退出,返回DOS操作系统界面。 

二、前期折腾

        题目要求是2018-11-05在我们学院官网公布出来的,当天随机展开了在百度、谷歌(实验室可直接用)、必应等各大搜索引擎上的查阅资料工作。当晚即实现了画点+画线+画矩形+画三角形。随后将三角形部分交给组内成员,自己来完成贪吃蛇的编写。说实话,我确实不是很放心交给别人(这与我的性格有关,不知道是好事还是坏事,不过这里我要向那些曾经不被我信任的人说句抱歉,我自我感觉是比较独裁的,多亏了他们的包容理解),事实证明,我的担忧有些多余。他们不负众望,成功的完成了该任务。下面我主讲我绘制贪吃蛇的辛酸史,三角形方面我看懂后也会聊聊。

  • 我先是借鉴了CSDN上一篇简单绘制贪吃蛇的博客,因为我们的题目要求比较简单,贪吃蛇仅仅能在窗口区域内移动即可,并不需要吃豆子,变长等骚操作。所以具体思路就是:清屏——(设置光标坐标+显示字符)*N。重复此过程(循环)。
  • 现在选取一个方向,让蛇头向那边移动,接着蛇身和蛇尾只要等于上一时刻它前面的那一块就够了,即实现两相邻物块之间的赋值即可。现在的问题是,每次的小尾巴都会残留,因为没有什么可以跟它作交换。怎么办呢?清屏。现在思路变为:画蛇——延时——清屏——画蛇。
  • 现在能让它朝一个方向运行起来了,接下来考虑上下左右方向。蛇怎么知道自己改向哪前进呢?响应按键。先实现按一下它只向前走一步的操作,然后一直按住就可以朝着这个方向一直前进了。那么如何使其运行过程中响应一次按键改变方向继续前进呢?中断!这是个核心操作。参考《汇编语言》(第三版)外中断那一章,将BIOS系统调用为我们所用。在中断服务程序中通过修改各标志位来实现蛇的走向。
  • 接着是怎么让它检测撞墙然后死掉。这里比较简单,只考虑蛇头就可以啦,使蛇头满足横纵坐标在一个范围里,如果出去就宣告死亡。
  • 此时贪吃蛇写的差不多了,队友的三角形也基本OK。然而合并时出现问题。在我的贪吃蛇下,加入三角形时,怎么都无法显示,三角形单独却可以显示。
  • 小组开会讨论后,发现是显示模式的设置出现了纰漏。DOS下显示器有两种显示方式——字符显示(光标)、图形显示(像素点)。并且同时只能取其一。
  • 因此不得不考虑在图形模式重新下绘制贪吃蛇。。。。。

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第1张图片

  • 2018-11-16 21:55  开心:能在图形模式下画出绿色小方块,并将小方块写成一个宏来随时方便调用。

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第2张图片汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第3张图片

  • 然而将宏写的太长,不能多次调用。无奈只好尝试将宏改为子过程,然而不得不说宏传递参数比子过程方便太多。

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第4张图片

  • 更改为子程序,通过栈来传递各项参数,修改成功。接下来该考虑怎么让它动起来,初步设想是记录下每个小方块的左上角坐标和右下角坐标,然后模仿着字符模式下画法,进行替换操作。
  • 然而,事有转机。我们的SA来了(哈哈,平常我一个小coder老是欺负SA,不过SA关键时刻还是蛮靠谱的),SA和我一起重新思考了显示模式的问题,我们测试,在字符模式下图形确实是显示不出来,却忽略了一个重要问题——图形模式下能不能显示字符?答案是能。图形模式下可以显示字符! 这意味着我前面的贪吃蛇又起死回生了,那我还画个鬼啊,直接在程序一开始将显示方式设置为图形显示 ,那字符(光标)和图形(像素点)就都可以显示了。至此,图形模式下的贪吃蛇成功夭折!

三、程序设计流程图

  • 总体设计流程图

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第5张图片

  • 键盘中断流程图 

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第6张图片

  •  宏功能描述

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第7张图片

  •  子程序流程

                             汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第8张图片                              汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第9张图片

  • 三角形部分

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第10张图片

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第11张图片

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第12张图片

汇编语言(十五)校汇编语言程序设计竞赛总结——双窗口显示_第13张图片

四、 写在最后

  • 此外,我们还加入了声音或者叫音乐播放。具体请参考前两篇转载的博文:

  1. 8086汇编实现按键使电脑发声(导睿米法索拉稀)

  2. 汇编实现音乐的播放

  • 运行效果已上传哔哩哔哩,欢迎您随时骚扰:

  1. 汇编语言实现双窗口——贪吃蛇+等边三角形

  • 源代码+运行视频+流程图VISIO均已上传CSDN下载区:

  1. https://download.csdn.net/download/qq_40818798/10839151

  • 男神的话——碰到问题千万不要放弃

  1. 如果一点难度都没有就拿奖证明你的水平已经高于这个比赛了,那么你拿奖是理所应当,并没有值得高兴的 。碰到问题,遇到困难,想办法解决了,获得最后成功才是最快乐的

  2. 过往不恋,当下不乱,未来不惧

  • 天道酬勤,希望每一个真正努力过的人都能有所成就!

  • 博神的话——耐得住寂寞,经得起诱惑,抗得住挫折,记得住教训!

                                                                                                                                      ——An ordinary XUPTer.

                                                                                                                                                    2018.12.03

你可能感兴趣的:(Assembly,贪吃蛇,汇编语言,等边三角形,程序设计)