第四天、打字练习程序
小叮当:我说小蘑菇呀,前几分钟之前还看你在编程序,怎么现在又开始玩游戏了?
小蘑菇:都是昨天定时程序的作用呀,我现在是编程10分钟,游戏50分钟,这样劳逸结合,安排的不错吧。
小叮当:有你这么安排的吗?整个就是在浪费时间!别玩游戏了,今天教你一些什么呢?
小蘑菇:最好是寓教于乐的程序最好,比如一边玩游戏一边学习的。
小叮当:给我出难题?那就教你一个寓教于乐的程序,来制作一个打字练习程序怎么样?
小蘑菇:真的?也好,我先看看再说。
小叮当:OK,还是老规矩,先创建一些控件再说。
1、新建一个工程,将Form1的Caption属性修改为“打字练习”,同时将MaxButton和MinButton两个属性都设置为“False”,这样在程序运行之后可以取消右上角的最小化和最大化按钮。
2、添加一个Frame控件,将它的Caption属性设置为空,并且将BorderStyle属性设置为“0-None”,然后在这个Frame中添加1个Label控件。
3、在Form1窗口中添加4个Label控件,其中两个Label控件的Caption属性分别设置为“得分”和“剩余”,另外两个Label控件的BackStyle和BorderStyle属性均设置为“1-Opaque”和“1-Fixed”,这样将使得它们以3D立体形式显示出来,最后分别将这两个Label控件的Caption属性设置为“0”和“200”。
4、在Frame区域中再添加一个Label控件。
5、在Form1窗口中添加一个Command Button控件,将它的Caption属性更改为“开始”。
6、添加三个Timer控件,并将它的interval属性分别设置为100、1000和100。
所有控件添加设置完成后应该如图所示。
小蘑菇:看起来好复杂的样子,代码编写部分是不是也很繁琐?
小叮当:说难不难,说简单也不简单。我们的目的是通过嵌套在Frame中的两个Label控件来随机显示字母,然后通过键盘输入字母,由程序检验输入的字母和显示的字母是否一样,如果一样则说明正确,可以加分,否则说明输入错误。其实最关键要把握住编程的思想,这个说起来就话长了,还是看看具体的源代码怎么写吧。
1、双击Form1窗口,并选择“通用”对象,输入下面的通用代码:
Option ExplICit
Dim score As Integer /定义变量
Dim speed As Integer /定义变量
2、编写init子程序(用于设置第一个出现的字母)
Sub init()
Label1.Caption = Chr(Int(Rnd * 26) + 49) /设定Label1随机显示的字母
speed = Int(Rnd * 100 + 100) /设定Label1随机显示字母的速度
Label1.Left = Int(Rnd * Frame1.Width) /设定Label1代表字母出现的左边位置
Label1.Top = Frame1.Top /设定Label1代表字母出现的顶部位置
End Sub
3、编写init1子程序(用于第二个出现的字母)
Sub init1()
Label6.Caption = Chr(Int(Rnd * 26) + 97) /设定Label2随机显示的字母
speed = Int(Rnd * 100 + 100) /设定Label2随机显示字母的速度
Label6.Left = Int(Rnd * Frame1.Width) /设定Label2代表字母出现的左边位置
Label6.Top = Frame1.Top /设定Label2代表字母出现的顶部位置
End Sub
4、双击“开始”按钮并输入下列代码:
Private Sub Command1_Click()
init /调用init子程序
Timer1.EnabLED = True /激活Time1控件
Timer2.Enabled = True /激活Time2控件
Command1.Visible = False
Label5.Caption = 200
Label4.Caption = 0
End Sub
5、双击Form1窗口,并选择“KeyPress”对象,输入下面的用代码:
Private Sub Form_KeyPress(KeyAscii As Integer)
If Chr(KeyAscii) = Label1.Caption Then /校验键盘输入字符和Label1显示的字符
init
score = score + 1 /得分加1
Label4.Caption = score
End If
If Chr(KeyAscii) = Label6.Caption Then /校验键盘输入字符和Label2显示的字符
init1
score = score + 1
Label4.Caption = score /Label4控件显示得分情况
End If
End Sub
6、双击Form1窗口,并选择“Load”对象,输入下面的用代码:
Private Sub Form_Load()
Randomize
Timer1.Enabled = False /Time1控件失效
Timer2.Enabled = False /Time2控件失效
End Sub
7、双击Timer1控件并输入下列代码:
Private Sub Timer1_Timer()
Label1.Top = Label1.Top + speed
If Label1.Top > Frame1.Height Then /第一个字母超出屏幕范围的时候调用init子程序重新出现一个字母
init
End If
Label6.Top = Label6.Top + speed
If Label6.Top > Frame1.Height Then /第二个字母超出屏幕范围的时候调用init1子程序重新出现一个字母
init1
End If
End Sub
8、双击Timer2控件并输入下列代码:
Private Sub Timer2_Timer()
Label5.Caption = Val(Label5.Caption) - 1 /扣除剩余个数中的一个
If Val(Label5.Caption) <= 0 Then
Timer1.Enabled = False /剩余个数小于等于0的时候结束练习
Label1.Caption = "" /不显示字母
Label6.Caption = ""
Select Case score
Case Is <= 80
MsgBox vbCrLf + "别放弃,再来一次!" /显示信息框
Case Is < 120
MsgBox vbCrLf + "成绩不错,加油!"
Case Is < 150
MsgBox vbCrLf + "再努力做的更好一些!"
Case Is > 180
MsgBox vbCrLf + "好厉害!最高分呀!"
End Select
Command1.Visible = True
Label4.Caption = 0
Label5.Caption = 200
Timer1.Enabled = False
Timer2.Enabled = False
End If
End Sub
上面就是全部的源代码了,你可以运行试试看。
小蘑菇:呵呵,想测试我的打字速度?那还不是小菜一碟?
小叮当:嘿嘿,别说大话,先运行一下再说。怎么样,得了多少分?还小菜一碟吗?
小蘑菇:速度太快了,要是慢一点的话,我肯定能够得高分!
小叮当:慢一点?慢一点怎么能体现出你的高超技术呢?其实速度可以通过init和init1程序来控制,只要将数值更改的小一些就可以轻轻松松的得到高分了。
小蘑菇:我想到了一个好办法,先把速度降低,然后自己得一个高分,截图保存之后拿给朋友看看,让他们也测试一下,但是给他们的程序就是速度非常快的,这样就可以大大的刺激他们一下了,哈哈哈哈。
小叮当:整天就想着这些损人不利己的事情,有空还是真正练习一下自己的指法比较好,省得到时候出丑呢!