推箱子设计文档.docx

上传人:b****5 文档编号:12361193 上传时间:2023-04-18 格式:DOCX 页数:58 大小:356.69KB
下载 相关 举报
推箱子设计文档.docx_第1页
第1页 / 共58页
推箱子设计文档.docx_第2页
第2页 / 共58页
推箱子设计文档.docx_第3页
第3页 / 共58页
推箱子设计文档.docx_第4页
第4页 / 共58页
推箱子设计文档.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

推箱子设计文档.docx

《推箱子设计文档.docx》由会员分享,可在线阅读,更多相关《推箱子设计文档.docx(58页珍藏版)》请在冰豆网上搜索。

推箱子设计文档.docx

推箱子设计文档

一、前言

推箱子游戏是非常经典的游戏,目的实在训练你得逻辑思考能力,在一个狭小的仓库中,要求把木箱放到指定的位置。

稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理的安排移动的次序和位置。

才能顺利的完成任务。

能在生活中给我们带来莫大的快乐,提升我们的大脑运算能力,开发我们的智慧。

可以说,这种智力型游戏,给这个社会制造了许多快乐,对儿童,少年的成长起到非常重大的作用,全家一起攻关还可以促进家庭的和谐。

 

二、摘要

近年来随着科技的飞速发展,汇编语言的应用正在不断的深入,汇编语言是直接面向处理器的程序设计语言,它比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,同时它可以用来编写系统软件,还可以用来编写应用软件和设计游戏等

本文着重分析用汇编语言实现一个较为简单的推箱子游戏,旨在介绍推箱子游戏的实现方法,本设计通过主界面对话框类,关口选择对话框类帮助对话框类三大类以及键盘操作模块,游戏当前关卡和关卡的运行时间模块,隐藏炸弹和引爆炸弹模块,地图文件读取模块,地图绘制模块。

实现了任意关数选择,游戏步数记录,游戏帮助,是否通关等多个功能,采用图形语句实现的一个完整的推箱子游戏界面,界面清晰可见。

关键词:

推箱子汇编语言模块

 

三、目录

 

四、系统分析

推箱子游戏具有的功能

(1)能够显示主菜单和界面

游戏需要提供货源主菜单让玩家进行游戏设置,同时能够把地图文件中的信息转化成图像显示到主游戏界面上。

(2)能够实现键盘操作功能

能够接收到键盘输入的方向键信息,并根据不同的方向键把游戏人物移动到相应的位置。

例如,玩家按方向键“上”

时,如果向上的位置是可移动的,那么就当把游戏人物向上移动一个方格。

(3)能够把放置到位置上的箱子进行变色显示

当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色。

这样就能明确的显示出该箱子已经放置到指定的位置上。

(4)支持游戏的时间计时和步数记录

当玩家开始游戏时就开始计时,游戏中的小人物每走一步就会记录一次步数。

(5)支持游戏的隐藏炸弹和引爆炸弹功能

如果玩家无法将指定的箱子全部推到放置点时,可以通过游戏中设置的隐藏炸弹引爆阻挡的墙可以继续游戏。

(6)支持关口选择功能

玩家在游戏中可自行选择需要挑战的关口。

当玩家点击菜单中的“下一关,上一关”按钮时可进行关口的调节

(7)游戏是否通关判断功能

在游戏中,当玩家把所有的箱子都推到箱子放置点时,玩家胜利通过当前游戏关口,进行下一关口的游戏。

如果玩家无法将指定的箱子全部推到放置点时,玩家失败。

玩家可以选择重新进行当前关口的游戏,还是退出游戏。

(8)游戏提供帮助说明

在游戏的菜单中,提供一个使用说明项,以便对本游戏不了解的玩家对游戏进行操作和使用。

 

系统流程图

 

进入

 

五、系统总体设计

推箱子游戏功能框架

根据推箱子游戏基本要求以及相关拓展功能,进行游戏功能设计,游戏功能总体设计框架图如下

 

六、详细设计

