VB课程
报告---用VB语句实现贪吃蛇游戏
能源与动力工程学院
VB课程设计报告
题目1: 贪吃蛇游戏
题目2: 列车时刻查询
指导老师: 张小兵
学生姓名: 学 号:
专 业:
班 级: 10083201
2011年3月20日
《VB程序设计》课程设计报告
《VB程序设计》课程设计任务书
题目:
用VB语句实现贪吃蛇游戏
任务与要求:
程序能够实现简单的贪吃蛇游戏,保证软件可正常运行。
时间:2011 年 2 月 22 日 至 2011 年 3 月 13日 共 3 周
学生姓名: 马帅 学 号: 1008320126
专业: 武器系统与发射工程
指导教师: 张小兵
2011年3月 20日
- 1 -
课程设计题目:
贪 吃 蛇 游 戏
第一章 课程设计目的
随着学习内容的不断增多,各专业知识也不断增长,为了有效地提高学习效率,更有效的掌握所学知识,利用所学知识设计贪吃蛇游戏,熟练运用专业知识。本课题主要锻炼了对于控件数组,绘图,键盘事件处理,文本文件的读写,多模块程序设计,定时器控件,菜单的使用等知识的运用能力。
第二章 课程设计的要求
题目介绍:
“贪吃蛇”是一款很流行的电子游戏。一条蛇在棋盘状的格子上爬行,由键
1,5),当蛇的头部碰到数字时会盘控制其转弯;格子上随机地出现5个数字(
将数字“吃掉”,蛇的身体会变长。当蛇的头撞到障碍物(深色部分)或碰到自己身体时,游戏结束。游戏结束时,蛇身越长得分越高。
课程设计功能要求:
(1)程序启动界面由20*20个方格构成。开始时,蛇静止不动,蛇身由一串共
5个圆圈表示,身体黄色,代表头部的圆圈为红色,且有两只绿眼睛。 (2)按回车键开始游戏,蛇自动向前爬行,用户使用“????”4个方向键
使其拐弯不至于碰到障碍物或自己。蛇只能向前走或向左右转90度的弯,
不能后退。吃掉一个数字后,蛇的身体的幅度与数字的大小相同。例如,
吃掉“3”后,蛇身伸长3个圆圈。蛇身体的伸长不是一下子完成的,而是
在吃掉数字后一边爬行一边伸长的,这样是为了避免蛇的“尾巴”突然伸
长撞到障碍物或蛇自己。
(3)5个数字(1 -5)的位置是随机的,互不重叠的,且不能出现在障碍物和
蛇的身上。当蛇吃掉一个数字时,同样的数字随机的出现在其他位置上,
即格子上总保持有“1-5”5个数字。
- 2 -
《VB程序设计》课程设计报告
(4)游戏进行时,窗口标题栏上显示出已使用的时间和得分,得分是当前蛇身
体的长度。使用回车键可以暂停或继续游戏。
(5)蛇在爬行到边界时,如果未遇到障碍物,会从一侧爬出再从对面一侧爬入。
如果运行过程中,其头部碰到障碍物或自己的身体,则被撞死,游戏结束。
如果该用户的成绩超过了
成绩,则显示对话框,提示输入用户名,以
供记录成绩由“排行榜”功能显示。
(6)通过程序菜单的“开始/暂停(回车)”命令,也可以暂停或继续游戏(与
回车键功能相同)。选择“新开局”菜单项可以从头开始游戏。 (7)选择“设置”菜单命令,打开设置对话框。在该对话框中可以选择不同的
障碍物形状,也可以指定背景和障碍物的颜色。单击“设置”对话框底部
的“背景颜色”和“障碍物颜色”后面的颜色区,弹出“颜色”公共对话
框来指定颜色。设置完毕后,单击“确定”按钮关闭“设置”对话框,游
戏将按所选形状从头开始游戏。下一次启动程序,自动使用上次的设置。 (8)选择“排行榜”菜单命令打开“排行榜”对话框,显示每种障碍物下的最
好成绩。选择“清除所有记录”按钮可将记录清零。
第三章 课程设计报告内容
一(贪吃蛇游戏界面
主窗体界面:
- 3 -
课程设计题目:
“帮助”窗体界面:
“设置”窗体界面:
“排行榜”窗体界面:
- 4 -
《VB程序设计》课程设计报告
“关于”窗体界面:
二(贪吃蛇游戏部分代码
主窗体的部分代码:
'为所有随机出现的的数字定位:
Sub ShowNumberAll()
Dim i As Integer, j As Integer Dim k As Integer, m As Integer, l As Integer
Dim f As Boolean
Randomize
For m = 1 To 5
Do
i = Int(Rnd * 20)
j = Int(Rnd * 20)
- 5 -
课程设计题目:
'判断数字出现的位置是否合理
f = True
For k = 1 To intNum '判断是否出现在蛇身上
If i = Int(shp(k).Left / GRID) And j = Int(shp(k).Top / GRID) Then
f = False
Exit For
End If
Next
If f = True Then
For k = 1 To m - 1 '判断是否出现在已有的数字上
If i * GRID = lblNumber(k).Left And j * GRID = lblNumber(k).Top Then
f = False
Exit For
End If
Next
End If
If f = True Then
For k = 1 To 20 '判断是否出现在障碍物上
For l = 1 To 20
If Maze(j + 1, i + 1, curMaze) = 1 Then
f = False
Exit For
End If
Next
Next
End If
If f = True Then
Exit Do
End If
Loop
AppleX(m) = i
AppleY(m) = j
lblNumber(m).Left = AppleX(m) * GRID
lblNumber(m).Top = AppleY(m) * GRID
Next
End Sub
'为指定的数字定位:
Sub ShowNumber(m As Integer)
Dim i As Integer, j As Integer Dim k As Integer, l As Integer Dim f As Boolean
Randomize
Do
i = Int(Rnd * 20)
- 6 -
《VB程序设计》课程设计报告
j = Int(Rnd * 20)
' 判断数字出现的位置是否合适
f = True
For k = 1 To intNum
If i = Int(shp(k).Left / GRID) And j = Int(shp(k).Top / GRID) Then
f = False
Exit For
End If
Next
If f = True Then
For k = 1 To 5
If i * GRID = lblNumber(k).Left And j * GRID = lblNumber(k).Top Then
f = False
Exit For
End If
Next
End If
If f = True Then
For k = 1 To 20 '判断是否出现在障碍物上
For l = 1 To 20
If Maze(j + 1, i + 1, curMaze) = 1 Then
f = False
Exit For
End If
Next
Next
End If
If f = True Then
Exit Do
End If
Loop
AppleX(m) = i
AppleY(m) = j
lblNumber(m).Left = AppleX(m) * GRID
lblNumber(m).Top = AppleY(m) * GRID End Sub
'画蛇:
Private Sub DrawSnake() Dim i As Integer
intNum = 5 '初始段数
ReDim intDirect(5)
intDirect(1) = MazeInfo(3, curMaze)
shp(1).Left = GRID * (MazeInfo(2, curMaze) - 1) '蛇头位置
shp(1).Top = GRID * (MazeInfo(1, curMaze) - 1)
- 7 -
课程设计题目:
For i = 2 To intNum '加载新节点并确定其相对于头部的位置
Load shp(i)
shp(i).FillColor = vbYellow
shp(i).Left = shp(i - 1).Left
shp(i).Top = shp(i - 1).Top
Select Case MazeInfo(3, curMaze)
Case enmRight
shp(i).Left = shp(i - 1).Left - GRID
Case enmLeft
shp(i).Left = shp(i - 1).Left + GRID
Case enmDown
shp(i).Top = shp(i - 1).Top - GRID
Case enmUp
shp(i).Top = shp(i - 1).Top - GRID
End Select
shp(i).Visible = True
intDirect(i) = MazeInfo(3, curMaze) '默认运动方向
Next
Call DrawEye
End Sub
Private Sub DrawMaze()
Dim i As Integer, j As Integer
For i = 1 To 20
For j = 1 To 20
If Maze(i, j, curMaze) = 1 Then
Pic.Line ((j - 1) * GRID + 2, (i - 1) * GRID + 2)-(j * GRID - 2, i * GRID - 2),
lngMazeColor, BF
End If
Next
Next
End Sub
第四章 总结及个人心得体会
存在的不足:
在玩此游戏时,一不小心就可能将蛇“撞死”,本程序不能够添加“多条命”,即不能够允许蛇撞死3次或5次。
心得体会:
- 8 -
《VB程序设计》课程设计报告
课程设计是培养学生综合运用所学知识,发现,提出,分析,和解决实际问题,锻炼时间能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
通过这几周的vb课程设计,我学到了很多很多的东西,同时不仅可以巩固了以前学过的知识,而且学到了很多书本上所没有学到的知识。通过这次课程设计是我懂得了理论与实践相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说是困难重重,这毕竟是自己第一次做一个程序,难免会遇到各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解的不够深刻,掌握的不够牢固。通过这次课程设计之后,一定把以前所学的知识重新温故。
程序设计师需要大量的时间去动手练习才能体会到她的内涵,同时还需要用心去投入,时间和感情花下去之后,的确慢慢的感受到有所收获了,我也收获到了一点点的乐趣。可能是一个良性循环的开始吧,相信以后会做的更好的。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,但在老师和同学的帮助下终于解决。在此向老师还有给过我帮助的同学表示衷心的感谢~
第五章 参考书目:
Visual Basic程序设计教程(6.0版)
Visual Basic
- 9 -
课程设计题目:
《VB程序设计》课程设计任务书
题目:
用VB语句实现列车时刻查询
任务与要求:
程序能够实现列车时刻查询,保证软件可正常运行。
时间:2011 年 3 月 13 日 至 2011 年 3 月 18日 共 1 周
学生姓名: 马帅 学 号: 1008320126
专业: 武器系统与发射工程
指导教师: 张小兵
2011年3月 20日
- 10 -
《VB程序设计》课程设计报告
列 车 时 刻 查 询
第一章 课程设计目的
根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过做课程设计积累调试vb程序的经验;通过完成课程设计中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。本程序设计主要锻炼了对于读文本文件,动态数组,字符串处理,列表框控件的使用,多行文本控件的使用等知识的实际运用能力。
第二章 课程设计的要求
题目介绍:
坐火车是人们出行的重要交通方式,列车的起点站,终点站和发车时间,到达时间以及沿途经停各站的站名,停车发车时刻是人们非常关心的内容。本题目要求编制一个能够方便地查询上述信息的实用程序。
课程设计功能要求:
1. 程序启动后,左边的列表框中显示全部车次。单击其中一项,在窗口右上方
的4个文本框中显示此车站的起点站,终点站和发车,到达时刻;在右下方
的文本框(不能使用列表框)中显示此次车沿途停靠的所有车站及相应的到
站和发车时刻。
2. 在“经停车站”组合框中选择或输入一个站名然后回车,列表框中只列出经
过该车站的车次;单击列表框下方的“显示全部车次”按钮,列表框中重新
列出所有车次。
3. “经停站及时刻”文本框中各车站所对应的站名,到站时刻,发车时刻应纵
向对齐,特别是时间,必须通过冒号对齐。
4. 本题目提供了两个数据文件:content.txt和detail.txt,程序用到的车次信
息均来自于这两个文件。如果本程序启动时在可执行文件所在的文件夹下未
- 11 -
课程设计题目:
找到其中任何一个文件,则显示出错信息并自动关闭程序。要求编程时不能
改变这两个文件的存储格式。
第三章 课程设计报告内容
列车时刻查询部分代码
我在设计这个程序时主要遇到两个问题。
第一个大的问题就是怎样才能实现查询经过站点和显示车次途径车站和,经学长的指点后,通过以下代码就可以实现了:
Private Sub Com1_Click() '**查询经过站点
Dim n As Integer
List1.Clear: List2.Clear '清除界面
For i = 0 To k
If str(i) = Cob1.Text Then
For j = 0 To num - 1
If i < int1(j + 1) And i > int1(j) Then '判断经过站的车次区间
List1.List(n) = str1(j)
n = n + 1
End If
Next j
End If
Next i
End Sub
Private Sub Form_Activate() Text1.SetFocus '起点站获得焦点 End Sub
Private Sub List1_Click() '显示车次途径车站和时刻
Dim m As Integer, b As String, n As Integer, p As Integer
b = List1.Text: j = 0
List2.Clear
For i = 0 To num - 1
If b = str1(i) Then
Text1.Text = str2(i): Text2.Text = str3(i) '将起点站,终点站,发车时刻,到达时刻添入文本框中
Text3.Text = str4(i): Text4.Text = str5(i)
End If
End Sub
我所遇到的二个问题就是怎样才能让各项对齐,在学长的帮助下并给我提供了一段非常重要的代码“List2.List(j) = str(m) + Space(p) + RTrim(Format(str(m + 1),
"@@@@@@@@@")) + RTrim(Format(str(m + 2),
- 12 -
《VB程序设计》课程设计报告
"@@@@@@@@@@@@@@"))”,和一些指点,以下代码得以实现:
If List1.ListIndex = List1.ListCount - 1 Then n = k Else n = int1(i + 1)
For m = int1(i) + 2 To n - 3 Step 3
Select Case Len(str(m)) '判断站名长度以便list2中各项对齐
Case Is = 2: p = 5
Case Is = 3: p = 3
Case Is = 4: p = 1
End Select
List2.List(j) = str(m) + Space(p) + RTrim(Format(str(m + 1),
"@@@@@@@@@")) + RTrim(Format(str(m + 2), "@@@@@@@@@@@@@@"))
'对齐各项
j = j + 1
Next m
End If
Next i
End Sub
列车时刻查询界面设计:
一、系统登陆界面设计
- 13 -
课程设计题目:
二、查询界面设计
第四章 总结及个人心得体会
综合分析,本程设计有四个难点:
1. 程序显示的信息都是从content.txt和detail.txt两个文件中读取的。如果
列车时刻没有变化,只需修改这两个文件的内容即可,不必改动程序。 2. Content.txt文件保存了各车次的概要信息,包括车次名,起点站,终点站,
发车时刻,到达时刻,一个车次占一行。
3. Detail.txt文件中保存了所有车次停靠站的详细信息。每个车次信息的保存
方式都是相同的:首先一个星号“*”
为一行:然后是车次名为一行:在后是停靠站的站名和到达,发车时刻,每
个站为一行。起点站的“到达时刻”和终点站的“发车时刻”均为“--”。因
为每次车停靠站的数目不同,在读取detail.txt文件时,必须正确判断星号
“*”的位置。
4. 程序应在启动时将所有信息从文件读入动态数组中,从而不必在查询过程中
- 14 -
《VB程序设计》课程设计报告
频繁地读取文件影响查询速度。
存在的不足:
只能够查询信息,不能够扩充程序使之对列车信息进行修改,添加和删除操作。
心得及体会:
通过这几周的vb课程设计,我学到了很多很多的东西,同时不仅可以巩固了以前学过的知识,而且学到了很多书本上所没有学到的知识。通过这次课程设计是我懂得了理论与实践相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说是困难重重,这毕竟是自己第一次做一个程序,难免会遇到各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解的不够深刻,掌握的不够牢固。通过这次课程设计之后,一定把以前所学的知识重新温故。
程序设计师需要大量的时间去动手练习才能体会到她的内涵,同时还需要用心去投入,时间和感情花下去之后,的确慢慢的感受到有所收获了,我也收获到了一点点的乐趣。可能是一个良性循环的开始吧,相信以后会做的更好的。
第五章 参考书目:
Visual Basic程序设计教程(6.0版)
Visual Basic
- 15 -