




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VISUAL BASIC课程设计报告题目:打字练习姓名 : *学号:班级:1 题目介绍在计算机及其它数码产品日益普及的今天,人们使用键盘应像使用笔写字一样熟练。进行打字练习是熟悉键盘并提高打字速度的豪放法。本题目要求编制一个打字练习游戏,是用户在游戏过程中练习指法。2 设计过程中用到的知识点( 1) 控 件数组( 2)键盘事件处理( 3)文本文件的读写( 4)多模块程序设计( 5) 随机值的生成3 课题要求和承担的任务( 1) 游 戏开始时出现“打字设置”窗口,在“您的姓名”文本框中输入用户名。若未输入名字,就点击“开始练习”与“查看成绩”按钮,则提示用户输入姓名。若未输入时间,就点击“开始练
2、习” 与“查看成绩” 按钮, 则提示用户输入时间。在“打字设置” 窗口可以设置打字速度和难度, 速度决定字母下落的快慢,共分高,中,低速三档。难度等级也分为三档:小写字母,大写字母,所有混合(字母,数字和符号)( 2) 选择速度和难度之后,单击“开始练习”按钮后,主页面以全屏方式显示。 根据难度的设置, 屏幕上随即产生并落下各种字符。 若用户在字符落到屏幕底部之前敲击了相应的键盘键,则该字符被“击中”后消失,击中时在字符位置上显示一个爆炸的效果。程序根据速度和难度的不同自动进行计分,分数实时地显示在主界面的顶部。计分标准为:1,慢速+小写字母:打中一个1分2,慢速+大写字母:打中一个2分3,慢
3、速+混合字符:打中一个3分4,中速+小写字母:打中一个4分5,中速+大写字母:打中一个5分6,中速+混合字符:打中一个6分7,高速+小写字母:打中一个7分8,高速+大写字母:打中一个8 分9,高速+混合字符:打中一个9 分( 3) 打字前可以选择打字的时间,时间一到弹出消息框显示用户本次练习得分,并提示是否继续练习,如果选“否” ,返回“打字设置”窗口。用户的成绩被保存在“SCORE.TXT ”文件中,供以后查询。( 4) 当下落字符中有相同字符时,一次只能打掉一个(5)在打字过程中,可以按ESC键中止游戏,返回打字设置窗口。但游戏的成绩并不保存。( 6) 打字过程中如果按F1 功能键,弹出键
4、盘布局窗口供用户参考,显示该窗口时主窗口的字符暂停下落,关闭此窗口游戏继续进行。( 7) 在“打字设置”窗口中,点击“查看成绩”按钮,显示当前用户的历次练习的成绩和时间。( 8) 要求程序运行时将各个字符均匀地分布占满屏幕宽度。4 程序关键代码frmSet 界面代码Option Explicit 强制变量声明Private Sub Form_Load()Label2.Caption = Now()End SubPrivate Sub cmdPlay_Click()If txtName.Text = ThenMsgBox 您还没有输入姓名。 , 32, 打字设置 txtName.SetFocus
5、4 / 12Exit SubEnd IfIf Text1.Text = ThenMsgBox 您还没有输入时间。 , 32, 打字设置 Text1.SetFocusExit SubEnd Ifgames.Showgames.deadtime = Val(Text1.Text) * 60 Me.HideEnd SubPrivate Sub cmdScore_Click()Dim pd1 As PersonDataDim pd2 As PersonDataDim str As StringDim strFind As B = txtName.TextIf Dir(App
6、.Path & Score.txt) = Then 测试一个指定的路径下是否有指定的文件或文 件夹MsgBox 文件不存在! , 48, 成绩查看 Exit SubElseOpen App.Path & Score.txt For Input As #1If txtName.Text = Then 读取成绩Do While Not EOF(1)Input #1, , pd2.score, pd2.time 读入值赋给相应的变量 strFind = TrueGrade.Text1.Text = Grade.Text1.Text & & Space(2) & pd
7、2.score & 分 & Space(2) & pd2.time & Chr(13) & Chr(10)LoopElseDo While Not EOF(1)Input #1, , pd2.score, pd2.timeIf = Then strFind = TrueGrade.Text1.Text = Grade.Text1.Text & & Space(2) &pd2.score & 分 & Space(2) & pd2.time & Chr(13) & Chr(10) End IfLoopEnd IfIf strFi
8、nd = True ThenGrade.ShowMe.HideElseMsgBox 没有您的成绩记录! , 48, 成绩查看 End IfEnd IfEnd SubPrivate Sub cmdExit_Click()Unload MeEnd SubPrivate Sub Form_Unload(Cancel As Integer)Unload gamesEnd SubPrivate Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single)End SubPrivate Sub Label2_Click()End SubGa
9、mes 界面代码Option ExplicitDim second As IntegerPublic deadtime As IntegerPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyF1 ThenTimer1.Enabled = FalsefrmKB.Show 1Timer1.Enabled = TrueEnd IfEnd SubPrivate Sub Form_Load()Dim i As IntegerFor i = 1 To 9Load lblLetter(i)NextF
10、or i = 0 To 9lblLetter(i).Left = Screen.Width / 11 * (i + 1)lblLetter(i).Top = 0lblLetter(i).Visible = TrueNextStartEnd SubPrivate Sub Form_KeyPress(KeyAscii As Integer)Dim i As IntegerFor i = 0 To lblLetter.Count - 1If Chr(KeyAscii) = lblLetter.Item(i).Caption Then有匹配字符ScoreCountimgExplode.Left = l
11、blLetter.Item(i).LeftimgExplode.Top = lblLetter.Item(i).TopimgExplode.Visible = TrueTimer2.Enabled = TruelblLetter.Item(i).Top = 0Letter (i)Label2.Caption = frmSet.txtName.Text & , 你现在的得分是: & TotalScore &分Exit SubEnd IfNextIf KeyAscii = 27 ThenIf MsgBox( 真的要结束练习吗?, vbYesNo + vbQuestion, 打字练习 ) = vbY
12、es ThenUnload MefrmSet.Visible = TrueEnd IfEnd IfTotalScore = TotalScore - 1Label2.Caption = frmSet.txtName.Text & , 你现在的得分是: & TotalScore & 分End SubPrivate Sub Image1_Click()End SubPrivate Sub Timer1_Timer()Dim i As IntegerFor i = 0 To lblLetter.Count - 1RandomizeSpeed (i)NextLabel2.Caption = frmSe
13、t.txtName.Text & , 你现在的得分是: & TotalScore & 分End SubPrivate Sub Timer2_Timer()Dim i As IntegerFor i = 0 To lblLetter.Count - 1If lblLetter.Item(i).Top Me.Height Then Letter (i)End If Next imgExplode.Visible = False Timer2.Enabled = False End SubPrivate Sub Timer3_Timer()Dim person As PersonDatasecond
14、 = second + 1 lblTime = second 60 & : & second Mod 60If second = deadtime T = frmSet.txtName.Textperson.score = TotalScoreperson.time = frmSet.Label2.CaptionOpen App.Path & Score.txt For Append As #1Write #1, , person.score, person.timeClose 1If MsgBox(frmSet.txtName.Text &
15、, 本次练习您的得分是 & TotalScore & 分。 &Chr(13) & Chr(10) & 游戏结束, 继续吗? , vbYesNo + vbQuestion, 打字练习 ) = vbYes Then TotalScore = 0 second = 0 Label2.Caption = frmSet.txtName.Text & , 你现在的得分是: & TotalScore & 分StartElseUnload MefrmSet.Visible = TrueEnd IfEnd IfEnd SubGrade 界面代码Private Sub Command1_Click()frmSet
16、.ShowUnload MeEnd Sub模块代码Type PersonDataname As Stringscore As Stringtime As StringEnd TypePublic TotalScore As Integer游戏总得分Public Sub ScoreCount()计算总分数If frmSet.LSpeed.Value And frmSet.Lowercase.Value ThenTotalScore = TotalScore + 1ElseIf frmSet.LSpeed.Value And frmSet.Uppercase.Value ThenTotalScor
17、e = TotalScore + 2ElseIf frmSet.LSpeed.Value And frmSet.Mixcase.Value ThenTotalScore = TotalScore + 3ElseIf frmSet.MSpeed.Value And frmSet.Lowercase.Value ThenTotalScore = TotalScore + 4ElseIf frmSet.MSpeed.Value And frmSet.Uppercase.Value ThenTotalScore = TotalScore + 5ElseIf frmSet.MSpeed.Value An
18、d frmSet.Mixcase.V alue ThenTotalScore = TotalScore + 6ElseIf frmSet.HSpeed.V alue And frmSet.Lowercase.Value ThenTotalScore = TotalScore + 7ElseIf frmSet.HSpeed.V alue And frmSet.Uppercase.Value ThenTotalScore = TotalScore + 8ElseIf frmSet.HSpeed.V alue And frmSet.Mixcase.Value ThenTotalScore = Tot
19、alScore + 9End IfEnd SubPublic Sub Letter(n As Integer)根据选择产生英文字母If frmSet.Lowercase.Value Thenj = Int(Rnd * 26 + 97)产生小写字母ElseIf frmSet.Uppercase.Value ThenIf n Mod 2 = 0 Then 产生大小写混合字母j = Int(Rnd * 26 + 65)Elsej = Int(Rnd * 26 + 97)End IfElseIf frmSet.Mixcase.Value Thenj = Int(Rnd * 79 + 48)产生混合字母
20、End Ifgames.lblLetter.Item(n).Caption = Chr(j)games.lblLetter.Item(n).ForeColor = RGB(Rnd * 254, Rnd * 254, Rnd * 254) End SubPublic Sub Speed(n As Integer) 根据选择产生不同的速度If frmSet.LSpeed.Value Thengames.lblLetter.Item(n).Top = games.lblLetter.Item(n).Top + 50ElseIf frmSet.MSpeed.Value Thengames.lblLet
21、ter.Item(n).Top = games.lblLetter.Item(n).Top + 90ElseIf frmSet.HSpeed.V alue Thengames.lblLetter.Item(n).Top = games.lblLetter.Item(n).Top + 130End IfIf games.lblLetter.Item(n).Top games.Height Thengames.lblLetter.Item(n).Top = 0TotalScore = TotalScore - 10Letter (n)End IfEnd SubPublic Sub Start()W
22、ith games 调用会反复出现的对象名.Label2.Caption = frmSet.txtName.Text & , 您现在的得分是: & TotalScore & 分.imgExplode.Visible = FalseDim i As IntegerFor i = 0 To .lblLetter.Count - 1.lblLetter.Item(i).Top = 1000NextFor i = 0 To .lblLetter.Count - 1Randomize 为随机数生成器生成一个随机数省略EXPN1 则用系统时钟返回值作为“种子”值Letter (i)NextEnd With
23、End Sub5 课程设计中的一些问题以及解决的方法( 1) 在编 frmSet 中的程序时,为了让没输入名字和时间都要提示玩家输入, 我为两个都编写了语句, 但却发现, 当两者都没输入的时候, 它是先后跳出两个对话框来提示, 这显然是没有必要的。 所以, 一直在那想该怎么达到好的效果, 后来才想到应该在对名字文本框确认后如不符合就应强制退出, 这样就不会重复。( 2) 最 令我头疼的还是那个更上一层楼的要求。 怎么样才能使在游戏过程中碰到相同并符合的字符时, 最先击打最靠近底部的字符呢?我已开始的时候就是把从左往右十列建立一个变量数组,用 for next 语句来依次实行,这样就程序在每一回
24、查找相同字符时都是呆板地从左往右扫描一遍, 一旦找到合适字符就引发击中事件,并返回最左端重新开始扫描。但是怎么样才能达到更上一层楼的效果呢?我想了很多方法,并查找了相关的资料, 并觉得这种方法可行, 那就是先把所有的相同的符合的字符先全都找出来, 并继续在这些满足条件的字符中再挑选出 top 值最大的一个字符, 即是最靠近屏幕底端的字符,再击中就可以了。( 3) 还 一个 问题就是设计在同意屏幕中弄出不同的速度,这一点我就没有做到,深表遗憾。6 对游戏改进的建议以及一些控件的其它设置方法( 1) 觉得游戏的查成绩部分有值得完善的地方, 成绩被保存在指定的文件中, 但是如果玩的次数多了会有一大堆成绩保存在里面显得很乱而且不便于成绩查询。 因此我建议在成绩查询界面加一个清除成绩的控件,点击控件已有的成绩被清除。( 2)我觉得控制下落速度除了可以加控件的 TOP 值之外,还可以在 TOP 值一定的情况下用 TIMER 的 INTERVAL 属性,不同的下落速度使用不同的属性值。如低速300 ,中速 200 ,高速 100 也可实现此功能。( 3)在记分时,难度不同得分不同,在此程序中我用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理质量标准及管理制度
- 幼儿园小学秋游安全教育
- 辛集中学高三语文一轮复习组合练
- 阿坝职业学院《影像电子学基础》2023-2024学年第一学期期末试卷
- 陇东学院《岩土工程测试与监控》2023-2024学年第二学期期末试卷
- 陕西中医药大学《外国文学I》2023-2024学年第一学期期末试卷
- 陕西国防工业职业技术学院《劳动实践》2023-2024学年第二学期期末试卷
- 陕西学前师范学院《新型材料毒理学评价》2023-2024学年第二学期期末试卷
- 陕西工商职业学院《数字媒体设计与制作》2023-2024学年第一学期期末试卷
- 陕西理工大学《传热学与换热器》2023-2024学年第二学期期末试卷
- 钢铁项目环评报告 - 17结论与建议
- 数列的概念(第一课时)教案高二数学(人教A版2019选择性必修第二册)
- 铲车司机雇佣合同范本
- 江苏省南京市鼓楼区2023-2024学年五年级下学期期末检测语文试卷
- 2024年山东省济南市莱芜区中考一模数学试题(含答案解析) (二)
- (高清版)JTG 3363-2019 公路桥涵地基与基础设计规范
- 旅游行业:2024中国出境游客白皮书
- 重症患者体位管理
- 全国计算机等级考试(二级)考试题库含完整答案【历年真题】
- 毕业论文基于STM32F103单片机的智能电表交流电压电流设计
- 飞轮储能简介演示
评论
0/150
提交评论