推箱子设计报告书Word格式.docx
- 文档编号:16829440
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:22
- 大小:126.40KB
推箱子设计报告书Word格式.docx
《推箱子设计报告书Word格式.docx》由会员分享,可在线阅读,更多相关《推箱子设计报告书Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
课程设计的实验环境
软件:
MicrosoftVisualStudio2005
课程设计的预备知识
熟悉VisualBasic.net程序设计的基本语法知识及常用技巧。
六、系统分析与设计
流程图
推箱子
控制
帮助
开始
重新载入
选关
撤销
退出
排行榜
关于
保存
载入存档
操作
七、系统编码
OptionExplicit
EndSubOptionExplicit
'
API函数声明
PrivateDeclareFunctionBitBltLib"
gdi32"
(ByValhDestDCAsLong,ByValXAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLong
全局常量
PrivateConstMAXXAsInteger=20'
鼠标小人X轴定位
PrivateConstMAXYAsInteger=15'
鼠标小人Y轴定位
PrivateConstSIZEAsInteger=302'
制定小人大小
PrivateConstD_LEFTAsInteger=1'
控制小人向左运动
PrivateConstD_RIGHTAsInteger=0'
控制小人向右运动
PrivateConstD_UPAsInteger=2'
控制小人向上运动
PrivateConstD_DOWNAsInteger=3'
控制小人向下运动
PrivateConstB_GROUNDAsInteger=&
H0'
定义空白
PrivateConstB_DESTAsInteger=&
H1'
定义小人
PrivateConstB_BOXAsInteger=&
H2'
定义盒子
PrivateConstB_WALLAsInteger=&
H4'
定义墙
PrivateConstB_BACKAsInteger=&
H8'
定义背景
全局变量
private指只在只在推箱子的窗口可用
PrivateMap(MAXX,MAXY)AsInteger'
定义地图的大小
PrivateScenesCountAsInteger,CurrSceneAsInteger'
定义场景和当前场景
PrivateBoxCountAsInteger,CompletedAsInteger
PrivateXAsInteger,YAsInteger,DirAsInteger'
定义当前的位置
PrivateFileNumAsInteger
PrivateMapLoadingAsBoolean'
定义地图下载为逻辑变量
PrivatePlayingAsBoolean'
定义为逻辑变量
游戏开始
PrivateSubForm_Load()
Playing=False'
游戏开始
MapLoading=False'
地图下载
InitGame'
定义一个过程名
EndSub
游戏初始化
PrivateSubInitGame()'
FileNum=FreeFile'
一个整型函数,把文件赋给一个变量,下一个OPEN可以供文件使用的文件序号
Open"
Map.dat"
ForBinaryAccessReadAsFileNum'
文件以二进制形式记录打开
ScenesCount=LOF(FileNum)/SIZE'
文件尾函数/每关地图长度
IfScenesCount=0Then'
如果输出的场景为错,则输出没有可用的地图文件或文件格式出错,"
"
请把可用的Map.dat文件和游戏放在同一目录。
"
文件读取错误"
MsgBox"
没有可用的地图文件或文件格式出错,"
&
vbCrLf&
_
_
vbOKOnlyOrvbExclamation,"
End
EndIf
LoadMap1'
地图下载成功
Playing=True'
玩游戏
读取关卡数据
PrivateFunctionLoadMap(SceneAsInteger)AsBoolean
IfMapLoadingThenExitFunction'
系统推出功能
IfScene<
1OrScene>
ScenesCountThen'
如果场景是1或当前场景
LoadMap=False'
加载失败
ExitFunction'
则退出功能
MapLoading=True'
地图下载正确
CurrScene=Scene'
运行当前场景
Caption="
推箱子第"
CurrScene&
关"
'
显示推箱子在第几关
BoxCount=0:
Completed=0
Dir=0'
定义方向键
DimDataAsByte
GetFileNum,(CurrScene-1)*SIZE+1,Data'
选择场景加一
X=Data'
x方向的数据
GetFileNum,,Data
Y=Data'
Y方向的数据
DimiAsLong,jAsLong
Fori=0ToMAXY-1
Forj=0ToMAXX-1
Map(j,i)=Data'
IfMap(j,i)AndB_DESTThenBoxCount=BoxCount+1
Next
DrawMap
LoadMap=True
MapLoading=False
EndFunction
选择关卡
PrivateSubSelectMap()'
选择关卡
DimTempAsInteger
Temp=Val(InputBox("
请输入关数(1~"
Trim(ScenesCount)&
)"
"
选择一关"
1))
IfTemp>
=1AndTemp<
=ScenesCountThenCurrScene=Temp'
如果temp>
=1并且<
=当前场景那么就选择此为当前场景
LoadMapTemp
显示整个游戏画面
PrivateSubDrawMap()
DrawBoxj,i,Map(j,i)'
显示游戏画面的大小
DrawManX,Y
picMain.Refresh
显示背景块(包括地面、墙、箱子等)
PrivateSubDrawBox(ByValXAsInteger,ByValYAsInteger,ByValBoxTypeAsInteger)
DimOffsetAsInteger
SelectCaseBoxType
CaseB_BACK
Offset=0'
背景
CaseB_GROUND'
空白处的背景
Offset=1
CaseB_DEST'
显示目标图片
Offset=2
CaseB_BOX'
显示盒子
Offset=3
CaseB_WALL'
显示墙
Offset=4
EndSelect
BitBltpicMain.hDC,X*32,Y*32,32,32,picBoxs.hDC,Offset*32,0,vbSrcCopy
显示小人
PrivateSubDrawMan(ByValXAsInteger,ByValYAsInteger)'
使用API函数,定义小人控件的位置,大小
BitBltpicMain.hDC,X*32,Y*32,32,32,picMan.hDC,Dir*32,32,vbSrcAnd
BitBltpicMain.hDC,X*32,Y*32,32,32,picMan.hDC,Dir*32,0,vbSrcPaint
游戏操作(按键处理)
PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
IfNotPlayingThenExitSub
SelectCaseKeyCode
Case37'
小人的位置向上移动
ManMove-1,0
Case38
ManMove0,-1'
小人的位置向下移动
Case39
ManMove1,0'
小人的位置向左移动
Case40
ManMove0,1'
小人的位置向右移动
Case32
LoadMapCurrScene'
场景的切换
Case33
LoadMapCurrScene-1'
关卡减一关
Case34
LoadMapCurrScene+1'
关卡加一关
Case13
SelectMap'
选择地图
Case27
UnloadMe'
下载推出
游戏结束
PrivateSubForm_Unload(CancelAsInteger)
Close'
关闭窗口退出
小人移动
PrivateSubManMove(OffsetXAsInteger,OffsetYAsInteger)
DimDestXAsInteger,DestYAsInteger
IfOffsetY=-1Then'
小人向上移动
Dir=D_UP
ElseIfOffsetY=1Then
Dir=D_DOWN'
小人向下移动
ElseIfOffsetX=-1Then
Dir=D_LEFT'
向左移动
Else
Dir=D_RIGHT'
向右移动
DestX=X+OffsetX:
DestY=Y+OffsetY
IfDestX<
0OrDestX>
=MAXXOrDestY<
0OrDestY>
=MAXYThenExitSub
IfMap(DestX,DestY)AndB_WALLOrMap(DestX,DestY)AndB_BACKThenExitSub
IfMap(DestX,DestY)AndB_BOXThen‘定义地图的目标地址值
PushDestX,DestY,OffsetX,OffsetY'
推动箱子
DrawManDestX,DestY'
小人的位置
DrawBoxX,Y,Map(X,Y)
X=DestX:
Y=DestY
推动箱子
PrivateSubPush(SourceXAsInteger,SourceYAsInteger,OffsetXAsInteger,OffsetYAsInteger)
DimDestXAsInteger,DestYAsInteger'
定义场景的大小
DestX=SourceX+OffsetX:
DestY=SourceY+OffsetY
IfMap(DestX,DestY)AndB_WALLOrMap(DestX,DestY)AndB_BACKOr_
Map(DestX,DestY)AndB_BOXThenExitSub
Map(SourceX,SourceY)=Map(SourceX,SourceY)-B_BOX'
地图大小为减去盒子的大小
Map(DestX,DestY)=Map(DestX,DestY)+B_BOX'
地图大小为加上盒子的大小
DrawBoxDestX,DestY,B_BOX'
画出盒子的大小
DrawBoxSourceX,SourceY,Map(SourceX,SourceY)
DrawManSourceX,SourceY'
定义小人位置
DrawBoxX,Y,Map(X,Y)'
定义地图位置
X=SourceX:
Y=SourceY
picMain.Refresh'
刷新
IfMap(SourceX,SourceY)AndB_DESTThenCompleted=Completed-1
IfMap(DestX,DestY)AndB_DESTThenCompleted=Completed+1
IfCompleted=BoxCountThenWin
过关处理
PrivateSubWin()
IfMsgBox("
你太聪明了!
要继续玩下一关吗?
vbYesNo,"
过关!
)=vbNoThen'
过关了以后如果不继续则下载当前玩的场景
UnloadMe
IfNotLoadMap(CurrScene+1)Then
你已经过了最后一关!
还要继续吗?
真厉害!
)=vbYesThen
过关后如果选择继续则下载下一关的地图
PrivateSubpicMan_Click()
PrivateConstMaxXAsInteger=20'
定义场景X轴的宽度
PrivateConstMaxYAsInteger=15'
定义场景y轴的宽度
定义总背景常量并赋H0
H1'
定义小人常量并赋H1
H2'
定义盒子常量并赋H2
H4'
定义墙常量并赋H3
H8'
定义背景常量并赋H4
PrivateMap(MaxX,MaxY)AsInteger
PrivateXAsInteger,YAsInteger
PrivateScenesCountAsInteger,CurrSceneAsInteger
PrivateFileNumAsInteger
PrivateCurrBoxAsInteger'
当前使用的地图块
PrivateChangedAsBoolean'
地图是否改变,如果是,在切换和退出时提示保存
初始化
lblHelp.Caption=_
方向键-移动"
空格-选图"
Ctrl-绘图"
N-新地图"
PgUp-上一关"
PgDown-下一关"
_
S-保存"
Esc-退出"
其它说明:
一、任何未保存的操作都会有提示;
二、企鹅最后停留的位置为本关的起始位置。
定义在页面上显示的按钮
FileNum=FreeFile'
把一个文件赋给一个变量下一个语句可供文件使用的文件序号
ForBinaryAsFileNum'
打开一个地图数据作为该文件
ScenesCount=LOF(FileNum)/302
NewMap
保存地图
PrivateSubSaveMap()
IfCurrScene>
ScenesCountThenScenesCount=CurrScene
PutFileNum,(CurrScene-1)*302+1,CByte(X)'
定义当前地图的坐标
PutFileNum,,CByte(Y)'
文件为空
Fori=0To14
Forj=0To19
PutFileNum,,CByte(Map(j,i))'
保存当前地图
Changed=False
读取地图
PrivateSubLoadMap(OffsetAsInteger)
IfCurrScene+Offset>
ScenesCountThen
NewMap'
进入新的地图
ExitSub
IfCurrScene+Offset<
1Then
ExitSub'
退出地图
IfNotAskSaveThenExitSub
CurrScene=CurrScene+Offset
lblInfo.Caption="
第"
显示进入第几关
GetFileNum,(CurrScene-1)*302+1,Data
X=Data
GetFileNum,,Data'
位置为空,自动读取下一个位置
Y=Data
DimiAsLong,jAsLong
Fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 箱子 设计 报告书