您的当前位置:首页正文

vb程序设计报告样本

2024-02-20 来源:帮我找美食网
长江大学工程技术学院

VB语言程序设计课程设计报告

(2010-2011学年 第二学期)

系 (部) 专业班级 学生姓名 学号/序号 指导教师 完成时间

机械系 机电专60901 徐卯卯 200961924 / 36 牧青/助教 第18周

一 、功能描述

游戏者通过键盘的上下左右方向键控制蛇头的移动方向,回车键暂停/继续,通过PAGE UP 加速,PAGE DOWN 减速来控制蛇的移动速度。游戏的目的是使蛇吃到某个数字,一共有5个数字,会随机出现在不同位置。比如当蛇持刀数字3,则蛇增加3节。游戏过程中不得碰撞到墙壁或自己身体,否则游戏结束。等待下一次游戏开始。吃的过程中当蛇吃到一数字之后,背景会随机改变。 二、概要设计 1,功能模块

贪吃蛇 控制 环境设置 开始/暂停 调节控制 结束 图1:贪吃蛇游戏功能模快 第 1 页 (页码从正文开始,居中)

2.界面设计

(1)参照程序运行界面,蛇的身体可由shape控件数组构成,25X25的棋盘也设计成由line控件数组构成。程序设计界面如图2.

图2,贪吃蛇游戏界面设计

三、详细设计 一

(1)棋局的格局,趟厕所的初始位子,以及5个数字的随机位置,都需要在游戏窗体加载时完成。其中蛇的身体由shape控件数组实现,使用load语句来改变数组长度从而实现对蛇的身体长度的增加。

(2)游戏开始后,使用Timerl控件对象来实现蛇的自动爬行,使用Timer2控件对象则表示游戏连续运行时间。

第 2 页 (页码从正文开始,居中)

1.修改ShowNumber自定义过程,当某个数字被蛇吃后,重新出现时,背景颜色可以随之改变。

Numfood(m).BackColor = QBColor(Int(Rnd * 14 + 1)) /吃掉的数字再出现则颜色随机改变。