游戏界面设计

推箱子游戏的主界面设计,如图所示

其背景尾灰色格子,墙壁采用红色格子,通道为蓝色,下沿时间计时,炸弹数量,移动次数采用白色背景黑色字体。

 

程序结构设计

游戏共三个类五个模块组成,如下图所示

 

游戏主要类结构

游戏对话框类:

主要负责主界面,菜单及各个窗口类对象的创建和调用等处理。

键盘操作模块:

主要负责接收玩家键盘输入并进行对箱子移动等处理。

关口选择类:

主要负责游戏挑战关口的选择和设置。

地图文件读取模块:

主要内容负责读取地图文件进行相应的解析工作。

地图绘制模块:

主要将地图数组中的数据绘制成地图图像。

帮助对话框类:

主要帮助提示的显示及其他辅助信息。

隐藏炸弹和移动炸弹模块:

主要负责炸弹的在墙壁中的移动,方便玩家进行游戏通关。

地图矩阵

;No.1

dd3

db'0','0','0','0','0','0','0','0','0','0','0','0','0','0'

db'0','0','0','0','0','0','0','0','0','0','0','0','0','0'

db'0','0','0','1','1','1','1','1','1','1','0','0','0','0'

db'0','0','0','1','2','6','5','5','5','1','0','0','0','0'

db'0','0','0','1','2','2','2','1','1','1','1','0','0','0'

db'0','0','1','1','1','3','2','2','2','2','1','0','0','0'

db'0','0','1','2','2','2','1','3','1','2','1','0','0','0'

db'0','0','1','2','3','2','1','2','2','2','1','0','0','0'

db'0','0','1','2','2','2','1','1','1','1','1','0','0','0'

db'0','0','1','1','1','1','1','0','0','0','0','0','0','0'

db'0','0','0','0','0','0','0','0','0','0','0','0','0','0'

db'0','0','0','0','0','0','0','0','0','0','0','0','0','0'

第一关地图效果图

;No.2

dd3

db'0','0','0','0','0','0','0','0','0','0','0','0','0','0'

db'0','0','1','1','1','1','1','0','0','0','0','0','0','0'

db'0','0','1','6','2','2','1','0','0','0','0','0','0','0'

db'0','0','1','2','3','3','1','0','1','1','1','0','0','0'

db'0','0','1','2','3','2','1','0','1','5','1','0','0','0'

db'0','0','1','1','1','2','1','1','1','5','1','0','0','0'

db'0','0','0','1','1','2','2','2','2','5','1','0','0','0'

db'0','0','0','1','2','2','2','1','2','2','1','0','0','0'

db'0','0','0','1','2','2','2','1','1','1','1','0','0','0'

db'0','0','0','1','1','1','1','1','0','0','0','0','0','0'

db'0','0','0','0','0','0','0','0','0','0','0','0','0','0'

db'0','0','0','0','0','0','0','0','0','0','0','0','0','0'

第二关地图效果图

具体模块

游戏提示

运行过程

菜单栏里有3个游戏功能及关于窗口和退出按钮,可帮助用户更加方便地游戏

该游戏共有20个关卡,可通过“上一关卡”和“下一关卡”方便地选择任意关卡

炸弹功能

每一关有一个炸弹可用,按上下左右键可以控制炸弹位置,摧毁墙壁。

 

七、软件使用说明书

操作说明:

1.上、下、左、右键移动角色

2."B"键显示或隐藏炸弹

3.在炸弹显示的情况下,按"回车"键引爆炸弹(注:

只能将墙壁引爆)

4.按"退格"键可以返回上一步移动,只能回退20步

特殊说明

1)对菜单、工具栏、状态栏、位图进行了定义

2)写了窗口刷新部分的代码,提高了运行效率

3)写了检测是否通关的功能模块,并对地图数据作了修改,运行效率有所提高

4)加入作弊功能:

炸弹和回退功能

5)加入定时器功能

 

设计总结

