admin 管理员组文章数量: 887021
2024年3月1日发(作者:0是偶数吗还是奇数数吗为什么)
目 录
第1章 课程设计目的与要求 .....................................................................................................
1
1.1 课程设计目的 ........................................................................................................... 1
1.2 课程设计的实验环境 ............................................................................................... 1
1.3 课程设计的预备知识 ............................................................................................... 1
1.4 课程设计要求 ........................................................................................................... 1
第2章 课程设计内容....................................................................................................... 2
2.1 游戏介绍 ................................................................................................................... 2
2.2 游戏设计 ................................................................................................................... 2
2.3 游戏实现 ................................................................................................................... 12
第3章 课程设计总结....................................................................................................... 14
参考文献 ................................................................................................................................ 16
第1章 课程设计目的与要求
1.1 课程设计目的
本课程的课程设计实际是学生学习完《可视化编程技术》课程后,进行的一次全面的综合训练,其目的在于加深对可视化编程技术基本知识的理解,掌握运用VB开发应用程序的基本方法及基本技巧。
1.2 课程设计的实验环境
硬件要求能运行Windows 9.X操作系统的微机系统。
软件:Microsoft Visual Basic 6.0
1.3 课程设计的预备知识
熟悉Visual Basic 6.0程序设计的基本语法知识及常用技巧。
1.4 课程设计要求
按课程设计指导书提供的课题,每个小组设计一个完整的小游戏应用程序。要求根据规定设计游戏的具体要求,按照应用程序的设计步骤和VB的基本知识应用程序的分析与实现。应根据后面给出的基本学时分配合理安排设计时间,并独立完成各方面的设计。选择同一题目的同学,可以共同协作完成一个应用程序的开发任务。要求书写详细的设计说明书,对有复杂的代码段和程序段的部分,应画出程序流程图,写出全部的代码。在界面设计中,需画出每个窗体的布局,进行属性说明,杜绝雷同。
1
第2章 课程设计内容
2.1游戏介绍
2.1.1 游戏规则
游戏要求:游戏开始时自动进入第一关,状态栏里显示操作提示。可以通过方向键控制小人的移动,按空格键重新开始本关,或者用回车键、翻页键选择其他关;当按下
2.1.2 游戏说明
游戏的意图是要求玩家推动箱子完成三个箱子任务,左右键用于走动,SHIFT键用于推动箱子,CONTROL用于跳,SHIFT和CONTROL是推动箱子一起跳,若游戏失败可重新开始游戏。
2.2游戏设计
2.2.1 界面设计
图2-1界面设计
2
2.2.2 属性设置
Form1()属性值:
控件名
属性值
Name Form1
Hscroll1.
HScrollBar
Hscroll1 Picture1
&H8000000F&
Label2
&H8000000F&
Left
eBox
BackColor &H8000000F&
Caption Menace Map
editor
Value
Visible
frmBlt()属性值:
控件名
属性值
Name
BackColor
Caption
Enabled
Interbal
Splash()属性值:
控件名
属性值
Name Command1
frmBlt
&H8000000F&
Menace
True
True
1
True
True
True
Timer1
False
100
dButton
Image1
1-3D
Label1
1-3D
splash
1-3D Appearance 1-3D
Caption Play Menace The left and Menace
right arrows
walk menace.
3
Visible
Cancel
True
False
True
0-None
True
0-None
True
2-Sizable BorderStyle
图2-2属性设置
2.2.3 编程思路及代码
游戏思路:使用棋盘法设计推箱子游戏
“棋盘”游戏的种类丰富,俄罗斯方块,推箱子,象棋,五子棋......等等这些都可以归类到“棋盘”游戏中来。面对这类游戏设计的时候,我本人的见解是首先对“棋盘”做研究,实在不行再去研究“棋子”。换句话说,就是以游戏中的活动区域为研究对象,像象棋就是他的棋盘,俄罗斯方块就是他整个的方块的活动区域。我们这里姑且就把他叫做“棋盘法”。
一. “棋盘法”基本实现方法
“棋盘法”实现起来其实很简单,一般来说就是把棋盘看作一个网格,那么我们就把他看作与之对应的二维数组。然后适当组织数据结构去抽象旗子,制定规
则,这样就很容易实现游戏。
二. “棋盘法”的优缺点
任何一个算法或思想都是有优缺点的,而我们的“棋盘法”的最大优点就是可以方 4
便我们组织数据结构,简化了游戏规则的编写,使我们编程时思路比较清晰直观,通常就是直接根据游戏实际规则编写就可以了,这个我们会以实例加以说明。然而他最大的缺点就是可能耗费大量内存,试想,如果我们的棋盘规格很大,那我们就得开辟一个比较大的二维数组,并且如果你要将代码移植到单片机,ARM等硬件平台上。那你就不得不考虑自己的方法问题,在这些硬件平台上内存资源是极其宝贵的。也许有朋友会说那在PC机上总可以的。的确现在PC机资源丰富,功能强大,可有时候还是不能如你所愿。一个很经典的例子就是五子棋的人工智能,为了让五子棋在人机对战中具备攻防兼备的智能,我们只有开辟一个于棋盘规格相呼应的二维的树组来记录棋盘上各点的胜算几率,(有兴趣的朋友可以到网上去找找资料)这样的话,在DOS下你就只能开辟一个约 10X10
的棋盘,即使在WINDOWS下也只能大约 16 X 16 的棋盘。(当然,这里是说直接开辟数组,采用特别技术的不算)。所以说,这个“棋盘法”也是有他自己的限制的。
游戏代码:
Form1()代码:
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As
Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject
As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal
hObject As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst
As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As
Long, ByVal un2 As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As
Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC
As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal
nSrcHeight As Long, ByVal dwRop As Long) As Long
5
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
Const ResolutionX = 640
Const ResolutionY = 480
Dim dd As DirectDraw2
Dim ddsdFront As DDSURFACEDESC
Dim ddsFront As DirectDrawSurface2
Dim ddsBack As DirectDrawSurface2
Dim aDDS As DirectDrawSurface2
Dim tDDS As DirectDrawSurface2
Dim ddCaps As DDSCAPS
Dim fx As DDBLTFX
Dim spnx%(40), spny%(40), spnw%(40), spnh%(40), spnox%(40), spnoy%(40)
Dim mode% , 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%
Dim map(40, 6) As Integer
Dim mapl%, mapv%
Private Function CreateDDSFromBitmap(dd As DirectDraw2, ByVal strFile As String)
As DirectDrawSurface2
Dim hbm As Long
Dim bm As BITMAP
Dim ddsd As DDSURFACEDESC
Dim dds As DirectDrawSurface2
Dim hdcImage ,mhdc , clr As Long
hbm = LoadImage(ByVal 0&, strFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE Or
LR_CREATEDIBSECTION)
GetObject hbm, Len(bm), bm
With ddsd
.dwSize = Len(ddsd)
.dwFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
6
. = DDSCAPS_OFFSCREENPLAIN
.dwWidth = h
.dwHeight = ht
Private Sub Form_Load()
Dim a%, g$, bi%
mapv% = 0
mode% = 3
anim% = 1
ShowCursor 0
DirectDrawCreate ByVal 0&, dd, Nothing
perativeLevel , DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN
playMode ResolutionX, ResolutionY, 8, 0, 0
Set aDDS = CreateDDSFromBitmap(dd, & "")
Set tDDS = CreateDDSFromBitmap(dd, & "")
With ddsdFront
.dwSize = Len(ddsdFront)
.dwFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
. = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP
DDSCAPS_COMPLEX Or DDSCAPS_SYSTEMMEMORY
.dwBackBufferCount = 1
End With
Surface ddsdFront, ddsFront, Nothing
= DDSCAPS_BACKBUFFER
achedSurface ddCaps, ddsBack
Open & "" For Random As #1 Len = 2
For a% = 0 To 39
Get #1, a% * 6 + 1, spnox%(a% + 1)
Get #1, a% * 6 + 2, spnoy%(a% + 1)
Get #1, a% * 6 + 3, spnx%(a% + 1)
Get #1, a% * 6 + 4, spny%(a% + 1)
7
Or
Get #1, a% * 6 + 5, spnw%(a% + 1)
Get #1, a% * 6 + 6, spnh%(a% + 1)
Private Sub DrawNextFrame()
Dim a%, b%, xx%, ofx%, sp%, cbx%, cby%
Dim t As RECT
With fx
.dwSize = Len(fx)
.dwFillColor = RGB(0, 0, 0)
End With
= 0
= 0
= ResolutionY
= ResolutionX
t, Nothing, t, DDBLT_COLORFILL, fx
ofx% = mapl% 60
For a% = 0 To 11
If a% + ofx% >= 0 And a% + ofx% <= 39 Then
For b% = 6 To 1 Step -1
drawblock map(a% + ofx%, b% - 1), a% * 60 - (mapl% Mod 60), b% * 60
Next
End If
Next
For a% = 1 To 30
If blockmode%(a%) > 0 Then 'something to do
drawblock blockcell%(a%), (blockx%(a%) - mapl%) - 300, blocky%(a%)
Select Case blockmode%(a%)
Case 1, 2
If blockmode%(a%) = 1 Then blockx%(a%) = blockx%(a%) - 6 Else
blockx%(a%) = blockx%(a%) + 6
If blockx%(a%) Mod 60 = 0 Then
8
If blockmode%(a%) = 1 Then cbx% = (blockx%(a%) - 235) 60 Else
cbx% = (blockx%(a%) - 355) 60
cby% = (blocky%(a%) - 10) 60
blockmode%(a%) = 3 'fall
checkabove cbx%, cby%
End If
Case 3
If map((blockx%(a%) - 300) 60, (blocky%(a%) + 10) 60) = 0 Then
blocky%(a%) = blocky%(a%) + 10
Else
map((blockx%(a%) - 300) 60, (blocky%(a%) - 5) 60) = blockcell%(a%)
blockmode%(a%) = 0
checkforgroup
End If
End Select
End If
Next
Select Case mode%
Case 1, 2
Case 3, 4
anim% = anim% + 1
If anim% > bcells%(mode%) Then anim% = 1
If map((mapl% + 300) 60, (mapv% + 10) 60) = 0 And map((mapl% +
355) 60, (mapv% + 10) 60) = 0 Then
mapv% = mapv% + 10
Else
If mode% = 3 Then mode% = 6 Else mode% = 8
End If
If mapv% > 350 Then
mapv% = 350
9
If mode% = 3 Then mode% = 6 Else mode% = 8
End If
Case 5, 7 'jump left or right
anim% = anim% + 1
If anim% > bcells%(mode%) Then
If mode% = 5 Then mode% = 3 Else mode% = 4
anim% = 1
Else
If anim% <= 15 Then
If mode% = 5 Then 'left
If map((mapl% + 300) 60, (mapv% - 60) 60) = 0
mapl% = mapl% + bxo%(mode%, anim%)
Else
mode% = 3: anim% = 1
If animshift% Then startmove 1
Private Sub Timer1_Timer()
d = 0
While Not blnend
DrawNextFrame
u = DoEvents
Wend
Set aDDS = Nothing
Set tDDS = Nothing
GDISurface
eDisplayMode
perativeLevel 0, DDSCL_NORMAL
Set ddsBack = Nothing
Set ddsFront = Nothing
Set dd = Nothing
ShowCursor 1
10
Unload frmBlt
End Sub
If >= 0 Then
If xx% < 0 Then
= + Abs(xx%)
xx% = 0
End If
If xx% > 560 Then
= - (xx% - 560)
End If
If > Then t
DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT
End If
End Sub
If Not flag% Then
For b% = 0 To 5
ct% = 0: cc% = 0
For a% = 0 To 39
If map(a%, b%) > 3 Then
If map(a%, b%) <> cc% Then ct% = 0
cc% = map(a%, b%)
ct% = ct% + 1
Next
Select Case mode%
Case 1, 2
Case 3, 4
anim% = anim% + 1
If anim% > bcells%(mode%) Then anim% = 1
mapv% = mapv% + 10
Else
11
xx%, yy%, tDDS, t,
Next
End If
End Sub
2.3 游戏实现
2.3.1程序调试及测试
程序调试:
图2-3程序调试
测试:
图2-4 测试
12
2.3.2游戏运行
图2-5游戏运行
玩家即可进入游戏。
13
第3章 课程设计总结
我的课程设计内容是设计游戏——推箱子。在这次课程设计中,我运用了VB所学的知识,并且能够较熟练的使用一些编程语句。
回顾起此次课程设计,至今我们仍有很多感触。的确,自从拿到题目到完成整个编程过程,从理论到实践,在这整整半个学期的日子里,学到过很多很多的东西,在做这个课程设计时,不仅可以巩固了以前所学过的知识,而且还学到了很多在书本上没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中到应用,才能真正提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到不少的问题,可以说得是困难重重,这毕竟新做的,难免会遇到各种各样的问题。同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固。通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
其中有很多编程问题,起初,我不知道从什么地方入手,后来,慢慢的进入了状态。我们组做的是一个推箱子的设计,内容包括很多,所以我们组员改为分工合作,经过一星期的努力,我们完成了整个程序,但是总是有很多错误出现,有好多是些小问题,这都是我们粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文件的操作,是我们最大的问题,不过,后来经过反复琢磨和修改,还是完成了这些任务。
在这过程中,我们难免也会产生一些小矛盾,当然这是不可避免的。产生小矛盾并不要紧,重要的是我们如何去解决它。为什么会产生这些矛盾,以怎样的方式去解决它,这是我们应该去考虑的问题。我想经过这样的一个过程我们会学到很多,学会了怎样去和别人沟通,理解别人所做的事,别人也会宽容的对待我们,从而我们就在无形之中加强了我们的人际交往能力。这个经验对我们以后的人生将会发挥很大的作用。毕竟我们是生活在人类这个群体之中的。假如世界上只剩下一个人,那么他不可能长久的生活下去的。
一个团队单靠一个人或者队里几个人的努力是完不成整个队的任务的,需要队里所有人的共同努力。每个人都分配任务,并且是适合他的任务。要将不适合的任务分配给 14
一个人,那么他将很难完成。即使完成了,那一定是花很大的努力和精力去做了,那样效率就不高了。我们都希望在最短的时间里达到最高的效率。
生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。
本次课程设计,最后成功的完成了,这是老师让我们运用知识的很好的机会。
15
参考文献
[1] 汉清计算机工作室.Visual Basic 6.0 数据库开发实例.北京:机械工业出版社,2000:10-54
[2] 何旭洪.Visual Basic 数据库开发实例导航.北京:人民邮电出版社,2002:75-86
[3] 孙健鹏.VB数据库开发实例解析.北京:机械工业出版社,2005:204-283
[4] 王汉新.Visual Basic程序设计.北京:科学出版社,2002:128-197
[5] 陈惟斌.Visual Basic 6.0开发指南.北京:清华大学出版社,2001:100-201
[6] 张春葆.VB数据库系统设计与开发.北京:清华大学出版社,2006:273-294
[7] 李金玲.Access 2002数据库开发即时应用.北京:人民邮电出版社,2002:267-308
[8] 张之洞.Visual Basic 6 Harry M.北京:电子工业出版社,2005:128-231
[9] 李晓黎,张巍.Visual Basic应用系统开发与实例.北京:人民邮电出版社,2003:143-284
[10] 刘瑾.VB从入门到精通.北京:人民邮电出版社,2001:64-127
16
版权声明:本文标题:推箱子 VB课程设计说明书 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1709282026h541890.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论