南京工程学院课程设计说明书(论文)题目打字练习课程名称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 IntegerDim n As IntegerPrivate Function suiji() '随机产生字母和随机选取单词函数Dim a As IntegerDim ci As StringDim b As StringRandomizeword = Array("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 Thensuiji = Chr(a) '如果选择简单单选框,则函数的返回值为小写字母Elsesuiji = word(b) '如果选择复杂单选框,则函数的返回值为单词End FunctionPublic Sub Command1_Click() '开始按钮Dim i%If Option2.Value Theni = MsgBox("输入单词后,请按空格键确认", , "注意") '操作提示End IfFor i = 0 To Label1.Count - 1Label1(i).Visible = TrueLabel1(i).Caption = suijiLabel1(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '随机产生字母,单词,颜色随机NextTimer1.Enabled = TrueTimer2.Enabled = TrueOption1.Enabled = FalseOption2.Enabled = FalseCommand1.Enabled = False '将计时器,速度调节,难度选择和开始按钮禁用Text1.SetFocus '将焦点转移到文本框End SubPrivate Sub Command2_Click() '暂停按钮Timer1.Enabled = FalseTimer2.Enabled = FalseCommand1.Enabled = TrueEnd SubPrivate Sub Command3_Click() '退出按钮If MsgBox("确定要退出?", vbYesNo) = vbYes ThenMsgBox "得分" & h & "分", , "成绩" '退出提示Unload Me '关闭窗体End IfEnd SubPrivate Sub Form_KeyPress(KeyAscii As Integer)Dim b As IntegerDim c As IntegerIf KeyAscii >= 97 And KeyAscii <= 122 Thenci = ci + Chr(KeyAscii) '将输入的单词赋值给空字符串ciEnd Ifb = -1If Option1.Value Then '选择简单For i = 0 To Label1.Count - 1 '遍历所有产生字母If Label1(i).Caption = Chr(KeyAscii) Then '判断产生的字母和输入的字母是否相等If Label1(i).Top > b Then '判断字母是否已经落出c = iEnd IfEnd IfNextElseIf KeyAscii = 32 Then '如果敲了空格,则进行单词比较操作For i = 0 To Label1.Count - 1 '遍历所有产生字母If Label1(i).Caption = ci Then '判断产生的单词和输入的单词是否相等If Label1(i).Top > b Then '判断字母是否已经落出c = iEnd IfEnd IfNextci = ""End IfEnd IfIf c > -1 ThenLabel1(c).Top = -10 '如果输入正确,则将字母标签隐藏到顶部Label1(c).Caption = suiji '字母标签随机产生字母h = h + 1 '如果输入正确,则得分加1Label5.Caption = "当前得分:" & h '显示当前得分Else: n = n + 1Label3.Caption = "掉落个数:" & n '显示掉落个数End IfEnd SubPrivate Sub Timer1_Timer()Timer1.Interval = 1000For i = 0 To Label1.Count - 1Label1(i).Top = Label1(i).Top + 500 '控制字母,单词移动,以及移动速度If Label1(i).Top > Form1.Height Thenn = n + 1 '记录掉落个数Label3.Caption = "掉落个数:" & nLabel1(i).Top = -10RandomizeLabel1(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '产生颜色If n = 26 ThenIf MsgBox("已经错过" & n & "个,重新开始?", vbYesNo) = vbYes Then '提示框Form_Loadmand1_ClickElseForm_Load '控制重新游戏还是结束游戏End IfEnd IfNextEnd SubPrivate Sub Timer2_Timer()Timer2.Interval = 1000If (n + h) <> 0 ThenLabel6.Caption = "正确率:" & h / (n + h) * 100 \ 1 & "%" '显示正确率End IfStatic ss = s + 1Dim miao As StringDim fen As StringDim shi As StringIf s Mod 60 < 10 Thenmiao = 0Elsemiao = ""End IfIf (s Mod 3600) \ 60 < 10 Thenfen = 0Elsefen = ""End IfIf s \ 3600 < 10 Thenshi = 0Elseshi = ""End IfLabel4.Caption = "时间" & shi & s \ 3600 & ":" & fen & (s Mod 3600) \ 60 & ":" & miao & s Mod 60 '显示已用时间End SubPrivate Sub Form_Load()Text1.Top = -1000Label6.Caption = "正确率:0"Label4.Caption = "时间00:00:00"Label3.BackStyle = 0Label4.BackStyle = 0Label5.BackStyle = 0Label6.BackStyle = 0 '将标签2到6的背景设为透明For i = 0 To Label1.Count - 1Label1(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 '透明NextLabel3.Caption = "掉落个数:" & nLabel5.Caption = "当前得分:" & hLabel5.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课程设计(清华出版社)第11页。