汇编语言推箱子课程设计Word格式.docx
- 文档编号:20585198
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:22
- 大小:386.39KB
汇编语言推箱子课程设计Word格式.docx
《汇编语言推箱子课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《汇编语言推箱子课程设计Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
布什纳尔先生始料不及的。
在全世界最大的城市,直至最小的村庄,从纽约最辉煌的游乐场,到高加索最小的乡镇儿童娱乐点,在千家万户,正在进行着千千万万这样的“战斗”,伴随着无数成功与失败,兴奋与懊丧。
游戏机带来了一个全球性的疯狂症,其他任何娱乐与之相比都望尘莫及。
然而,究竟是什么原因使游戏机如此风行呢?
在回顾了游戏机发展简史之后,我们不难悟出,技术进步在游戏机发展过程中起到了极大的促进作用。
但是,技术进步绝不是游戏机风行的唯一因素。
随着终端设备开发能力的加强,作为娱乐终端的游戏机也得到了很大程度的发展。
这也加速了游戏机在全球风行程度,所以对于游戏机的研究和设计具有很重要的意义,这也是本课题研究的来源。
1.2推箱子游戏发展现状
本文针对推箱子游戏机的设计首先介绍了选题的要求,之后详细叙述了软件和硬件的设计过程。
最后论文对设计进行了总结,对设计中可以进一步改善的地方提出了建议。
在时钟脉冲的作用下,各个按键都能按照事先设定好的规则进行游戏控制。
确定键能使界面从初始化显示切换到游戏界面显示,上下左右键控制箱子的移动方向,如果可以移动则移动方块同时跟踪人物的位置及刷新动态数组的内容。
在游戏的同时程序会随时记录玩家所走的游戏步数、游戏时间,直至本关通过,在进入下一关的同时更新地图并刷新游戏步数和时间。
选关键用于选择游戏关数,在游戏过程中这个键任何时候都有效,当按下选关键后,游戏地图返回第一关,再次按下时游戏进入二关,这样每按下一次键游戏关数加一,如果游戏到了第最后一关将自动返回第一关
1.3设计方案
1.3.1.模块划分
本游戏分五个模块
(1)初始化模块,对游戏界面进行初始化操作,包括界面切换、控制声音播放和游戏的暂停与恢复,以及手机返回键的设置。
(2)功能实现模块,主要是对游戏中各个环节进行绘制,设计出系统地图,记录玩家所用步骤,对玩家触屏的设定,针对不同的手机分辨率绘制界面,音乐功能调用,游戏中所有文字的提示信息以及游戏中背景和文字颜色大小等设置的实现。
(3)游戏设计模块,实现玩家控制小乌龟的操作,使之能够操作箱子到各个位置,以完成游戏设定的任务。
(4)游戏数据模块,主要是对玩家编辑的自定义地图和玩家选择系统设置状态的保存,以及游戏数据合理性的判断。
(5)功能控制模块,控制游戏功能的实现,包括创建菜单、调用系统音乐、获取当前系统状态、获取游戏界面图标等参数、保存游戏。
1.3.2系统功能结构图
图1.1系统功能结构图
2、程序设计说明及代码
2.1初始化模块
(1)设计游戏所需的一个简单的窗口应用程序,程序预处理部分包括加载头文件、定义全局变量和定义数据结构,并对它们进行初始化工作,游戏从第一关开始,按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。
如果游戏无成功希望,可以按空格键回到当前任务的开始状态;
如果成功完成当前关,则进入下一关,如果当前关是最后一关,则显示通关信息,提示游戏结束。
【程序如下】:
.386
.modelflat,stdcall
optioncasemap:
none
includeCBox.inc
includeStoreHouse.inc
.const
MAP_TOPequ32
MAP_LEFTequ1
xBmBackdd0
xBmWalldd30
xBmRoaddd60
xBmBox1dd90
xBmBox2dd120
xBmObjectdd150
xBmMandd180
szCaptiondb'
RedBox'
0
szLoadErrordb'
LoadResourceError!
'
szAlreadyMaxGatedb'
AlreadyMaxGate!
'
szOutOfRangedb'
OutofRange!
szSuccessMsgdb'
Youraresuccess'
13,10,'
Areyouwanttonextgate?
FmtStrdb'
val=%d'
FmtGatedb'
-No.%d'
.data?
bmToolbardd?
BackDcdd?
hBitMapdd?
szErrorMessagedb256dup(?
)
Mapdb14D*12Ddup(?
);
14x12Grid
ManXPosdd?
ManYPosdd?
CurrGatedd?
CurrStepdd?
.code
start:
invokeGetModuleHandle,NULL
movhInstance,eax
invokeGetCommandLine
movCommandLine,eax
invokeInitCommonControls
invokeWinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invokeExitProcess,eax
WinMainprochInst:
HINSTANCE,hPrevInst:
HINSTANCE,CmdLine:
LPSTR,CmdShow:
DWORD
LOCALwc:
WNDCLASSEX
LOCALmsg:
MSG
movwc.cbSize,SIZEOFWNDCLASSEX
movwc.style,CS_HREDRAWorCS_VREDRAW
movwc.lpfnWndProc,OFFSETWndProc
movwc.cbClsExtra,NULL
movwc.cbWndExtra,DLGWINDOWEXTRA
pushhInst
popwc.hInstance
movwc.hbrBackground,COLOR_BTNFACE+1
movwc.lpszMenuName,OFFSETMenuName
movwc.lpszClassName,OFFSETClassName
invokeLoadIcon,NULL,IDI_APPLICATION
movwc.hIcon,eax
movwc.hIconSm,eax
invokeLoadCursor,NULL,IDC_ARROW
movwc.hCursor,eax
invokeRegisterClassEx,addrwc
invokeCreateDialogParam,hInstance,addrDlgName,NULL,addrWndProc,NULL
invokeShowWindow,hWnd,SW_SHOWNORMAL
invokeUpdateWindow,hWnd
.whileTRUE
invokeGetMessage,addrmsg,NULL,0,0
.BREAK.if!
eax
invokeTranslateMessage,addrmsg
invokeDispatchMessage,addrmsg
.endw
moveax,msg.wParam
ret
WinMainendp
WndProcprochWin:
HWND,uMsg:
UINT,wParam:
WPARAM,lParam:
LPARAM
LOCALps:
PAINTSTRUCT
LOCALDc:
HDC
moveax,uMsg
.ifeax==WM_KEYDOWN
invokeKeyDownProc,wParam
.elseifeax==WM_INITDIALOG
pushhWin
pophWnd
invokeGetDlgItem,hWin,IDC_TBRMAIN
invokeDoToolBar,hInstance,eax
invokeLoadRes
.ifeax==FALSE
invokeMessageBox,hWin,AddrszErrorMessage,\
AddrszLoadError,MB_ICONERROR
.endif
invokeInitStBar
invokeSelectGate,1
.elseifeax==WM_COMMAND
moveax,wParam
andeax,0FFFFh
.ifeax==IDM_FILE_EXIT
invokeSendMessage,hWin,WM_CLOSE,0,0
.elseifeax==IDM_HELP_ABOUT
invokeShellAbout,hWin,addrAppName,addrAboutMsg,NULL
.elseifeax==IDC_TBB_NEW
invokeSelectGate,CurrGate
.elseifeax==IDC_TBB_PREV
moveax,CurrGate
deceax
invokeSelectGate,eax
.elseifeax==IDC_TBB_NEXT
invokeNextGate
.elseifeax==IDC_TBB_ABOUT
invokeShellAbout,hWnd,AddrAppName,AddrAboutMsg,NULL
.elseifeax==WM_PAINT
invokeBeginPaint,hWin,Addrps
movDc,eax
invokeWMPaint,Dc
invokeEndPaint,hWin,Addrps
.elseifeax==WM_CLOSE
invokeDestroyWindow,hWin
.elseifuMsg==WM_DESTROY
invokeFreeRes
invokePostQuitMessage,NULL
.else
invokeDefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
xoreax,eax
2.2功能控制模块(功能实现)
(2)小人移动的方向有4个,move()函数(处理小人移动的函数)对这4个方向移动的处理都一致,只是调用函数时的参数有所不同。
首先判断小人移动的方向,然后根据小人所处世的当前状态、下一步状态或者下下一步状态进行适当的处理。
KeyDownProcendp
ManMoveprocvKey:
LOCALNewX:
LOCALNewY:
LOCALNewX2:
LOCALNewY2:
LOCALM1:
byte
LOCALM2:
LOCALnPos1:
LOCALnPos2:
pushesi
moveax,ManXPos
movNewX,eax
movNewX2,eax
moveax,ManYPos
movNewY,eax
movNewY2,eax
moveax,vKey
.ifeax==VK_UP
decNewY
decNewY2
.elseifeax==VK_DOWN
incNewY
incNewY2
.elseifeax==VK_LEFT
decNewX
decNewX2
.elseifeax==VK_RIGHT
incNewX
incNewX2
ret
.endif
movesi,offsetMap
;
Pos=y*14+x
GetM1
moveax,NewY
movebx,14D
mulbx
addeax,NewX
movebx,eax
movnPos1,eax
moval,[esi][ebx]
movM1,al
GetM2
moveax,NewY2
addeax,NewX2
movnPos2,eax
movM2,al
moval,M1
.if(al==MAP_ROAD||al==MAP_OBJECT)
pushNewX
popManXPos
pushNewY
popManYPos
.elseifal==MAP_BOX1;
pushbox
moval,M2
.ifal==MAP_ROAD;
pushok
movebx,nPos2
moval,MAP_BOX1
mov[esi][ebx],al
movebx,nPos1
moval,MAP_ROAD
.elseifal==MAP_OBJECT
moval,MAP_BOX2
popManYPos
.elseifal==MAP_BOX2
moval,M2
.ifal==MAP_ROAD
moval,MAP_OBJECT
.elseifal==MAP_OBJECT
invokeRepaint
popesi
2.3游戏数据模块
(3)函数实现的功能分别是人空地移动箱子到空地、从目的地移动箱子到空地、从空地移动箱子到目的地和中从目的地移动箱子到目的地。
X、y指明小人当前所处的位置,字符a表示移动的方向,有“u”、“d”、“l”和“r”4个值,分别表示向上、下、左、右移动。
这几个函数的实现原理大致相似。
对于前面两个函数,首先判断移动的方向,人小人所在的位置沿着移动的方向移动一步画小人,移动两步画箱子,并设置状态为“b”;
对于后面两个参数,首先判断移动的方向,从小人所在的位置沿着移动方向移动一步画小人,移动两上在目的地画箱子,并设置状态为“i”,表明箱子在目的地上。
ManMoveendp
XYtoPosprocx:
DWORD,y:
;
pos=y*14+xZero-Based
moveax,y
movebx,14D
addeax,x
XYtoPosendp
Repaintproc
LOCALR:
RECT
invokeGetClientRect,hWnd,AddrR
invokeInvalidateRect,hWnd,AddrR,0
Repaintendp
Checkproc
CheckSuccessandreturntrueorfalse
LOCALResult:
pushTRUE
popResult
leaesi,Map
movecx,14D*12D
movebx,0
@@1:
incebx
cmpal,MAP_OBJECT
jz@@2
dececx
jnz@@1
jmp@@ExitCheck
@@2:
pushFALSE
@@ExitCheck:
moveax,Re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 箱子 课程设计