VB课程设计报告_第1页
VB课程设计报告_第2页
VB课程设计报告_第3页
VB课程设计报告_第4页
VB课程设计报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论