VB课程设计(论文)任务书
土木建筑 学 院 土木工程 专 业 4 班
一、课程设计(论文)题目 : 小人移动
二、课程设计(论文)工作自2014 年 6 月16日起至 20## 年6 月 22 日止
三、课程设计(论文) 地点: 计算中心8#605
四、课程设计(论文)内容要求:
1. 本课程设计的目的
(1)进一步巩固和加深对“VB程序设计”课程基本知识的理解和掌握,了解VB语言在项目开发中的应用。
(2)学习程序设计开发的一般方法,了解和掌握项目开发过程及方式,培养正确的设计思想和分析问题、解决问题的能力,特别是项目设计能力。
(3)通过对标准化、规范化文档的掌握并查阅有关技术资料等,培养项目设计开发能力。
2. 课程设计的任务及要求
(1) 基本要求:
(1) 对系统功能进行需求分析;
(2) 使用Visual basic开发环境进行程序开发;
(3) 提出系统的设计方案;
(4) 编写源程序代码并进行调试。
(2) 创新要求
在基本要求达到后,可进行创新设计。
(3) 课程设计报告撰写及装订要求
课程设计报告的撰写要求表述简明,图表准确。
报告按如下内容和顺序用A4纸进行打印并装订成册。
(1)封面
采用统一的课程设计封面,并按要求填写好封面要求的个人信息和选题。
(2)设计任务书
(3)评阅书
(4)目录
(5)正文
(6)主要参考文献
(4) 课程设计评分标准:
(1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60分;
(2)能正确回答设计的中老师所提问题,可增加10分;
(3)课程设计报告书写规范整齐,可增加10分;
(4)心得体会认真总结,可增加10分;
(5)程序有创新性,可增加10分;
成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。
(5) 课程设计进度安排
(1)准备阶段(6学时):选择设计题目、了解设计目的要求、查阅相关资料。
(2)程序模块设计分析阶段(8学时):程序总体设计、详细设计。
(3) 代码编写调试阶段(10学时):程序模块代码编写、调试、测试。
(4) 撰写论文阶段(6学时):总结课程设计任务和设计内容,撰写课程设计论文。
(6)课程设计题目具体要求:
设计要求:从迷宫的入口走到出口。详细要求如下:
1. 能够打开已有的迷宫文件并进行游戏。
2. 游戏者使用光标键移动目标。
3. 可对游戏者使用时间计时。
4. 移动目标只能在通道中移动。
5. 可以自定义使用的移动键。
6. 程序分为设计和游戏两种状态。
7. 在设计模式能够通过鼠标直接绘制的方式设计迷宫并能将所设计的布局保存到文本文件中,保存格式见素材中的样例文件。
8. 设计迷宫时可以指定入口和出口(入口用S表示,出口用F表示,通道用#表示,墙用空格表示,全用半角字符,设计时用鼠标左键开辟通道,CTRL+鼠标左键设置迷宫入口,CTRL+鼠标右键设置迷宫出口)。
9. 被移动目标可以使用提供的图片,或者自行安排其他控件。
10. 支持显示的背景设置,可以设置成任意色彩或者图案。
11.创新要求
在基本要求达到后,进行创新设计,创新方向提示如下:
★ 增加三维迷宫线路。
★ 可以设置迷宫的大小。(10x20到50x100)
★ 其它创新(有一定难度,实现代码在30行以上)。
学生签名:
20##年 6月22日
课程设计(论文)评阅意见
评阅人 职称 讲师
20##年 6 月 22 日
目 录
第1章 系统概要. 1
1.1功能大概介绍. 1
第2章 总体设计. 2
2.1设计思路. 2
2.2 设计方案. 2
2.3方案解决. 2
第3章 源程序代码. 4
3.1 属性窗口. 4
3.2 Form1的窗口代码. 4
第4章 运行结果及分析. 9
4.1 运行结果. 9
4.2程序分析. 10
4.3运行程序使用说明. 10
第5章 心得体会. 11
参考文献. 12
第1章 系统概要
程序设计可以参考图,(也可以自己设计,完成即可)本设计小人移动,从迷宫的入口走到出口,属于游戏类。
1.1功能大概介绍
⑴启动程序,出现小人行走的界面
⑵通过上、下、左、右健控制小人行走,小人通过走空白的地方寻找出口。
⑶当小人走出迷宫时,弹出窗口显示“恭喜你,成功走出迷宫”。
第2章 总体设计
2.1设计思路
通过上下左右键控制小人行走走出迷宫。
如图2-1为程序流程图。
↓↓
图2-1 流程图
2.2 设计方案
①设计程序界面
迷宫线路可以使用两种方法实现,一是事先画好,二是利用line控件通过数组动态生成。
②编写代码
包括事件处理过程和功能函数,还有必要的声明。变量声明部分声明本程序所需要的变量和数组。要添加必要的程序说明语句。
事件处理包括下面的主要事件:
Form_Load()
作一些初始化的工作。画迷宫线路。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
利用光标键控制目标移动。
2.3方案解决
1.从文件中读取数据建立一个二维数组
打开提供的路线文件就可以发现这个文件是由”#”和” ”构成的,对于文件部分课堂上没有讲解,但是可以看课本的第7章。下面是具体使用方法。
fnum = FreeFile ‘得到空文件号
Open SelectFile For Input As #fnum ‘打开文件并指定缓冲区的文件号
Input #fnum, NumRows, NumCols ‘读入数组的行(NumRows)和列(NumCols)值
ReDim LelMove(1 To NumRows, 1 To NumCols) ‘定义动态数组的大小
对于此二维数组值的获得,可以使用双重循环逐行读入。对读入的每一行mid()取子串生成二维的逻辑性数组。
ch = Mid(row, c, 1) ‘row为读入的每行内容
LelMove(r, c) = (ch <> "#") ‘判断ch <> "#"成立则为True,否则为False
另外注意对入口s和出口f的判断。数组形成之后定义form的高度和宽度(注意应该和迷宫线路的宽度、二维数组相结合),这里还要涉及到窗口的属性ScaleMode=vbPixels。
2.利用数组画迷宫线路
如果二维数组读入正确,画线就很简单了,只需设定线高和线宽就可以了(参考线高和线宽值为20)。仍然要注意提取入口和出口的坐标值。
Line (c * SQUARE_WID, r * SQUARE_HGT)-Step(-SQUARE_WID, -SQUARE_HGT), clr, BF ‘线路的高度SQUARE_WID,宽度 SQUARE_HGT,颜色clr
3.移动目标
小人这里面使用的是Picture控件,图片已提供。小人根据坐标x,y值出现
PaintPicture picPlayer.Picture, x, y
但是怎么样使旧的小人擦除?可以确定原位置然后重新画线。小人要通过光标键来移动,这就用到了下面的事件
Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
‘KeyCode 是按键返回的键值,我们涉及到的有vbKeyLeft,vbKeyRight, vbKeyDown, vbKeyUp
通过上面的事件和二维数组结合起来,在可走的地方小人允许出现,这样就可以确定小人只能沿着你画好的线路走。
第3章 源程序代码
3.1 属性窗口
Begin VB.Form Form1
AutoRedraw = -1 'True
BackColor = &H80000004&
Caption = "闯迷宫"
ClientHeight = 9630
ClientLeft = 225
ClientTop = 555
ClientWidth = 12765
FillColor = &H80000004&
FillStyle = 0 'Solid
KeyPreview = -1 'True
LinkTopic = "Form1"
MaxButton = 0 'False
Picture = "迷宫.frx":0000
ScaleHeight = 9630
ScaleWidth = 12765
StartUpPosition = 2 '屏幕中心
Begin VB.PictureBox Picture2
BorderStyle = 0 'None
Height = 400
Index = 1
Left = 11600
Picture = "迷宫.frx":0461
ScaleHeight = 405
ScaleWidth = 405
TabIndex = 2
Top = 9200
Width = 400
End
3.2 Form1的窗口代码
BorderStyle = 0 'None
Height = 400
Index = 0
Left = 400
Picture = "迷宫.frx":08C2
ScaleHeight = 405
ScaleWidth = 405
TabIndex = 1
Top = 0
Width = 400
End
Begin VB.Timer Timer1
Enabled = 0 'False
Interval = 2000
Left = 7320
Top = 240
End
Begin VB.PictureBox Picture1
BackColor = &H0000FF00&
Height = 400
Left = 400
Picture = "迷宫.frx":0D23
ScaleHeight = 345
ScaleWidth = 345
TabIndex = 0
Top = 400
Width = 400
End
Begin VB.Menu mig
Caption = "随机生成迷宫"
End
Begin VB.Menu dmg
Caption = "启动动态迷宫"
End
Begin VB.Menu start
Caption = "初始化"
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Const row = 22, col = 30
Dim grid(row + 1, col + 1)
Private Sub dmg_Click()
Picture1.Left = 400 '初始化图片位置
Picture1.Top = 400
Timer1.Enabled = True '启动时钟
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) '键盘控制图片移动
l = Picture1.Left \ 400
t = Picture1.Top \ 400
Line (l * 400, t * 400)-(400 * (l + 1), 400 * (t + 1)), vbGreen, BF '显示走过的路径
Select Case KeyCode '随着键盘的动作来移动
Case vbKeyLeft
If Picture1.Left - 400 >= 400 Then
If grid(t, l - 1) = 0 Then
Picture1.Left = Picture1.Left - 400
Picture1.Top = Picture1.Top
End If
End If
Case vbKeyRight
If Picture1.Left + 400 <= 400 * col Then
If grid(t, l + 1) = 0 Then
Picture1.Left = Picture1.Left + 400
Picture1.Top = Picture1.Top
End If
End If
Case vbKeyDown
If Picture1.Top + 400 <= 400 * row Then
If grid(t + 1, l) = 0 Then
Picture1.Left = Picture1.Left
Picture1.Top = Picture1.Top + 400
End If
End If
Case vbKeyUp
If Picture1.Top - 400 >= 400 Then
If grid(t - 1, l) = 0 Then
Picture1.Left = Picture1.Left
Picture1.Top = Picture1.Top - 400
End If
End If
End Select
If Picture1.Top \ 400 = row And Picture1.Left \ 400 = col - 1 Then
Timer1.Enabled = False
MsgBox ("恭喜你,成功走出迷宫!") '显示成功信息
End If
End Sub
Private Sub Form_Load()
Open "迷宫矩阵.txt" For Input As #1 '读取迷宫矩阵,绘制迷宫图
For i = 0 To row + 1
For j = 0 To col + 1
If 1 <= i And i <= row And 1 <= j And j <= col Then
Input #1, grid(i, j)
If grid(i, j) = 1 Then '值为1则表示障碍或墙,0则表示通道,即可行路径
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbBlue, BF
End If
Else
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbBlue, BF
End If
Next
Next
Close #1
End Sub
Private Sub mig_Click() '随机获取迷宫矩阵
Picture1.Left = 400
Picture1.Top = 400
Randomize
m = row * Int(20 * Rnd)
Open "迷宫矩阵.txt" For Input As #1 '读取事先设计好的迷宫矩阵,随机读取一种矩阵
Do While n <> m
Line Input #1, temp
n = n + 1
Loop
For i = 1 To row
For j = 1 To col
Input #1, grid(i, j)
If grid(i, j) = 1 Then
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbBlue, BF
Else
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbWhite, B
End If
Next
Next
Close #1
End Sub
Private Sub start_Click()
Picture1.Left = 400
Picture1.Top = 400
Open "迷宫矩阵.txt" For Input As #1 '初始化迷宫矩阵
For i = 1 To row
For j = 1 To col
Input #1, grid(i, j)
If grid(i, j) = 1 Then
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbBlue, BF
Else
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbWhite, B
End If
Next
Next
Close #1
End Sub
Private Sub Timer1_Timer() '使迷宫矩阵动态变化,随机生成的迷宫可能是走不通的
X = 1: Y = 1
For i = 1 To row
For j = 1 To col
Randomize
grid(i, j) = Int(2 * Rnd)
If grid(i, j) = 1 Then
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbBlue, BF
Else
Line (j * 400, i * 400)-(400 * (j + 1), 400 * (i + 1)), vbWhite, B
End If
Next
Next
End Sub
第4章 运行结果及分析
4.1 运行结果
如图4-1、4-2、4-3所示均为本程序的控制窗口。
图4-1form1(打开时显示截图)
图4-2为form1运行时截图
图4-3走出迷宫时截图
4.2程序分析
解释:得到的数据[i,j]既为小人在预先设定的二维数组的迷宫里的位置,依次通过这些位置,小人即可到达出口。
4.3运行程序使用说明
双击打开迷宫.exe,以上下左右键控制小人的移动,当你走出迷宫后会弹出一个“恭喜,成功走出迷宫”的窗体,除此之外,还可以点击左上角随机生成迷宫或动态迷宫等功能。
第5章 心得体会
(1)树立良好的学习心态
1、要相信自己能学好,要积极主动地学习。
2、要有一颗永不退缩的心,如果编程没有达到我们预期的效果和目的,这就需要我们细心地去寻找问题的所在,或许会找很久,但是只要我们有耐心,一点一点去查,就一定能找到问题所在。
(2)要有良好的学习习惯
1、课前预习,上课要认真听课并适当做些笔记,课后要认真复习并消化所学内容,在上机前可以先做一遍题目,看看会遇到那些问题。
2、VB程序设计的入门学习并不难,但却是一个十分重要的过程,这为培养程序设计思想打下了必要的基础。
(3)学习程序设计要注重理解一些重要的概念。
VB程序设计本身并不复杂,翻开一本程序设计学习的书籍,看到的无非就是变量、函数、条件语句、循环语句等概念。但要真正能进行程序设计,需要深入理解这些概念。因此,在程序入门阶段还是应该重视概念的学习。
(4)自己动手编写程序
在刚开始学习的阶段,锻炼自己的动手能力是非常重要的,亲自动手编写程序就是培养能逻辑思维。因此一定要多动手编写程序,而且要从小程序开始练习,逐渐提高写程序的能力。
(5)阅读、借签别人设计的好程序
多看别人设计好的程序代码,多看多实践,水平才能不断地提高,这才是“学以致用”。即使看不懂也没有关系,可以把这些代码输到机子里运行,然后根据运行结果去体会程序的思路和用途。
(6) VB程序设计学习的重点
1、程序设计课是高强度的脑力劳动,不是听会的,也不是看会的,而是练会的。
2、只有自己动手,编写一些程序,才会有成就感,进而对课程产生兴趣,学起来才比较从容。等你在编写大量程序之后,我想过二级肯定没问题,不过能不能做到真知灼见,运用自如我就不敢说了。
3、动手能力的培养是这门课和以往课程最大的不同之处。重点放在思路、算法、编程构思和程序实现上。语句只是表达工具,要求堂上积极思,尽量当堂学懂,并做到灵活应用。
参考文献
(1) Visual basic程序设计实验教程【M】 吴昊 杜玲玲(人民邮电出版社 2011.3)
(2) Visual basic程序设计【M】 熊李艳 周美玲(人民邮电出版社 2011.3)