小游戏贪吃蛇的详细设计.docx
《小游戏贪吃蛇的详细设计.docx》由会员分享,可在线阅读,更多相关《小游戏贪吃蛇的详细设计.docx(24页珍藏版)》请在冰豆网上搜索。
![小游戏贪吃蛇的详细设计.docx](https://file1.bdocx.com/fileroot1/2022-11/18/bdddf57e-d069-411a-9fd2-1dd14422e91a/bdddf57e-d069-411a-9fd2-1dd14422e91a1.gif)
小游戏贪吃蛇的详细设计
摘要
在我们空闲的时候,我们可以用一些我们学过的知识编一些东西,通过这些东西我们可以学习到汇编语言综合应用程序设计方法,还可以提高汇编语言实际应用能力,充分了解计算机硬件和软件,完成理论到实践的推进过程。
这个程序就是用我所学过的汇编知识编的一个小游戏,这个游戏的程序主要就是用汇编宏和子程序的知识来编制而成的,我们用宏和子程序定义了很多的模块,模块也就是在我们的程序中直接可以调用的一个独立的程序。
所以我们编写程序的时候可以很方便的用到它,所以那些基础知识也是我们编写程序的基础。
关键词汇编贪吃蛇小游戏
前言
现在有的一些人感觉生活都是很无聊的,特别是我们这些学生,所以有些时候肯定会玩各种各样的游戏的,有一些大的游戏,玩起来会话掉很多的时间,而且也会花掉大量精力的,所以在一些闲暇的时候一些小游戏会博得很多人的喜爱,例如:
俄罗斯方块,和一些格斗游戏等等。
然而这些小游戏的设计方法和软件有很多,所以也有很多不同的效果,本篇设计是采用汇编中宏定义和调用,子程序的调用等一些汇编知识编制而成的一个贪吃蛇小游戏,通过这个小游戏的制作,我们可以得到很多的益处,一方面我们可以不在浪费平时的一些空闲的时间了,而热中于我们自己喜欢的游戏;另一个方面我们制作完游戏还可以给自己或者别人来享受一下,同时自己也会有一种成就感。
特别当你用自己学到的知识制作出一个东西的时候,或者克服一个困难的时候你就会发现你自己的价值所在了,而且这还能促进你喜欢学习的念头。
目录
一、系统分析……………………………………………………………………
二、系统总体设计……………………………………………………………
三、详细设计……………………………………………………………………
1、窗口化程序……………………………………………………………
2、建立小蛇和食物………………………………………………………
3、初始对话框……………………………………………………………
4、小蛇和食物的位置………………………………………………………
5、分配内存空间……………………………………………………………
6、调整链表大小……………………………………………………………
四、系统测试……………………………………………………………………
1测试方案及用例…………………………………………………………
2.测试结果及软件可靠性分析……………………………………………
3.游戏规则……………………………………………………………………
五、软件使用说明书……………………………………………………………
六、设计总结……………………………………………………………………
参考文献…………………………………………………………………………
致谢………………………………………………………………………………
程序清单………………………………………………………………………
一、系统分析
这个程序的总体的思想也就是主要用的就是宏和子程序的定义和调用,首先,定义了5个宏它们分别为:
屏幕初始化宏定义
在光标位置显示字符和属性定义
显示字符串宏定义
置光标位置宏定义
读光标位置的字符和属性宏定义。
它们在程序中起到主要的作用。
其次,就是子程序定义了,程序中定义了很多的子程序,其中有:
控制子程序
食物子程序,还有记分子程序等。
它们首先被主程序调用,然后它们之间再互相调用,这样构成了完整的游戏程序并实现其功能。
具体的设计思想是:
第一,对数据进行初始化,即对寄存器的初始化,比如对食物的初始化等。
第二,开始运行,判断是否符合条件,如果符合赢的条件的话,就会跳转到赢的那个子程序下,然后那个赢的子程序会调用记分的那个子程序,最后显示赢的信息和分数后再转到控制程序执行控制和其后的程序。
如果要是输的话,就会跳转到输的那个子程序下,然后那个输的子程序也会调用记分的那个子程序,最后显示得分和信息。
如果要是没有赢也没有输的话,那程序会跳到控制的子程序中,等控制完以后程序又会跳到程序判断的那个地方重复的执行。
这个就是完成这个游戏程序的整个思想。
二、系统总体设计
这个程序完成的功能就是和别的游戏一样,最初,给出一个初始化的界面,和一个4个方块组成的小蛇,我们要把那个最初给出那个小蛇穿过那个闪烁的小红黄相间的小方块,然后那个小方块就会变成我们那个小蛇上的组成单元一样的一个小方块,和在别的地方会在出现另一个小方块,我们接下来要做的就是要把那个小方块穿过来,然后我们那个小蛇就会变长了,然后在穿过小方块,就这样重复的做就行了,随着你的穿过你的小蛇就会越来越长了,这是你的得分就会越高,同时你难度也会变大的,因为如果你要碰到四周的变的话,或者你自己的那个小蛇首尾要是相连的话你就会输了,所以当你那个小蛇很长的时候,难度自然就会变大了。
动画贪吃蛇程序的流程图
三.详细设计
1.窗口化程序
.data
ClassNamedb"DLGCLASS",0;"snakeDlg",0
helpMsgdb"Help:
[Space]-PauseorStart|[Esc]-Exit|[Arrow]-Direction",0
scoreMsgdb"Length:
%d",0
gameoverdb"GAMEOVER!
",0
BkgndClrdd0000dd00h;0x00bbggrr
statusWidthdd280,350,-1
gSnakeSnakeSt<>
2.建立小蛇和食物
InitBmpproc,hWnd:
HWND
invokeGetDC,hWnd
movhdc,eax
;蛇体画片
invokeCreateCompatibleDC,hdc
movhSnkDC,eax
invokeLoadBitmap,hInstance,SnakeBmp
movhSnkBmp,eax
invokeSelectObject,hSnkDC,eax
;食物画片1
invokeCreateCompatibleDC,hdc
movhFdDC1,eax
invokeLoadBitmap,hInstance,FdBmp1
movhFdBmp1,eax
invokeSelectObject,hFdDC1,eax
;食物画片2
invokeCreateCompatibleDC,hdc
movhFdDC2,eax
invokeLoadBitmap,hInstance,FdBmp2
movhFdBmp2,eax
invokeSelectObject,hFdDC2,eax
3.初始对话框
WndProcprochWnd:
HWND,uMsg:
UINT,wParam:
WPARAM,lParam:
LPARAM
LOCALrect:
RECT
LOCALps:
PosSt
.ifuMsg==WM_CLOSE
invokeDestroyWindow,hWnd
.elseifuMsg==WM_CREATE
invokeGetWindowRect,hWnd,addrrect
invokeSetWindowPos,hWnd,HWND_NOTOPMOST,rect.left,rect.top,CLIENTW,CLIENTH,SWP_NOZORDER
.elseifuMsg==WM_INITDIALOG;此时对话框子控件都已经初始化好了
invokeSendDlgItemMessage,hWnd,IDC_SBR1,SB_SETPARTS,3,offsetstatusWidth
invokeSendDlgItemMessage,hWnd,IDC_SBR1,SB_SETTEXT,0,offsethelpMsg
invokeInitBmp,hWnd
invokeInitGame,hWnd
4.小蛇与食物的位置
pushrect.left
popps.x
pushrect.top
popps.y
moveax,ps.x
movebx,ps.y;ps存放的是下一个位置的坐标
5.分配内存空间
DelFromTailproc,ppNode:
dword
pushad
assumeeax:
ptrNode,ebx:
ptrNode
moveax,ppNode
moveax,dwordptr[eax]
cmpeax,0
jeLRET
.if[eax].next==NULL;只有一个元素,释放内在,将表头置空
invokeLocalFree,eax
moveax,ppNode
movDWORDptr[eax],0
jmpLRET
.endif
movebx,[eax].next
.while[ebx].next!
=NULL
moveax,[eax].next
movebx,[ebx].next
.endw
mov[eax].next,NULL
invokeLocalFree,ebx
6.调整链表大小
AddFromHeadproc,ppNode:
dword,pPos:
dword
pushad
assumeeax:
ptrNode,edx:
ptrPosSt
movedx,pPos
pushedx
invokeLocalAlloc,LPTR,sizeof(Node);会改变edx的值
popedx
movebx,[edx].x
mov[eax].data.x,ebx
movebx,[edx].y
mov[eax].data.y,ebx
movebx,ppNode
movebx,[ebx]
mov[eax].next,ebx
pusheax
moveax,ppNode
popDWORDptr[eax]
assumeeax:
nothing,edx:
nothing
popad
ret
AddFromHeadendp
四.系统测试
1.测试方案及用例
(1)在MASMPlus里编译snack.asm,编译无误后,接下来进行下一步测试。
(2)在所创建的窗口化程序里测试小蛇上,下,左,右,和吃食物及碰撞墙壁和自己发生的现象。
2.测试结果及软件可靠性分析
测试编译显示无误,出现界面
图4.1界面图
测试小蛇吃食物
图4.2吃食物图
吃食物成功
图4.3吃食物成功图
碰撞墙壁游戏结束
图4.4碰撞墙壁游戏结束
小蛇碰撞自己游戏结束
图4.5小蛇碰撞自己游戏结束图
3.游戏规则
贪吃蛇游戏是一款简单的益智类游戏,规则很简单,就是吃屏幕上的食物增加蛇的长度来提高分数,避免蛇撞墙和撞到自己导致游戏结束。
五.软件使用说明书
1、运行程序
在我们用的软件MASM32的目录下,我们可以找到snake.exe文件,双击就可以打开了。
2、玩游戏
我们通过键盘的上下左右键来控制里面我们的那个小蛇的,即键盘上的键,只需要
这四个键就可以了。
而且有空格键可以暂停或开始游戏,esc为退出游戏。
六.设计总结
这个小游戏程序主要