當前位置:編程學習大全網 - 編程語言 - 各壹個最簡單的vb打字遊戲代碼

各壹個最簡單的vb打字遊戲代碼

46. 鍵盤打字練習程序

本程序用於打字練習,訓練和提高打字速度。可選擇小寫字母、大寫字母、大小寫混合字母、特殊字符、數字、混合字符、漢字等 7 種練習方式。

程序啟動後,字符不斷隨機出現並落下,如果練習者鍵入的字符正確,該字符變紅變大,隨後快速縮小,最終消失。

程序可顯示練習者的成績、正確率和每分鐘的打字速度。練習中雙擊窗口,可清除數據,重新開始。註意進行字母或漢字輸入練習時,要將輸入法切換到正確的狀態。

'?'下面是窗體代碼,在?VB6.0?調試通過:

'在窗體上放置下面?6?個控件:

'?Option1:?用於進行字符類型選擇

'?Label1:用於顯示下落的字符

'?Label2:用於顯示遊戲信息

'?Timer1:用於移動字符

'?Picture1:下落字符的背景

'?Text1:用於顯示遊戲者鍵入的字符

'在屬性窗口將?Option1?和?Label1?的?Index?屬性設置為?0,其他控件及屬性不必設置,采用默認屬性即可。

'如果要進行漢字打字練習,在工程所在目錄下用記事本建立壹個文本文件,文件名為:HanZi.txt

'?在此文本文件中輸入練習所用的漢字,如:漢字=中華人民***和國,偉大的奧運會!

'?註意,輸入的字符前面三個必須是:漢字=

'本人原創,轉載請註明來源:/100bd/blog/item/633b6467dbfdd828aa184cdb.html

Dim?ctY?As?Single,?ctCount?As?Long,?ctFinish?As?Long,?ctTime?As?Single

Dim?ctSize?As?Single,?ctStr?As?String,?ctStrS?As?Long,?ctNoCheck?As?Boolean

Private?Sub?Form_Load()

Dim?I?As?Long

Me.KeyPreview?=?True:?Me.Caption?=?"鍵盤打字速度練習"

Text1.Text?=?"":?ctSize?=?36?'顯示字符大小

Me.BackColor?=?RGB(50,?50,?155):?Picture1.BackColor?=?RGB(100,?100,?255)

Label2.BackColor?=?Me.BackColor:?Label2.ForeColor?=?&HFFFFFF

Label2.Caption?=?"成績:?0%":?Label2.AutoSize?=?True:?'用於顯示成績信息

Me.Move?Screen.Width?*?0.1,?Screen.Height?*?0.1,?Screen.Width?*?0.8,?Screen.Height?*?0.8

Set?Label1(0).Container?=?Picture1

Label1(0).Font.Bold?=?True:?Label1(0).BackStyle?=?0?'用於顯示下落的字符

Label1(0).UseMnemonic?=?False:?Label1(0).AutoSize?=?True

For?I?=?0?To?4?'同時出現的字符個數,這裏設置為?5,可修改

If?I?>?0?Then?Load?Label1(I)

Next

Option1(0).BackColor?=?Me.BackColor:?Option1(0).ForeColor?=?&HFFFFFF

For?I?=?0?To?6

If?I?>?0?Then?Load?Option1(I)

Next

Option1(0).Caption?=?"小寫字母":?Option1(1).Caption?=?"大寫字母"

Option1(2).Caption?=?"大小寫混合字母":?Option1(3).Caption?=?"特殊字符"

Option1(4).Caption?=?"數字":?Option1(5).Caption?=?"混合字母和字符"

Option1(6).Caption?=?"漢字":

For?I?=?0?To?Option1.Count?-?1

Option1(I).Visible?=?True

Next

Option1(0).Value?=?True

Call?StartPlay

ctY?=?Picture1.ScaleY(5,?3,?Picture1.ScaleMode)?'字符下落速度(這裏為?5?個像素),可修改

Timer1.Enabled?=?True:?Timer1.Interval?=?50

End?Sub

Private?Sub?Form_Activate()

On?Error?Resume?Next

Text1.SetFocus

End?Sub

Private?Sub?Text1_Change()

Dim?I?As?Long

If?ctNoCheck?Or?Len(Text1.Text)?<?11?Then?Exit?Sub

ctNoCheck?=?True

I?=?Text1.SelStart:If?I?=?0?Then?I?=?1

