您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 汇编课程设计拼图游戏
中北大学汇编语言程序设计课程设计说明书学生姓名:马刚学号:18学院:专业:软件工程题目:拼图游戏小组成员:指导教师:2011年12月一、需求分析1.1编写背景成绩:1随着信息时代的发展,计算机已经变为我们生活中不可缺少的一部分,它作为我们了解世界的一个窗口的同时还可以让我们从中以最快的速度查找学习资源,休闲之余,更多的人选择玩小型的益智游戏来放松,因为它不仅达到了娱乐的目的,而且对自己的思维有一定的帮助作用,根据大多数人的娱乐放松需求,我们做出了一款益智游戏——拼图游戏。拼图以游戏的形式锻炼了游戏者的脑、眼、手等,使人们获得身心健康,增强自身的逻辑分析能力,和思维敏捷性,娱乐性也十分强,既好玩又耐玩。1.2编写目的在此次课程设计中最主要的目的是通过对拼图的分析、设计与实现,将原理与应用相结合,使我们学会如何把书本上学到的知识用于解决实际问题中,培养我们的动手能力;另一方面是使我们能深入理解和灵活掌握教学内容。1.3设计内容根据设计任务和要求,在设计前必须对汇编语言熟悉了解和掌握。设计中完成的是对文件功能,鼠标操作功能,菜单功能和参数设置功能及其他功能的实现。1.4设计要求(1)文件功能:即实现打开游戏、保存相关参数的功能。(2)鼠标操作:点击并移动数字。(3)菜单功能:具有UNDO和REDO功能;并且可记忆所走的步及步数。(4)其他功能:可以显示出时间,有自动寻找移动(或拼图)的方法,可以替换图片的颜色。1.5系统需求分析1.5.1功能需求分析本实验是用汇编语言编写完成,功能完全仿照传统的拼图游戏制作而成,通过移动每一小块数字,每次只允许移动一块,最终要求将数字按从小到大的顺序排列出来,并且要求记录完整实现拼图所需的步数和时间。拼图游戏的主要功能如下:(1)让玩家用鼠标控制界面上各个菜单选项的选择,直接点击菜单栏进入菜单。(2)当玩家选择游戏类型后输入姓名,点击回车,进入拼图游戏主界面。(3)玩家可以通过键盘或鼠标控制图片的移动;游戏中记录玩家的步数。2(4)玩家可以根据选择不同的数字排列来进行游戏。(5)游戏结束后出现一句人性化的鼓励标语:“恭喜您完成拼图!”。1.5.2系统界面和性能要求美观,简洁,实用等,并且实时性好、可靠性好。1.5.3设计约束开发工具:masm运行环境:DOS环境能实现定义的各项要求1.5.4软硬件要求在Windows平台上运行1.5.5系统安全性需要在进行游戏时,必须对游戏等级,按键选择进行判断,并且判断游戏是否能够继续进行或结束,确保游戏数据安全。二、总体设计2.1系统总体设计3由于我们要将这个游戏写成一个应用程序,所以首先对游戏各个功能模块的实现进行了分工如下:组长:李玲:对游戏的需求分析及设计方案进行设计,并负责对游戏中文件功能及UNDO和REDO功能的实现。组员:赵世泉:负责对鼠标操作功能和具体菜单功能的实现,并实现代码的连接。马宏:负责对游戏中记忆所走步数及步数和显示时间功能的实现。李紫:负责对游戏中自动寻找移动(或拼图)方法的功能的实现。侯凯:负责对游戏中可替换颜色的功能的实现。2.2游戏设计思想本游戏的规则是:进入拼图游戏后,出现9个方格或是16个方格的游戏界面上有一个空格,游戏中在拼图过程中按下N键可以对数字进行重新排列,键盘中A代表向左走,D代表向右走,W代表向上走,S代表向下走。通过这四个键就可以将空格对应的上、下、左、右方向的小数字块移动到空格中,当所有的小数字块被移到了正确的位置后系统会自动显示整个排序好的图片,这就说明拼图已经完成。拼图完成之后,“步数”后面显示的数字就是你拼完总共用的步数。本游戏分为2种难度等级,一种为简单等级,是3*3的9个格子的拼图;另一个为困难等级,是4*4的16个格子的拼图。2.3总体流程设计如下4图1总体设计流程图2.4游戏的总界面如下选择游戏开始确定输入姓名游戏主界面拼图图块随机分配记录图块位置及所走步数和所用时间结束YN用户移动图块5图2进入游戏总界面进入游戏主界面选择游戏类型:游戏一和游戏二,游戏一为普通类型,游戏二为困难类型。用1和2数字键选择进入,则开始游戏;选择q来退出游戏。显示结果如下图3和图4:图3游戏一界面图4游戏二界面2.5详细见源程序pintu.asm三、详细设计6本人负责对游戏中记忆所走步数及步数和显示时间功能的实现。在编写记忆所走步数及步数这一块代码的时候,通过查阅课外书,以及多次的调试,最后将其表现在以下俩段代码中。遗憾的是在显示时间功能在编程过程中遇到了相当多的问题,在小组成员的讨论后,经过多次调试,最后都没有像我们想象的那样表现出来。3.1、体现在game1中,代码如下:;*****************************************************************************;code1,子程序game;*****************************************************************************CODE1SEGMENTASSUMECS:CODE1,DS:DATAGAME1PROCFARPUSHJCQNEWGAME1:CALLFARPTRCLEAR_SCREENMOVSI,OFFSETFILE_1CALLFARPTRDISPHEROSDISP_STRING_TEXTNEWG,2,60,11,0DHDISP_STRING_TEXTLEFT,3,60,RIGHT-LEFT,0DHDISP_STRING_TEXTRIGHT,4,60,UP-RIGHT,0DHDISP_STRING_TEXTUP,5,60,DOWN-UP,0DHDISP_STRING_TEXTDOWN,6,60,TOPTEN-DOWN,0DH;DISP_STRING_TEXTCLEAR,7,60,15,0DHDISP_STRING_TEXTEXI,7,60,NEWG-EXI,0DH;DISP_STRING_TEXTTOPTEN,10,60,6,04HDISP_STRING_TEXTNA_STEP,11,60,NUMBERS1-NA_STEP,04HDISP_STRING_TEXTXING,0,3,74,0DHDISP_STRING_TEXTXING,24,3,74,0DHDISP_STRING_TEXTGAMEONE,2,3,GAMETWO-GAMEONE,20H7DISP_STRING_TEXTYOU,9,56,20,0DHLEADI,SHU;shu是显示竖条的PLAY_ALLNUMDI,1,55;显示竖条LEADI,NUMBERS1MOVCX,36;累加执行36NEXT1:MOVBYTEPTR[DI],0INCDI;加1指令LOOPNEXT1;循环执行NEXT1DISP_STRING_TEXTLOAD,10,20,10,07HSUIJIN8SUIJIN1SUIJIN2SUIJIN7SUIJIN3SUIJIN4SUIJIN5SUIJIN6;定义了8个数LEAAX,N9;地址送寄存器LEADI,NUMBERS1;指针DI指向NUMBERS1MOV[DI+16],AX;设置初始的数字位置MOVBX,2;把2传给BXMOVCX,2;设置空格的初始位置MOVDX,0;记录移动的次数ADDDI,16;设置di的出始位置DISP_STRING_TEXTKO,10,20,10,07H8SHUCHU1:LEASI,NUMBERS1;输出9个数字PUSHDI;进栈PUSHDX;进栈PLAY_ALLNUM[SI],5,15PLAY_ALLNUM[SI+2],5,23PLAY_ALLNUM[SI+4],5,31PLAY_ALLNUM[SI+6],10,15PLAY_ALLNUM[SI+8],10,23;把数传送到地址空间PLAY_ALLNUM[SI+10],10,31PLAY_ALLNUM[SI+12],15,15PLAY_ALLNUM[SI+14],15,23PLAY_ALLNUM[SI+16],15,31;输出完毕POPDX;出栈POPDI;出栈PANDUAN1:CALLFARPTRDISP_DX;输出DXDISP_STRING_TEXTSTEP,13,70,8,0CHMOVAL,0CALLFARPTRB_PANDUAN1;调用FARPTRB_PANDUAN1CMPAL,1;比较AL和1JNZGETCHAR1;跳转到GETCHAR1DISP_STRING_TEXTSEC,22,3,KONG-SEC,01H;成功提示JMPL01;跳转L01L01:DISP_STRING_TEXTPRESS,22,22,LOAD-PRESS,01H;成功名;MOVSI,OFFSETFILE_1;CALLFARPTRFILE0;成功了9;MOVSI,OFFSETFILE_1;CALLFARPTRDISPHEROSMOVAH,07H;调用07H功能INT21H;返回CMPAL,'n';比较AL和nL1:JMPNEWGAME1;跳转到NEWGAME13.2、体现在game2中,代码如下:;*****************************************************************************;code2,子程序game2;*****************************************************************************LEAAX,N9;地址送寄存器LEADI,NUMBERS2;指针DI指向NUMBERS2MOV[DI+30],AX;设置出始的longge位MOVBX,3;把3传给BXMOVCX,3;设置空格的出始位置MOVDX,0;记录移动的次数ADDDI,30;设置di的出始位置DISP_STRING_TEXTKO,12,20,10,07HSHUCHU2:LEASI,NUMBERS2;输出16个数字PUSHDI;进栈PUSHDX;进栈PLAY_ALLNUM[SI],3,14PLAY_ALLNUM[SI+2],3,22PLAY_ALLNUM[SI+4],3,30PLAY_ALLNUM[SI+6],3,38PLAY_ALLNUM[SI+8],8,1410PLAY_ALLNUM[SI+10],8,22PLAY_ALLNUM[SI+12],8,30PLAY_ALLNUM[SI+14],8,38PLAY_ALLNUM[SI+16],13,14PLAY_ALLNUM[SI+18],13,22PLAY_ALLNUM[SI+20],13,30PLAY_ALLNUM[SI+22],13,38PLAY_ALLNUM[SI+24],18,14;把数传送到地址空间PLAY_ALLNUM[SI+26],18,22PLAY_ALLNUM[SI+28],18,30PLAY_ALLNUM[SI+30],18,38;输出完毕POPDX;出栈POPDI;出栈PANDUAN2:CALLFARPTRDISP_DX;调用FARPTRDISP_DXDISP_STRING_TEXTSTEP,1,45,8,0DH;输出DXMOVAL,0;把0赋给ALCALLFARPTRB_PANDUAN2;调用FARPTRB_PANDUAN2CMPAL,1;比较AL和0JNZGETCHAR2;跳转到GETCHAR2DISP_STRING_TEXTSEC,22,3,KONG-SEC,01HDISP_STRING_TEXTPRESS,22,20,LOAD-PRESS,01HPUSHSI;进栈MOVSI,OFFSETFILE_2CALLFARPTRFILE0;调用FARPTRFTLEO11POPSI;出栈;DISP_STRING_TEXTKONG,22,3,45,00HN:JMPNEWGAME2;跳转到NEWGAME2四、设计总结12通过这俩周课程设计,我从中学习到了很多东西,总结起来有如下二点:1、更深刻的体会到写程序最重要的是程序
本文标题:汇编课程设计拼图游戏
链接地址:https://www.777doc.com/doc-5898585 .html