基于80x86汇编的英文填字游戏程序

邱丑丑

发布日期: 2019-06-19 16:58:34 浏览量: 67
评分:
star_border star_border star_border star_border star_border star_border star_border star_border star_border star_border
*转载请注明来自write-bug.com

一、游戏背景介绍

英文作为全世界通用语言,也是当今世界上应用最广泛的语言,世界上以英语为母语的人近4亿,并且已经有约20个国家把英语作为官方语言或者第二语言使用,在国际政治、经济、军事、科技、文化、贸易等众多领域,都使用的英语进行交流。随着我国对外开放的不断扩大化,科学技术的不断进步,国际地位的不断提高,急需造就一大批精通外语的专门人才,使我国在国际事务中发挥更大更积极的作用。因此,学好英语对我国现实上述目标的实现具有重大意义。

而对于我们普通人的生活来说,无论是求职还是深造,都离不开英语的运用,因此,无论在哪个国家,英语都受到了人们的广泛学习,其重要性不言而喻。作为一名学生,我从小学便开始学习英语单词、语法、对话等,而单词也是英文学习中最基础的部分,英文单词枯燥无味,习惯于中文表达的中国学生并不是太容易学会,所以我们要探索新的方法来更高效地学习英文,也更加深我们对单词的印象。

在现代生活中,电脑已经和我们的工作学习息息相关,而英语也是和电脑联系最密切的语言,作为计算机相关专业的学生,我们需要阅读不少英文资料与文献,所以我们也需要较高的英文水平,才能使我们的专业水平进一步提高。

因此,我们便用汇编语言设计了一个简单的英文填字游戏,此游戏不仅适合于初学者,也对英文程度较好的人有帮助进一笔加深记忆的功能,游戏与单词学习相结合,使英文学习更加有趣,不似普通背单词一样枯燥,使我们的学习更加有效。

游戏刚开始时,页面中显示游戏名称English Crossword Game、生命次数为3、和第一关的单词,此时光标位于Rank1的单词中的第一个空缺字母处,用户可开始输入字母了,当用户填写正确完一关会自动出现下一关。

编写英文填字游戏软件时,综合了复习字符输入和显示、置光标、开窗口、颜色设置、删除字符等屏幕功能;掌握分支程序中字符比较及统计数量的程序设计,循环及排序程序设计方法考察了对数组和普通变量的定义。

当Rank1-Rank6都正确填完后,表示游戏成功,系统出现一个与所填写的单词有关的圣诞树以示祝贺。

游戏中共有3次机会,每输错一个字母,机会减一,若3次机会用完时,未填写完所有单词,则游戏失败,显示已正确完成的单词数量。

二、核心算法思想

编写一个英文填字游戏。我们预先确定了五个常用的单词作为此游戏的所填空缺单词,当游戏开始时,首先需要在屏幕中依次出现Rank1-Rank5以及有空缺的单词,当Rank1的空缺字母全部填写正确,系统自动出现Rank2及单词,以此类推,然后用户通过观察单词以及各个单词之间的联系,初步判断应该填入哪些字母,通过上、下、左、右地移动置光标位置,表示缺字母的位置,以提示填入合适字母,每当有字母填写完成,系统判断所填写内容是否正确,若正确,光标跳转至本单词的下一个空缺位置,如果此单词已经填写完成,则光标跳转至下一个单词的首个空缺;若错误,则光标不做移动,用户可重新输入,直至输入正确,光标才可继续向下进行。

此游戏中预设定了五个单词,分别为wish you a white christmas,添加空缺后为ish _o w_it ch_is_m_s。当游戏开始,首先显示Rank1和关卡1中已经预设的带有空缺的单词,等待参与者输入字母进行填补,参与者根据光标位置判断应该输入哪些字母使单词通顺合理,当有字母输入后,游戏通过数组来记录体验者一次游戏完成的单词量,完成一个数组自动加一,当正确填写完一个单词,则数目加一,直至游戏全部完成或者游戏中途失败。使用一个变量表示体验者的生命值,初值设置为3,表示体验者在本次游戏中共有3次机会可重新填入字母,如果填写失败一次,代表生命的变量值就自动减一,直到为0,提前退出游戏,表示游戏失败,显示出本次游戏已经完成的单词量,用户可选择者退出游戏或者重新开始新一轮的游戏,当有生命剩余且填写正确了所有单词,则表示成功通关。

