南京工程学院
课程设计说明书(论文)
题目 打字练习
课 程 名 称 VB语言课程设计
院 (系、部、中心)
专 业
班 级
学 生 姓 名
学 号
设 计 地 点 图书馆基础教学机房
指 导 教 师
设计起止时间:201x年x月x日至201x年x月x日
目 录
一、设计任务 3
二、方法原理 3
三、总体设计思路 3
四、程序调试和解决问题 4
五、完善及存在的问题 4
六、收获体会 4
七、意见建议 4
八、示例截图 5
九、附录1(代码) 6
十、附录2(主要参考资料) 10
一、设计任务
1.题目介绍
在计算机及其他数码产品日益普及的今天,人们使用键盘应像用笔写字一样熟练。进行打字练习时熟悉键盘并提高打字速度的好方法。本体要求编制一个打字练习游戏程序,使用户在游戏过程中进行打字练习。
2.功能要求
(1)启动界面如图1
(2)选择难度和速度后,单击“开始”按钮,界面如图1。若选择简单,则落下字母;若选择复杂,单击开始后出现对话框,如图2.单击确定,开始练习,落下单词。
(2)若用户在字符落到屏幕底部之前敲击了相应的键盘键,则该字符被“击中”然后消失。根据程序速度和难度的设置自动进行积分,实时分数 时间 正确率 掉落个数显示在窗体的上部。
积分规则:正确击中一个字母或一个单词,加一分;反之,不得分,亦不扣分。
(4)当游戏者单击“暂停”按钮时,程序停止运行,在单击“开始”按钮,程序继续运行;当单击“退出”按钮时,则弹出对话框(如截图示例3),单击“取消”按钮,程序继续运行,单击“确定”按钮,则弹出对话框(如截图4),此时对话框显示分数,单击“确定”按钮,退出程序。
(5)为了增加视觉效果,每个掉落的字符的颜色随机产生。
二、方法原理
根据题目要求,使用控件数组,用标签标题表示字符,键盘事件的处理判断打字正确与否,随机值的产生方法随机产生字符,用Timer控件属性反映时间、控制字符下落速度。
三、总体设计思路
首先在窗体上画出三个按钮标题分别为开始、暂停、退出。画六个标签分别表示已落字母个数、已花时间、得分与正确率。
画出一个含有五个元素的标签控制数组用以显示字符。
画出两个时间控件,一个用来返回已用时间,一个控制字符下落。
最后编写相关代码
四、程序调试和解决问题
五个标签所显示的字符始终不变。
调试:当打字正确或标签落到屏幕底部之后重新让标签标题取随机字符
五、完善及存在的问题
存在的问题:打错字后没有相应的减分措施。
正常打字应是练习打汉字,而不是打西文字母,应该进成打汉字练习。
完善:取一百个汉字,赋值给一个字符串类型的数组,用产生随机数的方法确定数组下标从而随机取汉字,标签的标题用随机产生的汉字字符表示。
六、收获体会
“纸上得来终觉浅,绝知此事要躬行”。通过这次课程设计我懂得了vb课程设计就是培养我们综合运用所学知识、提高我们发现问题、分析问题、解决问题的能力的。
通过这一周的课程设计我不仅巩固了所学vb知识,还接触到了很多新的知识点。我了解到很多时候理论远远比实践简单,很多时候我们只有把所学的理论知识与实践结合起来才能真正理解理论,才能得到真正的提高。
由于是第一次做这种相对复杂的程序设计,在课程设计中我遇到了很多困难发现了自己在vb这门课上的很多不足之处,很多知识只有模糊的记忆,不能灵活地运用,通过这次实践我体会到神么叫温故而知新。学习中我们要不断对前面所学进行回顾。
这次实践不仅增加了我的vb知识,还让我明白了遇到困难我们要保持沉着冷静的心态,只要我们有有一种坚定不移的执着以及永不言弃的精神坚持做下去很多困难就会迎刃而解。
做一个程序设计实在很不容易,其中要用到很多知识,需要翻阅大量书籍,尤其是在资料上根本找不到的设计,但是收获同样是很大的,在翻阅书籍的过程中,再请教别人的过程中,我得到的不仅仅是知识,还有很多经验,我学会了自学,学会了和别人交流合作。
七、意见建议
也许老师平时讲到一个代码或者函数的时候,随即讲解一个与之相关的程序,运行下,会更好。也可以在电脑房上课。或者下次上课的时候还可以让我们自己带上电脑,随时随地就可以练习。
八、示例截图
图1
图2
图3
图4
九、附录1(代码)
Dim h As Integer
Dim n As Integer
Private Function suiji() '随机产生字母和随机选取单词函数
Dim a As Integer
Dim ci As String
Dim b As String
Randomize
word = ("sway", "sneak", "naked", "maple", "ample", "lough", "plasma", "tude", "plague", "pledge", "play", "prowl", "pluckbandit", "gangster", "commemorate", "solar", "elipse", "luna", "lunatic", "tumble", "mortal", "moral", "fade", "flinch", "spout", "sprout", "spurn", "spoil", "sparrow", "sprain", "plasma", "mare", "malady", "glisten", "bereave", "glimme", "rslim", "crave", "amiable", "able", "blizzard", "lizard", "bruise", "bromide", "place", "bale") '存放供练习的单词
b = Int(Rnd * (UBound(word) + 1)) '产生单词序号
a = Int((122 - 97 + 1) * Rnd + 97) '产生97到122之间的整数
If Option1.Value Then
suiji = Chr(a) '如果选择简单单选框,则函数的返回值为小写字母
Else
suiji = word(b) '如果选择复杂单选框,则函数的返回值为单词
End If
End Function
Public Sub Command1_Click() '开始按钮
Dim i%
If Option2.Value Then
i = MsgBox("输入单词后,请按空格键确认", , "注意") '操作提示
End If
For i = 0 To Label1.Count - 1
Label1(i).Visible = True
Label1(i).Caption = suiji
Label1(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '随机产生字母,单词,颜色随机
Next
Timer1.Enabled = True
Timer2.Enabled = True
Option1.Enabled = False
Option2.Enabled = False
Command1.Enabled = False '将计时器,速度调节,难度选择和开始按钮禁用
Text1.SetFocus '将焦点转移到文本框
End Sub
Private Sub Command2_Click() '暂停按钮
Timer1.Enabled = False
Timer2.Enabled = False
Command1.Enabled = True
End Sub
Private Sub Command3_Click() '退出按钮
If MsgBox("确定要退出?", vbYesNo) = vbYes Then
MsgBox "得分" & h & "分", , "成绩" '退出提示
Unload Me '关闭窗体
End If
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
Dim b As Integer
Dim c As Integer
If KeyAscii >= 97 And KeyAscii <= 122 Then
ci = ci + Chr(KeyAscii) '将输入的单词赋值给空字符串ci
End If
b = -1
c = -1
If Option1.Value Then '选择简单
For i = 0 To Label1.Count - 1 '遍历所有产生字母
If Label1(i).Caption = Chr(KeyAscii) Then '判断产生的字母和输入的字母是否相等
If Label1(i).Top > b Then '判断字母是否已经落出
c = i
End If
End If
Next
Else
If KeyAscii = 32 Then '如果敲了空格,则进行单词比较操作
For i = 0 To Label1.Count - 1 '遍历所有产生字母
If Label1(i).Caption = ci Then '判断产生的单词和输入的单词是否相等
If Label1(i).Top > b Then '判断字母是否已经落出
c = i
End If
End If
Next
ci = ""
End If
End If
If c > -1 Then
Label1(c).Top = -10 '如果输入正确,则将字母标签隐藏到顶部
Label1(c).Caption = suiji '字母标签随机产生字母
h = h + 1 '如果输入正确,则得分加1
Label5.Caption = "当前得分:" & h '显示当前得分
Else: n = n + 1
Label3.Caption = "掉落个数:" & n '显示掉落个数
End If
End Sub
Private Sub Timer1_Timer()
Timer1.Interval = 1000
For i = 0 To Label1.Count - 1
Label1(i).Top = Label1(i).Top + 500 '控制字母,单词移动,以及移动速度
If Label1(i).Top > Form1.Height Then
n = n + 1 '记录掉落个数
Label3.Caption = "掉落个数:" & n
Label1(i).Top = -10
Randomize
Label1(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '产生颜色
End If
If n = 26 Then
If MsgBox("已经错过" & n & "个,重新开始?", vbYesNo) = vbYes Then '提示框
Form_Load
Form1.Command1_Click
Else
Form_Load '控制重新游戏还是结束游戏
End If
End If
Next
End Sub
Private Sub Timer2_Timer()
Timer2.Interval = 1000
If (n + h) <> 0 Then
Label6.Caption = "正确率:" & h / (n + h) * 100 \ 1 & "%" '显示正确率
End If
Static s
s = s + 1
Dim miao As String
Dim fen As String
Dim shi As String
If s Mod 60 < 10 Then
miao = 0
Else
miao = ""
End If
If (s Mod 3600) \ 60 < 10 Then
fen = 0
Else
fen = ""
End If
If s \ 3600 < 10 Then
shi = 0
Else
shi = ""
End If
Label4.Caption = "时间 " & shi & s \ 3600 & ":" & fen & (s Mod 3600) \ 60 & ":" & miao & s Mod 60 '显示已用时间
End Sub
Private Sub Form_Load()
Text1.Top = -1000
Label6.Caption = "正确率:0"
Label4.Caption = "时间 00:00:00"
Label3.BackStyle = 0
Label4.BackStyle = 0
Label5.BackStyle = 0
Label6.BackStyle = 0 '将标签2到6的背景设为透明
For i = 0 To Label1.Count - 1
Label1(i).Visible = False '将标签Label1(1)到Label1(5)的初始状态设为不可见
Label1(i).Top = 600 * (i + 1) '设置字母或单词的的位置
Label1(i).Caption = suiji '最初出现的字母或者单词
Label1(i).FontSize = 25 '设置字体大小
Label1(i).AutoSize = True '标签大小自动可调
Label1(i).BackStyle = 0 '透明
Next
Label3.Caption = "掉落个数:" & n
Label5.Caption = "当前得分:" & h
Label5.ForeColor = RGB(0, 255, 0)
Label3.ForeColor = RGB(0, 255, 0)
Label6.ForeColor = RGB(255, 0, 0)
Label4.ForeColor = RGB(255, 0, 255) '设置字体颜色
End Sub
十、附录2(主要参考资料)
1.VB课程设计简明教程(第三版)(高等教育出版社)
2.VB课程设计(清华出版社)
本文来源:https://www.2haoxitong.net/k/doc/1679174ae518964bcf847ca7.html
文档为doc格式