Text1.Text?=?Mid(Text1.Text,?I,?1)

Text1.SelStart?=?Len(Text1.Text)

ctNoCheck?=?False

End?Sub

Private?Sub?Form_KeyPress(KeyAscii?As?Integer)

Dim?I?As?Long,?nStr?As?String,?T?As?Single

nStr?=?Chr(KeyAscii)

If?nStr?=?"?"?Then?nStr?=?"(空格)"

For?I?=?0?To?Label1.Count?-?1

If?nStr?=?Label1(I).Caption?And?Label1(I).Tag?=?"1"?Then

Label1(I).ForeColor?=?255:?Label1(I).Tag?=?"2"

Label1(I).Font.Size?=?ctSize?*?4

T?=?Picture1.ScaleHeight?-?Label1(I).Height

If?Label1(I).Top?>?T?Then?Label1(I).Top?=?T

ctFinish?=?ctFinish?+?1:?Call?ShowInf

Exit?Sub

End?If

Next

End?Sub

Private?Sub?ShowInf()

Dim?nStr?As?String,?T?As?Long,?M?As?Long,?H?As?Long,?StrT?As?String,?V?As?Long

If?ctCount?>?0?Then?nStr?=?Format(ctFinish?/?ctCount?*?100,?"0.0")?Else?ctCount?=?"0"

nStr?=?"正確率:"?&?nStr?&?"%"

nStr?=?"總數:"?&?ctCount?&?vbCrLf?&?vbCrLf?&?"正確:"?&?ctFinish?&?vbCrLf?&?vbCrLf?&?nStr

T?=?Int(Timer?-?ctTime)

If?T?>?0?Then?V?=?ctFinish?/?T?*?60

H?=?T?\?3600:?T?=?T?Mod?3600

M?=?T?\?60:?T?=?T?Mod?60

If?H?>?0?Then?StrT?=?H?&?":"

If?H?>?0?Or?M?>?0?Then?StrT?=?StrT?&?M?&?"'"

'StrT?=?"12:34'"'****調試代碼