填写单词就涉及到判断填入的字母正确与否,游戏不能无限制次数地输入错误字母,而是对参与者填入的字母进行判断,如果填写正确空缺字母,则显示绿色提示,并置光标到下一个要填写的位置,等待输入,如果正确补全一个单词,则自动置光标到下一个单词的空缺处,则开始第二关游戏,重复此操作,直至顺利填完所有单词且3次机会仍有剩余,在游戏单词下方出现一个绿色圣诞树表示祝贺通关。如果输入错误字母超过三次,,并且显示填写正确的单词数。每当用户正确或错误地输入字母,系统都会将其与正确答案比对,然后给出不同提示,输入正确为绿色提示,输入错误为红色提示,当用户看到提示便可及时纠正错误或者继续填写。

对于此次游戏的成功或是失败,我们分别设置了奖励和惩罚制度,也方便用户判断自己对单词的掌握和填写情况。在关卡1到关卡5中,一共有9个空缺需要填写,而我们设置的是若是一共有3个字母填写错误即为游戏失败,此时不可继续输入字母,退出输入并且显示挑战失败,打印出此次游戏中用户已经填写正确的单词数量,将提示字体设置为红色,更加醒目地使用户看到,提醒用户退出或者重新开始;当在游戏中用户将五个单词全都填写正确,或者只错误一次到两次,则系统判定此次游戏成功,界面中会显示一个绿色圣诞树和星星以表祝贺和鼓励,然后,游戏即可退出。

本游戏简单直观,主要为考察参与者的单词记忆能力和游戏应变能力,同时采用英文与游戏方式结合,可大大加深用户对这些常用单词的记忆与理解,伴有奖励的游戏,可增强用户的信心,使用户更有兴趣完成本次游戏。

游戏过程设计如下

  • 设计菜单及彩色显示界面,在窗口内显示英文游戏名称,第几关卡(Rank),空缺的单词,生命总数3,剩余生命次数,光标位置设置到第一个空缺处

  • 每一个关卡中光标转移到空缺处,等待用户键入。如果字母填对,光标跳到同一单词的下一个空缺位置;当单词填写全对,则系统自动出现进入下一关及下一个空缺单词

  • 单词正右方显示生命剩余次数,每个单词后有提示显示每个单词的正确和错误填入的个数,正确字母提示为绿色小桃,错误字母提示为红色叉,生命次数减少至零后,系统直接自动退出游戏

  • 如果某一字母填写错误,则错误次数加一,代表生命的变量life减一,三次为限,错误三次后,游戏失败,记录已完成的单词数。按ESC键退出并打印正确的单词个数

  • 每填写正确一个字母,游戏自动出现一个绿色小桃,表示填写正确,当正确个数超过一定比例后,在游戏最后会在圣诞树旁边给予n个五星奖励,并有鼓励字样,当游戏在有限的生命值中全部完成,即游戏成功通过,游戏最后,出现圣诞树以示奖励

三、核心算法流程图

游戏流程主要分为两个部分,游戏成功或失败的判定,和系统对此次游戏的评价。

当游戏开始,首先置生命次数为3,当输入字母时,系统判断输入是否正确,若正确,则继续输入下一个空缺字母,直至完成关卡,即游戏成功,若不正确,则机会减少一次,直至3次机会用完,此时游戏失败。

游戏进行过程中,若判定了游戏成功,游戏界面出现圣诞树作为奖励;但是在机会已经用完时还没有完成单词,则游戏失败,界面显示已经完成的正确单词数。

四、开发中遇到的问题

4.1 在用户输入字母时,系统如何判断输入的内容是否与正确单词中的字母相同?

