汇编语言推箱子课程设计Word文档下载推荐.doc
- 文档编号:223343
- 上传时间:2023-04-28
- 格式:DOC
- 页数:29
- 大小:562KB
汇编语言推箱子课程设计Word文档下载推荐.doc
《汇编语言推箱子课程设计Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《汇编语言推箱子课程设计Word文档下载推荐.doc(29页珍藏版)》请在冰点文库上搜索。
2.4.1.数据类的设计与实现 17
2.4.2设定数据结构 18
3、游戏数据流程和设计方案 19
3.1数据流程和功能介绍 19
3.2设计目的 19
3.3主流程界面设计 19
3.4游戏设计任务和功能 20
4.程序调试﹑记录 22
5.总结 26
参考文献 27
致谢 28
28
1、绪论
1.1课题研究背景和意义
推箱子是一款来自日本的古老游戏,其设计目的是训练人的逻
辑思维能力。
游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。
这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。
随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本、各种类型的推箱子。
这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户。
如今,游戏机风行的程度,是第一台电子游戏机的研制者诺兰?
布什纳尔先生始料不及的。
在全世界最大的城市,直至最小的村庄,从纽约最辉煌的游乐场,到高加索最小的乡镇儿童娱乐点,在千家万户,正在进行着千千万万这样的“战斗”,伴随着无数成功与失败,兴奋与懊丧。
游戏机带来了一个全球性的疯狂症,其他任何娱乐与之相比都望尘莫及。
然而,究竟是什么原因使游戏机如此风行呢?
在回顾了游戏机发展简史之后,我们不难悟出,技术进步在游戏机发展过程中起到了极大的促进作用。
但是,技术进步绝不是游戏机风行的唯一因素。
随着终端设备开发能力的加强,作为娱乐终端的游戏机也得到了很大程度的发展。
这也加速了游戏机在全球风行程度,所以对于游戏机的研究和设计具有很重要的意义,这也是本课题研究的来源。
1.2推箱子游戏发展现状
本文针对推箱子游戏机的设计首先介绍了选题的要求,之后详细叙述了软件和硬件的设计过程。
最后论文对设计进行了总结,对设计中可以进一步改善的地方提出了建议。
在时钟脉冲的作用下,各个按键都能按照事先设定好的规则进行游戏控制。
确定键能使界面从初始化显示切换到游戏界面显示,上下左右键控制箱子的移动方向,如果可以移动则移动方块同时跟踪人物的位置及刷新动态数组的内容。
在游戏的同时程序会随时记录玩家所走的游戏步数、游戏时间,直至本关通过,在进入下一关的同时更新地图并刷新游戏步数和时间。
选关键用于选择游戏关数,在游戏过程中这个键任何时候都有效,当按下选关键后,游戏地图返回第一关,再次按下时游戏进入二关,这样每按下一次键游戏关数加一,如果游戏到了第最后一关将自动返回第一关
1.3设计方案
1.3.1.模块划分
本游戏分五个模块
(1)初始化模块,对游戏界面进行初始化操作,包括界面切换、控制声音播放和游戏的暂停与恢复,以及手机返回键的设置。
(2)功能实现模块,主要是对游戏中各个环节进行绘制,设计出系统地图,记录玩家所用步骤,对玩家触屏的设定,针对不同的手机分辨率绘制界面,音乐功能调用,游戏中所有文字的提示信息以及游戏中背景和文字颜色大小等设置的实现。
(3)游戏设计模块,实现玩家控制小乌龟的操作,使之能够操作箱子到各个位置,以完成游戏设定的任务。
(4)游戏数据模块,主要是对玩家编辑的自定义地图和玩家选择系统设置状态的保存,以及游戏数据合理性的判断。
(5)功能控制模块,控制游戏功能的实现,包括创建菜单、调用系统音乐、获取当前系统状态、获取游戏界面图标等参数、保存游戏。
2.6.2系统功能结构图
图3.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
LOCAL wc:
WNDCLASSEX
LOCAL msg:
MSG
mov wc.cbSize,SIZEOFWNDCLASSEX
mov wc.style,CS_HREDRAWorCS_VREDRAW
mov wc.lpfnWndProc,OFFSETWndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,OFFSETMenuName
mov wc.lpszClassName,OFFSETClassName
invokeLoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invokeLoadCursor,NULL,IDC_ARROW
mov wc.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
mov eax,msg.wParam
ret
WinMainendp
WndProcprochWin:
HWND,uMsg:
UINT,wParam:
WPARAM,lParam:
LPARAM
LOCALps:
PAINTSTRUCT
LOCALDc:
HDC
mov eax,uMsg
.ifeax==WM_KEYDOWN
invokeKeyDownProc,wParam
.elseifeax==WM_INITDIALOG
push hWin
pop hWnd
invokeGetDlgItem,hWin,IDC_TBRMAIN
invokeDoToolBar,hInstance,eax
invokeLoadRes
.ifeax==FALSE
invokeMessageBox,hWin,AddrszErrorMessage,\
AddrszLoadError,MB_ICONERROR
.endif
invokeInitStBar
invokeSelectGate,1
.elseifeax==WM_COMMAND
mov eax,wParam
and eax,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
.else
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
pushNewX
popManXPos
pushNewY
popManYPos
.elseifal==MAP_OBJECT
moval,MAP_BOX2
popManYPos
.endif
.elseifal==MAP_BOX2
moval,M2
.ifal==MAP_ROAD
moval,MAP_OBJECT
.elseifal==MAP_OBJECT
moval,MAP_OB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 箱子 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)