作为一次综合实验比起前几次的实验还是比较难的,编写过程中遇到的问题也比较多,通过上几次实验的练兵,代码程序比较容易写,但开始调试却用了很多时间,最后认真的检查和跟同学交流讨论才找出所有的错误,确实调试是一件很不简单的事!

通过这个综合实验,对汇编语言有了更进一步的掌握,一些课堂上比较难弄懂的知识,做完这个实验后,基本都迎刃而解了。

为了更好的学好汇编语言,只有经常上机编程实验才能把课本上的知识应用到实践上,在实践中更好的掌握学到的知识。

同时,在编程的过程中时时刻刻都不要忘记细心、再细心,只要有一点点失误,就永远运行不了这个程序。

也许人生就如程序这样,以后无论在生活还是工作中都必须更加细心。

 

参考文献

《汇编程序设计 第二版》沈美明 温冬婵 编著 

《汇编语言程序设计 实验报告》沈美明 温冬婵 张赤红 著

《汇编语言程序设计案例精编》李珍香刘红梅赵润林著

《汇编语言实用教程--基于WIN32编程》秦莲姬伟峰电子工业出版社

《汇编语言》郑晓薇机械工业出版社

《微型计算机技术及应用》郑学坚北京:

清华大学出版社

 

致谢

这次汇编语言课程设计让我收获不少,虽然这次我这组的课程设计题目很难,但我也做得很认真。

在刘树群老师的指导和组员的合作下,我得以顺利地完成本次课程设计,并努力使设计更加完美。

在此,我要感谢刘树群老师的指导以及组员,感谢他们对我的帮助。

谢谢!

 

附录

完整代码

;************************************************************************

.386

.modelflat,stdcall

optioncasemap:

none

;************************************************************************

includewindows.inc

includeuser32.inc

includekernel32.inc

includegdi32.inc

includeComctl32.inc

includelibuser32.lib

includelibkernel32.lib

includelibgdi32.lib

includelibComctl32.lib

includeStoreHouse.inc;导入关卡地图数据

;************************************************************************

;宏定义数据

;------------------------------------------------------------------------

ICO_MAINequ1000h;窗口图标ID

ICO_MSGequ1001h

IDM_CURequ1000h;窗口光标ID

IDM_MAINequ1000h;菜单ID

IDM_REFLUSHequ1001h

IDM_PREVequ1002h

IDM_NEXTequ1003h

IDM_ABOUTequ1004h

IDM_EXITequ1005h

ID_TOOLBARequ1;工具栏ID

IDM_TOOLBARequ2000h;工具栏图标位图ID

ID_STATUSBARequ2;状态栏ID

DLG_MAINequ3;消息对话框ID

BM_MAINequ3000h;背景位图资源ID

ID_GAMETIMERequ100;关卡计时器

ID_SHOWBOMBequ101;刷新炸弹计时器

xBmBackequ0d

xBmWallequ30d

xBmRoadequ60d

xBmBox1equ90d

xBmBox2equ120d

xBmObjectequ150d

xBmManequ180d

xBmBombequ210d

VK_Bequ42h;字母"B"的扫描码

BackStepequ20d;后退的次数

;************************************************************************

;数据段

;------------------------------------------------------------------------

.const

szClassNamedb'Game',0

szCaptiondb'推箱子',0

dwStatusWidthdd80,160,255,-1

NUM_BUTTONSequ6;工具栏图标位图中包含的小图标个数

stToolbarequthisbyte

TBBUTTON<0,IDM_REFLUSH,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>

TBBUTTON<1,IDM_PREV,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>

TBBUTTON<2,IDM_NEXT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>

TBBUTTON<3,IDM_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>

TBBUTTON<0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>

TBBUTTON<4,IDM_EXIT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>

;------------------------------------------------------------------------

.data

szOutOfRangedb'已超出游戏关卡范围!

',0

szSuccessMsgdb'您成功通过了关卡!

是否继续?

',0

szGameOverdb'已到达最后一关',0

FmtGatedb'—第%d关',0