游戏的核心部分就是判断用户输入的字母是否正确,以便系统给出不同的提示,用户进行英文空缺填补,输入字母,而我们已经学过,a-z每一个字母都对应有自己本身并且唯一的ASCII码值,我们抓住字母有唯一对应的ASCII码值这一特性,我们用正确得预设定字母的ASCII码与用户输入字母的ASCII码做对比,二者的ASCII码相同则输入正确,不同则判定为输入不正确。通过查表可知26个小写字母的ASCII码范围为61H—7AH,首先若是用户输入的内容不在这一范围内,则输入错误,只有当用户输入内容为小写字母时,再与预设定的字母ASCII码进行比对,判断是否与正确字母的ASCII相同,相同则输入正确,光标移动,不同则输入机会减一,光标不动。

4.2 当用户正确输入字母后,如何令光标移动到下一个空缺位置或下一个单词的第一个空缺位置以及如何实现用户编辑时字母的删除?

对光标操作时,每当上一个空缺输入正确,则光标自动移动到下一个空缺,我们采用dh和dl变化时,调用BIOS中断INT 10h(AH=2),利用10号中断的2号功能,首先预设置好每一个关卡中单词的空缺位置,当上一个空缺完成后,通过改变dh和dl的值,来设定光标的上、下、左、右的移动即可完成光标在空缺字母处的移动。在处理边界问题时,要令光标移动到行首则上移至上一个单词,光标移动到行尾是则下移至下一个单词的第一个空缺位置,再依次输入,利用了相同的方法。

用户删除字母时,操作的实现与光标的移动大致相同,即为光标的左移,同时利用21号中断法,在相同位置输出空格键即可删除错误的字母,进行再次输入。

4.3 我们令游戏中用户输入机会有限,如何实现当用户开始游戏后,共输错3次时,系统判定此次游戏失败?

在解决这个问题时,我们原本的思路是结合以前在c++中学到的内容,利用数组表示剩余生命次数。基本原理就是寄存器相对寻址,但是由于此游戏设计中不涉及到较大的数字,采用数组记录没有必要,我们便采用更直接明了的方法,直接定义操作数life,汇编语言并不像其他高级语言一样把变量分为许多类型,它是按照长度来区分的,life的初值较小,设置为3,每当系统通过ASCII码比对判断输入字母不正确,则执行DEC life操作,即life生命数减一,同时出现红叉,再次错误则继续减一,直至life减为0,判断life为0时,游戏直接结束,这种方法我们更容易想到,且容易实现。

4.4 游戏过程中,如何记录用户已完成的单词数量,方便在用户游戏失败时显示目前游戏已完全完成的单词数目?

解决如何记录单词数量时,我们引入数组,定义此变量时,由于数量较小,所以定义的变量占一个字节的长度。首先定义一个数组变量代表完成单词数量,将数组首地址放到寄存器中,数组的下标值作为相对偏移量,并且分配的内存字节数用另一个寄存器表示。每当光标移动至当前行的下一行,或者根据关卡即Rank的增加判断数量,每当Rank加一,则数组加一。在这个数组表示中,定义数组时,只需要为开辟一个字节的内存空间来存放。当游戏最后需要读取数组元素时,通过寻找数组内存位置来找到数组。

六、心得体会

在此次英文填字游戏的设计中,既明白了更多的知识,也收获了不少阅历。这是我初次接触汇编语言,他并不像高级语言那样的通俗易懂,也没有高级语言灵活好用,这就给我的学习与设计带来了较大的困难。值得庆幸的是,在学习过程中,有同学们给我指点方向,也可在网上查到需要用到的相关资料,更有老师对我们的程序以及设计的指导,这使我的思考和动手能力得到了提升。在设计游戏过程中,我懂得了许多关于汇编语言的用法,也积极与同学们沟通,共同商量英文填字游戏的设计思想,在参考其他游戏的程序设计时,我了解到了更多有关游戏的理念,虽然在此过程中有困难、有争论、有懈怠,但是我们还是完成了此次游戏的设计与开发。只要我们用心学习,刨根问底,就一定有希望。完成了此次设计,不仅学习到了更多,也使我更有信心去完成其他课程的学习,更增强了我对计算机语言的兴趣。在今后的学习中,我会更加勤奋,为未来打下坚实的基础。

上传的附件 cloud_download 英文填字游戏程序设计与开发.zip ( 85.83kb, 4次下载 )
error_outline 下载需要6点积分

发送私信

精品资源尽在此

45
文章数
0
评论数
最近文章
eject