form1.BackColor = RGB(Int(255 * Rnd + 1), Int(255 * Rnd + 1), Int(255 * Rnd + 1) /吃掉数字之后背景颜色随机改变。

2.用Form-KeyDown事件过程添加代码,使得游戏用户可以俺‘PGUP’ ‘PGDN“键

分别来加快和减慢贪吃蛇的行进速度 Case 33

Timer1.Interval = Timer1.Interval * 0.5 /速度每次减小0.5倍 Case 34

Timer1.Interval = Timer1.Interval * 1.5 /速度每次增加1.5倍

3.通过菜单编辑器 ,编辑一个‘级别’的菜单。使之通过选择级别来改变贪吃蛇的运行速度。

Private Sub ji_Click(Index As Integer) /定义ji Select Case Index Case 1

Timer1.Interval = 300 /速度一级 interval为300 Case 2

Timer1.Interval = 200 /速度二级 Case 3

Timer1.Interval = 100 /速度三级 Case 4

Timer1.Interval = 50 /速度四级 Case 5

Timer1.Interval = 20 /速度五级 End Sub

第 3 页 (页码从正文开始,居中)

四、效果分析以及设计方案的完善 1.游戏的开始界面

图1,游戏按回车键会开始游戏

第 4 页 (页码从正文开始,居中)

2.游戏运行界面

图2. 通过上下左右来控制蛇的运动方向

第 5 页 (页码从正文开始,居中)

3.游戏过程中之背景及数字颜色变换

图3,颜色变换

第 6 页 (页码从正文开始,居中)

4.游戏中级别的选择

图4. 可以通过级别的选择来改变速度

5.游戏结束

图6.可以通过按回车键继续游戏

第 7 页 (页码从正文开始,居中)

五、心得体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

通过了这一周的VB课程设计,我学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次自己做一个程序,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。通过这次课程设计之后,一定把以前所学过的知识重新温故。

程序设计师需要大量的时间去动手练习才能体验到它的内涵,同时还需要用心去投入,时间和感情花下去之后,的确慢慢的感受到有所收获了,而却也噶据我到了一点点的乐趣了。可能是一个良性循环的开始吧,相信以后会做的更好的。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,但是在老师和同学的帮助下终于解决。在此向老师还有给过我帮助的同学们表示忠心的感谢!

六、参考文献

【1】邵洁 《visual basic程序设计》 [东南大学出版社],第四版 【2】邵洁 《 visual basic实验与测试》 [东南大学出版社],第四版 【3】沈被娜 留祖照 《计算机软件技术基础》

【4】孙家广等,《计算机图形学》 清华大学出版社

【5】陈元琰编著.《计算机图形学实用技术》 北京科学出版社 【6】和青芳著.计算机图形学原理及算法教程.清华大学出版社

第 8 页 (页码从正文开始,居中)

附 录

程序源代码

Option Explicit Option Base 1

Dim snakebodynum As Integer Dim snakemoveDirect() As Integer Const handw As Integer = 300

Dim numx(5) As Integer, numy(5) As Integer Dim time_past As Integer Dim replay As Boolean Sub shownumberall() Dim i As Integer, j As Integer Dim k As Integer, m As Integer Dim f As Boolean Randomize For m = 1 To 5 Do

i = Int(Rnd * 24) j = Int(Rnd * 24) f = True

For k = 1 To snakebodynum

If i = Int(Snakebody(k).Left / handw) And j = Int(Snakebody(k).Top / handw) Then f = False Exit For End If Next

第 9 页 (页码从正文开始,居中)

For k = 1 To m - 1

If i * handw = Numfood(k).Left And j * handw = Numfood(k).Top Then f = False Exit For End If Next

If f = True Then Exit Do End If Loop numx(m) = i numy(m) = j

Numfood(m).Left = numx(m) * handw Numfood(m).Top = numy(m) * handw Next End Sub

Sub shownumber(m As Integer)

Dim i As Integer, j As Integer, k As Integer, f As Boolean Randomize Do

i = Int(Rnd * 24) j = Int(Rnd * 24) f = True

For k = 1 To snakebodynum

If i = Int(Snakebody(k).Left / handw) And j = Int(Snakebody(k).Top / handw) Then f = False Exit For End If

第 10 页 (页码从正文开始,居中)

Next For k = 1 To 5

If i * handw = Numfood(k).Left And j * handw = Numfood(k).Top Then f = False Exit For End If Next

If f = True Then Exit Do End If Loop numx(m) = i numy(m) = j

Numfood(m).Left = numx(m) * handw Numfood(m).Top = numy(m) * handw

Numfood(m).BackColor = QBColor(Int(Rnd * 14 + 1))

form1.BackColor = RGB(Int(255 * Rnd + 1), Int(255 * Rnd + 1), Int(255 * Rnd + 1)) End Sub

Private Sub Form_Load() Dim i As Integer Height = 7935 Width = 7600 time_past = 0 If replay Then For i = 25 To 2 Step -1 Unload LineX(i) Unload LineY(i) Next

第 11 页 (页码从正文开始,居中)

For i = snakebodynum To 2 Step -1 Unload Snakebody(i) Next

ReDim snakemoveDirect(1) End If

snakebodynum = 10 For i = 2 To 25 Load LineX(i)

LineX(i).Y1 = i * handw LineX(i).Y2 = i * handw LineX(i).Visible = True Load LineY(i)

LineY(i).X1 = i * handw LineY(i).X2 = i * handw LineY(i).Visible = True Next

Snakebody(1).Top = 0 Snakebody(1).Left = 0 For i = 2 To snakebodynum Load Snakebody(i)

Snakebody(i).FillColor = &H80FF80 Snakebody(i).Visible = True Next

For i = 1 To snakebodynum

Snakebody(i).Left = handw * snakebodynum - i * handw Next

ReDim snakemoveDirect(snakebodynum) Call shownumberall

第 12 页 (页码从正文开始,居中)

End Sub

Private Sub form_keydown(keycode As Integer, shift As Integer) Select Case keycode Case 37 'left

If snakemoveDirect(1) <> 0 Then snakemoveDirect(1) = 2 Case 38 'up

If snakemoveDirect(1) <> 1 Then snakemoveDirect(1) = 3 Case 39 'right

If snakemoveDirect(1) <> 2 Then snakemoveDirect(1) = 0 Case 40 'down

If snakemoveDirect(1) <> 3 Then snakemoveDirect(1) = 1 Case 13

Timer1.Enabled = Not Timer1.Enabled Case 33

Timer1.Interval = Timer1.Interval * 0.5 Case 34

Timer1.Interval = Timer1.Interval * 1.5 If Not Timer1.Enabled Then form1.Caption = \"贪吃蛇(暂停)\" Timer2.Enabled = False Else

form1.Caption = \"贪吃蛇(运行)\" Timer2.Enabled = True End If End Select End Sub

Private Sub ji_Click(Index As Integer)

第 13 页 (页码从正文开始,居中)

Select Case Index Case 1

Timer1.Interval = 300 Case 2

Timer1.Interval = 200 Case 3

Timer1.Interval = 100 Case 4

Timer1.Interval = 50 Case 5

Timer1.Interval = 20 End Sub End Sub

Private Sub timer1_timer()

Dim i As Integer, f As Boolean, m As Integer, d As Integer, r As Boolean For m = 1 To 5

If Int(Snakebody(1).Left / handw) = numx(m) And Int(Snakebody(1).Top / handw) = numy(m) Then

If Snakebody(snakebodynum).Left > Snakebody(snakebodynum - 1).Left Then d = 0

ElseIf Snakebody(snakebodynum).Left < Snakebody(snakebodynum - 1).Left Then d = 1

ElseIf Snakebody(snakebodynum).Top > Snakebody(snakebodynum - 1).Top Then d = 2 Else d = 3

第 14 页 (页码从正文开始,居中)

End If For i = 1 To m

snakebodynum = snakebodynum + 1 Load Snakebody(snakebodynum)

Snakebody(snakebodynum).FillColor = &H80FF80 Select Case d Case 0

Snakebody(snakebodynum).Left = Snakebody(snakebodynum - 1).Left + handw Snakebody(snakebodynum).Top = Snakebody(snakebodynum - 1).Top Case 1

Snakebody(snakebodynum).Left = Snakebody(snakebodynum - 1).Left - handw Snakebody(snakebodynum).Top = Snakebody(snakebodynum - 1).Top Case 2

Snakebody(snakebodynum).Left = Snakebody(snakebodynum - 1).Left Snakebody(snakebodynum).Top = Snakebody(snakebodynum - 1).Top + handw Case 3

Snakebody(snakebodynum).Left = Snakebody(snakebodynum - 1).Left Snakebody(snakebodynum).Top = Snakebody(snakebodynum - 1).Top - handw End Select

ReDim Preserve snakemoveDirect(snakebodynum)

snakemoveDirect(snakebodynum) = snakemoveDirect(snakebodynum - 1) Snakebody(snakebodynum).Visible = True Next f = True Exit For End If Next

If f Then Call shownumber(m)

第 15 页 (页码从正文开始,居中)

For i = 1 To snakebodynum Select Case snakemoveDirect(i) Case 0

Snakebody(i).Left = Snakebody(i).Left + handw Case 1

Snakebody(i).Top = Snakebody(i).Top + handw Case 2

Snakebody(i).Left = Snakebody(i).Left - handw Case 3

Snakebody(i).Top = Snakebody(i).Top - handw End Select Next

For i = snakebodynum To 2 Step -1

snakemoveDirect(i) = snakemoveDirect(i - 1) Next

If Snakebody(1).Left < 0 Or Snakebody(1).Top < 0 Or Snakebody(1).Left + handw > handw * 25 Or Snakebody(1).Top + 2 * handw > handw * 25 Then Timer1.Enabled = False Timer2.Enabled = False

MsgBox \"GAME OVER 笨蛋卯卯!加油!!!\贪吃蛇\" r = True End If

For i = 2 To snakebodynum

If Snakebody(1).Left = Snakebody(i).Left And Snakebody(1).Top = Snakebody(i).Top Then Timer1.Enabled = False Timer2.Enabled = False

MsgBox \"GAME OVER 笨蛋卯卯!加油!!\贪吃蛇\" r = True

第 16 页 (页码从正文开始,居中)

End If Next

If r Then Caption = \"贪吃蛇(暂停)\": replay = True: Call Form_Load

第 17 页End Sub

(完)

(页码从正文开始,居中)

因篇幅问题不能全部显示,请点此查看更多更全内容