szBombdb'炸弹数量:

1',0

szNoBombdb'炸弹数量:

0',0

szStepdb'移动次数:

%d',0

szGameTimedb'%02d:

%02d:

%02d',0

;------------------------------------------------------------------------

.data?

hInstancedd?

;实例句柄

hWinMaindd?

;主窗口句柄

hMenudd?

;菜单句柄

hWinToolbardd?

;工具栏句柄

hWinStatusdd?

;状态栏句柄

hBackDCdd?

;背景位图设备环境句柄

hBitmapdd?

;背景位图句柄

LocalTimedd?

;当前系统时间的秒数

TimeCircledd?

;时间循环周期的秒数:

24*3600*n

TimeFlagdd?

;计时标志位,1表示进行及时;0表示停止计时

GameHourdd?

GameMinutedd?

GameSeconddd?

Mapdb14d*12ddup(?

);存放当前关卡的地图数据

ObjectLeftdd?

;剩余的目标地点数量

ManXPosdd?

;角色的列坐标

ManYPosdd?

;角色的行坐标

BombXPosdd?

;炸弹的列坐标

BombYPosdd?

;炸弹的行坐标

CurrentGatedd?

;当前的关卡号

BombCountdd?

;炸弹的剩余数量,初始化时为1

BombFlagdd?

;炸弹的存在标志,1表示存在,0表示隐藏

StepNumberdd?

;玩家移动次数

dwCountdd?

;随机数

BackBufferdd8*BackStepdup(?

);回退坐标缓冲区

BackLengthdd?

;当前可回退的次数

;************************************************************************

;************************************************************************

;代码段

;------------------------------------------------------------------------

.code

;************************************************************************

_Quitproc

invokeDestroyWindow,hWinMain

invokePostQuitMessage,NULL

ret

_Quitendp

;************************************************************************

;************************************************************************

;加载位图资源

;------------------------------------------------------------------------

_LoadResproc

local@hDC;参考句柄

invokeGetDC,hWinMain

mov@hDC,eax

invokeCreateCompatibleDC,@hDC

movhBackDC,eax

invokeLoadBitmap,hInstance,BM_MAIN

movhBitmap,eax

invokeReleaseDC,hWinMain,@hDC

invokeSelectObject,hBackDC,hBitmap

ret

_LoadResendp

;************************************************************************

;************************************************************************

;释放资源

;------------------------------------------------------------------------

_FreeResproc

invokeDeleteDC,hBackDC

invokeDeleteObject,hBitmap

invokeKillTimer,hWinMain,ID_GAMETIMER

;invokeKillTimer,hWinMain,ID_SHOWBOMB

ret

_FreeResendp

;************************************************************************

;************************************************************************

;设置当前系统时间

;------------------------------------------------------------------------

_SetLocalTimeprocusesebx

local@Hour,@Minute,@Second

local@stST:

SYSTEMTIME

invokeGetLocalTime,addr@stST

movzxeax,@stST.wHour

mov@Hour,eax

movzxeax,@stST.wMinute

mov@Minute,eax

movzxeax,@stST.wSecond

mov@Second,eax

moveax,@Hour

movebx,60d

mulebx

addeax,@Minute

mulebx

addeax,@Second

movLocalTime,eax

moveax,1

movTimeFlag,eax;允许及时

ret

_SetLocalTimeendp

;************************************************************************

;************************************************************************

;在状态栏中显示游戏中当前关卡的运行时间

;------------------------------------------------------------------------

_SetGameTimeproc

local@Hour,@Minute,@Second

local@stST:

SYSTEMTIME

pushad

.ifTimeFlag==1

invokeGetLocalTime,addr@stST

movzxeax,@stST.wHour

mov@Hour,eax

movzxeax,@stST.wMinute

mov@Minute,eax

movzxeax,@stST.wSecond

mov@Second,eax

moveax,@Hour

movebx,60d

mulebx

addeax,@Minute

mulebx

addeax,@Second

movecx,ea

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1