版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——VB课程设计报告
VISUALBASIC
课程设计报告
题目:打字练习
姓名:***
学号:
班级:
1题目介绍
在计算机及其它数码产品日益普及的今天,人们使用键盘应像使用笔写字一样熟练。进行打字练习是熟悉键盘并提高打字速度的豪放法。此题目要求编制一个打字练习游戏,是用户在游戏过程中练习指法。
2设计过程中用到的知识点
(1)控件数组(2)键盘事件处理(3)文本文件的读写(4)
多模块程序设计(5)随机值的生成
3课题要求和承受的任务
(1)游戏开始时出现“打字设置〞窗口,在“您的姓名〞文本框
中输入用户名。若未输入名字,就点击“开始练习〞与“查看成绩〞按钮,则提醒用户输入姓名。若未输入时间,就点击“开始练习〞与“查看成绩〞按钮,则提醒用户输入时间。在“打字设置〞窗口可以设置打字速度和难度,速度决定字母下落的快慢,共分高,中,低速三档。难度等级也分为三档:小写字母,大写字母,所有混合(字母,数字和符号)(2)选择速度和难度之后,单击“开始练习〞按钮后,主页面以
全屏方式显示。根据难度的设置,屏幕上随即产生并落下各种字符。若用户在字符落到屏幕底部之前敲击了相应的键盘键,则该字符被“击中〞后消失,击中时在字符位置上显示一个爆炸的效果。程序根据速度和难度的不同自动进行计分,分数实时地显示在主界面的顶部。计分标准为:1,2,3,4,5,6,7,
慢速+小写字母:打中一个1分慢速+大写字母:打中一个2分慢速+混合字符:打中一个3分中速+小写字母:打中一个4分中速+大写字母:打中一个5分中速+混合字符:打中一个6分高速+小写字母:打中一个7分
8,9,
高速+大写字母:打中一个8分高速+混合字符:打中一个9分
(3)打字前可以选择打字的时间,时间一到弹出消息框显示用户本次练习得分,并提醒是否继续练习,假使选“否〞,返回“打字设置〞窗口。用户的成绩被保存在“SCORE.TXT〞文件中,供以后查询。
(4)当下落字符中有一致字符时,一次只能打掉一个(5)在打字过程中,可以按ESC键中止游戏,返回打字设置窗
口。但游戏的成绩并不保存。
(6)打字过程中假使按F1功能键,弹出键盘布局窗口供用户参
考,显示该窗口时主窗口的字符暂停下落,关闭此窗口游戏继续进行。
(7)在“打字设置〞窗口中,点击“查看成绩〞按钮,显示当
前用户的历次练习的成绩和时间。
(8)要求程序运行时将各个字符均匀地分布占满屏幕宽度。
4程序关键代码frmSet界面代码
OptionExplicit'强制变量声明
PrivateSubForm_Load()Label2.Caption=Now()EndSub
PrivateSubcmdPlay_Click()IftxtName.Text=\
MsgBox\您还没有输入姓名。\打字设置\txtName.SetFocus
ExitSubEndIf
IfText1.Text=\
MsgBox\您还没有输入时间。\打字设置\Text1.SetFocusExitSubEndIf
games.Show
games.deadtime=Val(Text1.Text)*60Me.HideEndSub
PrivateSubcmdScore_Click()Dimpd1AsPersonDataDimpd2AsPersonDataDimstrAsString
DimstrFindAsB=txtName.Text
IfDir(App.Path&\测试一个指定的路径下是否有指定的文件或文件夹
MsgBox\文件不存在!\成绩查看\ExitSubElse
OpenApp.Path&\IftxtName.Text=\读取成绩DoWhileNotEOF(1)Input#1,,pd2.score,pd2.time'读入值赋给相应的变量strFind=TrueGrade.Text1.Text=Grade.Text1.Text&&Space(2)&pd2.score&\分\LoopElse
DoWhileNotEOF(1)Input#1,,pd2.score,pd2.timeI=ThenstrFind=TrueGrade.Text1.Text=Grade.Text1.Text&&Space(2)&pd2.score&\分\EndIfLoopEndIfClose#1
IfstrFind=TrueThenGrade.ShowMe.HideElse
MsgBox\没有您的成绩记录!\成绩查看\EndIfEndIfEndSub
PrivateSubcmdExit_Click()UnloadMeEndSub
PrivateSubForm_Unload(CancelAsInteger)UnloadgamesEndSub
PrivateSubFrame2_DragDrop(SourceAsControl,XAsSingle,YAsSingle)
EndSub
PrivateSubLabel2_Click()
EndSub
Games界面代码
OptionExplicitDimsecondAsIntegerPublicdeadtimeAsInteger
PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=vbKeyF1ThenTimer1.Enabled=FalsefrmKB.Show1
Timer1.Enabled=TrueEndIfEndSub
PrivateSubForm_Load()DimiAsIntegerFori=1To9
LoadlblLetter(i)Next
Fori=0To9
lblLetter(i).Left=Screen.Width/11*(i+1)lblLetter(i).Top=0
lblLetter(i).Visible=TrueNext
StartEndSub
PrivateSubForm_KeyPress(KeyAsciiAsInteger)DimiAsInteger
Fori=0TolblLetter.Count-1
IfChr(KeyAscii)=lblLetter.Item(i).CaptionThen'有匹配字符
ScoreCount
imgExplode.Left=lblLetter.Item(i).LeftimgExplode.Top=lblLetter.Item(i).TopimgExplode.Visible=TrueTimer2.Enabled=TruelblLetter.Item(i).Top=0Letter(i)
Label2.Caption=frmSet.txtName.Text&\,你现在的得分是:\\分\
ExitSubEndIfNext
IfKeyAscii=27Then
IfMsgBox(\真的要终止练习吗?\打字练习\
UnloadMe
frmSet.Visible=TrueEndIfEndIf
TotalScore=TotalScore-1
Label2.Caption=frmSet.txtName.Text&\,你现在的得分是:\分\EndSub
PrivateSubImage1_Click()
EndSub
PrivateSubTimer1_Timer()DimiAsInteger
Fori=0TolblLetter.Count-1RandomizeSpeed(i)Next
Label2.Caption=frmSet.txtName.Text&\,你现在的得分是:\分\EndSub
PrivateSubTimer2_Timer()DimiAsInteger
Fori=0TolblLetter.Count-1
IflblLetter.Item(i).TopMe.HeightThenLetter(i)EndIfNext
imgExplode.Visible=FalseTimer2.Enabled=FalseEndSub
PrivateSubTimer3_Timer()DimpersonAsPersonData
second=second+1
lblTime=second\\60&\
Ifsecond>=deadtimeThen
=frmSet.txtName.Textperson.score=TotalScore
person.time=frmSet.Label2.Caption
OpenApp.Path&\Write#1,,person.score,person.timeClose1
IfMsgBox(frmSet.txtName.Text&\本次练习您的得分是\分。\Chr(13)&Chr(10)&\游戏终止,继续吗?\打字练习\TotalScore=0second=0
Label2.Caption=frmSet.txtName.Text&\,你现在的得分是:\\分\
Start
Else
UnloadMe
frmSet.Visible=TrueEndIf
EndIfEndSub
Grade界面代码
PrivateSubCommand1_Click()frmSet.ShowUnloadMeEndSub
模块代码
TypePersonDatanameAsStringscoreAsStringtimeAsStringEndType
PublicTotalScoreAsInteger'游戏总得分
PublicSubScoreCount()'计算总分数
IffrmSet.LSpeed.ValueAndfrmSet.Lowercase.ValueThenTotalScore=TotalScore+1
ElseIffrmSet.LSpeed.ValueAndfrmSet.Uppercase.ValueThenTotalScore=TotalScore+2
ElseIffrmSet.LSpeed.ValueAndfrmSet.Mixcase.ValueThenTotalScore=TotalScore+3
ElseIffrmSet.MSpeed.ValueAndfrmSet.Lowercase.ValueThenTotalScore=TotalScore+4
ElseIffrmSet.MSpeed.ValueAndfrmSet.Uppercase.ValueThenTotalScore=TotalScore+5
ElseIffrmSet.MSpeed.ValueAndfrmSet.Mixcase.ValueThenTotalScore=TotalScore+6
ElseIffrmSet.HSpeed.ValueAndfrmSet.Lowercase.ValueThenTotalScore=TotalScore+7
ElseIffrmSet.HSpeed.ValueAndfrmSet.Uppercase.ValueThenTotalScore=TotalScore+8
ElseIffrmSet.HSpeed.ValueAndfrmSet.Mixcase.ValueThenTotalScore=TotalScore+9
EndIfEndSub
PublicSubLetter(nAsInteger)'根据选择产生英文字母IffrmSet.Lowercase.ValueThen
j=Int(Rnd*26+97)'产生小写字母ElseIffrmSet.Uppercase.ValueThen
IfnMod2=0Then'产生大小写混合字母j=Int(Rnd*26+65)Else
j=Int(Rnd*26+97)EndIf
ElseIffrmSet.Mixcase.ValueThen
j=Int(Rnd*79+48)'产生混合字母EndIf
games.lblLetter.Item(n).Caption=Chr(j)
games.lblLetter.Item(n).ForeColor=RGB(Rnd*254,Rnd*254,Rnd*254)EndSub
PublicSubSpeed(nAsInteger)'根据选择产生不同的速度IffrmSet.LSpeed.ValueThen
games.lblLetter.Item(n).Top=games.lblLetter.Item(n).Top+50ElseIffrmSet.MSpeed.ValueThen
games.lblLetter.Item(n).Top=games.lblLetter.Item(n).Top+90ElseIffrmSet.HSpeed.ValueThen
games.lblLetter.Item(n).Top=games.lblLetter.Item(n).Top+130EndIf
Ifgames.lblLetter.Item(n).Top>games.HeightThengames.lblLetter.Item(n).Top=0TotalScore=TotalScore-10Letter(n)EndIfEndSub
PublicSubStart()
Withgames'调用会反复出现的对象名
.Label2.Caption=\您现在的得分是:\分\
.imgExplode.Visible=False
DimiAsInteger
Fori=0To.lblLetter.Count-1.lblLetter.Item(i).Top=1000
Next
Fori=0To.lblLetter.Count-1
Randomize'为随机数生成器生成一个随机数省略EXPN1则用系统时钟返回值作为“种子〞值
Letter(i)NextEndWithEndSub
5课程设计中的一些问题以及解决的方法
(1)在编frmSet中的程序时,为了让没输入名字和时间都要提醒
玩家输入,我为两个都编写了语句,但却发现,当两者都没输入的时候,它是先后跳出两个对话框来提醒,这显然是没有必要的。所以,一直在那想该怎么达到好的效果,后来才想到应当在对名字文本框确认后如不符合就应强制退出,这样就不会重复。
(2)最令我头疼的还是那个更上一层楼的要求。怎么样才能使在游
戏过程中碰见一致并符合的字符时,最先击打最靠近底部的字符呢?我已开始的时候就是把从左往右十列建立一个变量数组,用fornext语句来依次实行,这样就程序在每一回查找一致字符时都是呆板地从左往右扫描一遍,一旦找到适合字符就引发击中事件,并返回最左端重新开始扫描。
但是怎么样才能达到更上一层楼的效果呢?我想了好多方法,并查找了相关的资料,并觉得这种方法可行,那就是先把所有的一致的符合的字符先全都找出来,并继续在这些满足条件的字符中再挑拣出top值最大的一个字符,即是最靠近屏幕底端的字符,再击中就可以了。
(3)还一个问题就是设计在同意屏幕中弄出不同的速度,这一点
我就没有做到,深表惋惜。
6对游戏改进的建议以及一些控件的其它设置方法
(1)觉得游戏的查成绩部分有值得完善的地方,成绩被保存在指定的文件中,但是假使玩的次数多了会有一大堆成绩保存在里面显得很乱而且不便
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南郑外集团郑开学校附中教师招聘1人备考题库【模拟题】附答案详解
- 2026上半年四川成都市大邑县医疗卫生事业单位考核招聘高层次人才23人备考题库【黄金题型】附答案详解
- 2026江苏南京大学SZXZ2026-009生物医学工程学院科研人员招聘备考题库(满分必刷)附答案详解
- 2026云南银卫达保安服务有限公司招聘法律顾问兼董事会秘书1人备考题库含完整答案详解【考点梳理】
- 2026中国药科大学继续教育学院工作人员招聘2人备考题库(原创题)附答案详解
- 2026中国能建中电工程中南院春季校园招聘8人备考题库含完整答案详解【易错题】
- 2026合肥印象滨湖旅游投资发展有限公司招聘4人备考题库含答案详解【新】
- 2026广东广州市海珠区消防安全委员会办公室招聘街道微型消防站队员26人备考题库附参考答案详解(模拟题)
- 2026浙江药科职业大学特殊专业技术岗位招聘100人备考题库附完整答案详解【易错题】
- 2026长鑫存储科技集团股份有限公司招聘16人备考题库新版附答案详解
- 软硬件测试方案
- 语文教育与学生心理健康
- 中央空调施工安全培训
- 英语四级词汇加例句
- 四级翻译句子及答案
- 中学语文拟写人物短评课件
- 四川大学成人教育 《工程估价》 期末考试复习题及参考答案
- GB/T 41498-2022纤维增强塑料复合材料用剪切框测定面内剪切应力/剪切应变响应和剪切模量的试验方法
- 博弈策略的生活解读 课件
- 灌注桩低应变法参数表
- 浦发银行个人信用报告异议申请表
评论
0/150
提交评论