nStr?=?nStr?&?vbCrLf?&?vbCrLf?&?"時間:"?&?StrT?&?T?&?""""

Label2.Caption?=?nStr?&?vbCrLf?&?vbCrLf?&?"速度:"?&?V?&?"字/分"

End?Sub

Private?Sub?Form_Resize()

Dim?I?As?Long,?L?As?Single,?T?As?Single,?W?As?Single,?H?As?Single,?MaxW?As?Single

Text1.Font.Size?=?16:?Label2.Font.Size?=?12

H1?=?Me.TextHeight("1")

L?=?H1:?T?=?H1

For?I?=?0?To?Option1.Count?-?1

Option1(I).Visible?=?True:?W?=?Me.TextWidth(Option1(I).Caption?&?"123456")

If?MaxW?<?W?Then?MaxW?=?W

Option1(I).Move?L,?T,?W,?H1?*?1.25

T?=?T?+?H1?*?1.5

Next

Label2.Move?L?*?0.8,?T?+?H1

H?=?Me.ScaleHeight?-?Text1.Height

L?=?L?+?MaxW:?W?=?Me.ScaleWidth?-?L

If?W?>?0?And?H?>?0?Then?Picture1.Move?L,?0,?W,?H

W?=?Me.ScaleWidth?-?L

If?W?>?0?Then?Text1.Move?L,?Picture1.Height,?W

End?Sub

Private?Sub?Picture1_Click()

Text1.SetFocus

End?Sub

Private?Sub?Picture1_DblClick()

Call?StartPlay

End?Sub

Private?Sub?StartPlay()

ctFinish?=?0:?ctCount?=?0:?ctTime?=?Timer

For?I?=?0?To?Label1.Count?-?1

Label1(I).Tag?=?"":?Label1(I).Visible?=?False

Next

End?Sub

Private?Sub?Option1_Click(Index?As?Integer)

GetStr?Index

Call?StartPlay

On?Error?Resume?Next

Text1.SetFocus

End?Sub

Private?Sub?GetStr(nMode?As?Integer)

Dim?Str1?As?String,?Str2?As?String,?Str3?As?String

Str1?=?"?abcdefghijklmnopqrstuvwxyz"

Str2?=?"?~!@#$%^&*()_+|-=\{}:""<>?[];',./"

Str3?=?"0123456789"

Select?Case?nMode

Case?1:?ctStr?=?UCase(Str1)?'大寫字母

Case?2:?ctStr?=?Str1?&?UCase(Str1)?'大小寫混合字母

Case?3:?ctStr?=?Str2:'特殊字符

Case?4:?ctStr?=?Str3:'數字

Case?5:?ctStr?=?Str1?&?UCase(Str1)?&?Str2?&?Str3?'大小寫混合和特殊字符

Case?6:?ctStr?=?ReadText():?'漢字

Case?Else:?ctStr?=?Str1:'小寫字母

End?Select

ctStrS?=?Len(ctStr)

End?Sub

Private?Function?ReadText()?As?String

'從文本文件中讀出要進行漢字練習的字符

Dim?F?As?String,?H?As?Long,?nStr?As?String

On?Error?GoTo?cuo

F?=?App.Path

If?Right(F,?1)?<>?"\"?Then?F?=?F?&?"\"

F?=?F?&?"HanZi.txt"

H?=?FreeFile

Open?F?For?Input?As?#H

Line?Input?#H,?nStr

Close?#H

If?Left(nStr,?3)?<>?"漢字="?Then?GoTo?cuo?'檢查文件標記

nStr?=?Trim(Mid(nStr,?4))

If?nStr?=?""?Then?GoTo?cuo

ReadText?=nStr

'ReadText?=?"中華人民***國"?'?****調試代碼

Exit?Function

cuo:

ReadText?=?"錯誤"

End?Function

Private?Sub?RndStr(I?As?Long)

'隨機字符和位置

Static?xUp?As?Single

Dim?x?As?Single,?W?As?Single,?S?As?Long

If?Label1(I).Tag?<>?""?Then?Exit?Sub

Label1(I).Font.Size?=?ctSize:?Label1(I).ForeColor?=?&HFFFFFF

Randomize:?S?=?1?+?Int(Rnd?*?ctStrS):?Label1(I).Caption?=?Mid(ctStr,?S,?1)?'隨機字符

If?Label1(I).Caption?=?"?"?Then?Label1(I).Caption?=?"(空格)"

Randomize

W?=?Picture1.ScaleWidth

Do?'隨機位置:確保不重疊

x?=?Rnd?*?(W?-?Label1(I).Width)

S?=?S?+?1

If?S?>?100?Or?W?<?Label1(I).Width?*?2?Then?Exit?Do

If?Abs(xUp?-?x)?>?Label1(I).Width?Then?Exit?Do

Loop

Label1(I).Move?x,?-ctY

xUp?=?x

Label1(I).Visible?=?True:?Label1(I).Tag?=?"1"

ctCount?=?ctCount?+?1:?Call?ShowInf

End?Sub

Private?Sub?Timer1_Timer()

Dim?I?As?Long,?NextI?As?Long,?S?As?Single,?Have1?As?Boolean,?T?As?Long

For?I?=?0?To?Label1.Count?-?1

If?Label1(I).Tag?<>?""?Then

Have1?=?True

Label1(I).Top?=?Label1(I).Top?+?ctY

If?Label1(I).Tag?=?"2"?Then?'已擊中的字符

S?=?Label1(I).Font.Size?*?0.7

If?S?>?3?Then?Label1(I).Font.Size?=?S?Else?Label1(I).Tag?=?"":?Label1(I).Visible?=?False

End?If

If?Label1(I).Top?>?Picture1.ScaleHeight?Then?Label1(I).Tag?=?"":?Label1(I).Visible?=?False

If?Label1(I).Top?>?Picture1.ScaleHeight?*?0.2?Then?'超過窗體高度?1/5?,下壹個字符出現

NextI?=?I?+?1

If?NextI?>?Label1.Count?-?1?Then?NextI?=?0

RndStr?NextI

End?If

End?If

Next

If?Not?Have1?Then?RndStr?0?'已全部消失

T?=?T?+?Timer1.Interval

If?T?>?200?Then?T?=?0:?Call?ShowInf

End?Sub

'本人原創,轉載請註明來源:/100bd/blog/item/633b6467dbfdd828aa184cdb.html

參考:/100bd

  • 上一篇:求壹個用C++寫的能播放MP3的程序
  • 下一篇:請大家對我國的UFO研究形勢作壹下分析?
  • copyright 2024編程學習大全網