推箱子VB课程设计说明书文档格式.docx
《推箱子VB课程设计说明书文档格式.docx》由会员分享,可在线阅读,更多相关《推箱子VB课程设计说明书文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
1.2课程设计的实验环境
硬件要求能运行Windows9.X操作系统的微机系统。
软件:
MicrosoftVisualBasic6.0
1.3课程设计的预备知识
熟悉VisualBasic6.0程序设计的基本语法知识及常用技巧。
1.4课程设计要求
按课程设计指导书提供的课题,每个小组设计一个完整的小游戏应用程序。
要求根据规定设计游戏的具体要求,按照应用程序的设计步骤和VB的基本知识应用程序的分析与实现。
应根据后面给出的基本学时分配合理安排设计时间,并独立完成各方面的设计。
选择同一题目的同学,可以共同协作完成一个应用程序的开发任务。
要求书写详细的设计说明书,对有复杂的代码段和程序段的部分,应画出程序流程图,写出全部的代码。
在界面设计中,需画出每个窗体的布局,进行属性说明,杜绝雷同。
第2章
课程设计内容
2.1游戏介绍
2.1.1游戏规则
游戏要求:
游戏开始时自动进入第一关,状态栏里显示操作提示。
可以通过方向键控制小人的移动,按空格键重新开始本关,或者用回车键、翻页键选择其他关;
当按下<
Esc>
键时退出本游戏。
在移动过程中,如果前方是一个箱子,并且箱子的前面没有墙或其他箱子阻挡,那么就可以把它向前推动一格。
游戏的任务是把所有的箱子都推到标记处。
2.1.2游戏说明
游戏的意图是要求玩家推动箱子完成三个箱子任务,左右键用于走动,SHIFT键用于推动箱子,CONTROL用于跳,SHIFT和CONTROL是推动箱子一起跳,若游戏失败可重新开始游戏。
2.2游戏设计
2.2.1界面设计
图2-1界面设计
2.2.2属性设置
Form1(map.frm)属性值:
控件名
Form1.Form
Hscroll1.
HScrollBar
Pictrue1.PictureBox
Label2.Label
属性值
Name
Form1
Hscroll1
Picture1
Label2
BackColor
&
H8000000F&
Caption
MenaceMapeditor
Left
Value
1
Visible
True
frmBlt(BLT.FRM)属性值:
frmBlt.Form
Timer1.timer
frmBlt
Timer1
Menace
Enabled
False
Interbal
100
Splash(splash.frm)属性值:
CmandButton
Image1.Image
Label1.label
Splash.Form
Command1
Image1
Label1
splash
Appearance
1-3D
PlayMenace
Theleftandrightarrowswalkmenace.
Cancel
BorderStyle
0-None
2-Sizable
图2-2属性设置
2.2.3编程思路及代码
游戏思路:
使用棋盘法设计推箱子游戏
“棋盘”游戏的种类丰富,俄罗斯方块,推箱子,象棋,五子棋......等等这些都可以归类到“棋盘”游戏中来。
面对这类游戏设计的时候,我本人的见解是首先对“棋盘”做研究,实在不行再去研究“棋子”。
换句话说,就是以游戏中的活动区域为研究对象,像象棋就是他的棋盘,俄罗斯方块就是他整个的方块的活动区域。
我们这里姑且就把他叫做“棋盘法”。
一.“棋盘法”基本实现方法
“棋盘法”实现起来其实很简单,一般来说就是把棋盘看作一个网格,那么我们就把他看作与之对应的二维数组。
然后适当组织数据结构去抽象旗子,制定规
则,这样就很容易实现游戏。
二.“棋盘法”的优缺点
任何一个算法或思想都是有优缺点的,而我们的“棋盘法”的最大优点就是可以方便我们组织数据结构,简化了游戏规则的编写,使我们编程时思路比较清晰直观,通常就是直接根据游戏实际规则编写就可以了,这个我们会以实例加以说明。
然而他最大的缺点就是可能耗费大量内存,试想,如果我们的棋盘规格很大,那我们就得开辟一个比较大的二维数组,并且如果你要将代码移植到单片机,ARM等硬件平台上。
那你就不得不考虑自己的方法问题,在这些硬件平台上内存资源是极其宝贵的。
也许有朋友会说那在PC机上总可以的。
的确现在PC机资源丰富,功能强大,可有时候还是不能如你所愿。
一个很经典的例子就是五子棋的人工智能,为了让五子棋在人机对战中具备攻防兼备的智能,我们只有开辟一个于棋盘规格相呼应的二维的树组来记录棋盘上各点的胜算几率,(有兴趣的朋友可以到网上去找找资料)这样的话,在DOS下你就只能开辟一个约10X10的棋盘,即使在WINDOWS下也只能大约16X16的棋盘。
(当然,这里是说直接开辟数组,采用特别技术的不算)。
所以说,这个“棋盘法”也是有他自己的限制的。
游戏代码:
Form1(map.frm)代码:
PrivateDeclareFunctionCreateCompatibleDCLib"
gdi32"
(ByValhdcAsLong)AsLong
PrivateDeclareFunctionDeleteDCLib"
PrivateDeclareFunctionDeleteObjectLib"
(ByValhObjectAsLong)AsLong
PrivateDeclareFunctionGetObjectLib"
Alias"
GetObjectA"
(ByValhObjectAsLong,ByValnCountAsLong,lpObjectAsAny)AsLong
PrivateDeclareFunctionSelectObjectLib"
(ByValhdcAsLong,ByValhObjectAsLong)AsLong
PrivateDeclareFunctionGetDCLib"
user32"
(ByValhwndAsLong)AsLong
PrivateDeclareFunctionLoadImageLib"
LoadImageA"
(ByValhInstAsLong,ByVallpszAsString,ByValun1AsLong,ByValn1AsLong,ByValn2AsLong,ByValun2AsLong)AsLong
PrivateDeclareFunctionStretchBltLib"
(ByValhdcAsLong,ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValnSrcWidthAsLong,ByValnSrcHeightAsLong,ByValdwRopAsLong)AsLong
PrivateDeclareFunctionShowCursorLib"
(ByValbShowAsLong)AsLong
ConstResolutionX=640
ConstResolutionY=480
DimddAsDirectDraw2
DimddsdFrontAsDDSURFACEDESC
DimddsFrontAsDirectDrawSurface2
DimddsBackAsDirectDrawSurface2
DimaDDSAsDirectDrawSurface2
DimtDDSAsDirectDrawSurface2
DimddCapsAsDDSCAPS
DimfxAsDDBLTFX
Dimspnx%(40),spny%(40),spnw%(40),spnh%(40),spnox%(40),spnoy%(40)
Dimmode%,anim%,animshift%,bname$(30),bcells%(30),bchar%(30,30),bxo%(30,30),byo%(30,30),blockx%(30),blocky%(30),blockcell%(30),blockmode%(30),blockcount%,level%
Dimmap(40,6)AsInteger
Dimmapl%,mapv%
PrivateFunctionCreateDDSFromBitmap(ddAsDirectDraw2,ByValstrFileAsString)AsDirectDrawSurface2
DimhbmAsLong
DimbmAsBITMAP
DimddsdAsDDSURFACEDESC
DimddsAsDirectDrawSurface2
DimhdcImage,mhdc,clrAsLong
hbm=LoadImage(ByVal0&
strFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILEOrLR_CREATEDIBSECTION)
GetObjecthbm,Len(bm),bm
Withddsd
.dwSize=Len(ddsd)
.dwFlags=DDSD_CAPSOrDDSD_HEIGHTOrDDSD_WIDTH
.DDSCAPS.dwCaps=DDSCAPS_OFFSCREENPLAIN
.dwWidth=bm.bmWidth
.dwHeight=bm.bmHeight
PrivateSubForm_Load()
Dima%,g$,bi%
mapv%=0
mode%=3
anim%=1
ShowCursor0
Dir