這一期我們要來講解遊戲的進行了,這個遊戲裡,如果是和電腦對戰的話,
User則一定處於先攻的狀態,在按下遊戲開始,一切參數都初始化後,
我們就把Focus設定到txtUserInput,使用者就可以開始進行遊戲了,
使用者輸入要猜的數字後,按下Enter便由程試來判斷是否正確,
不正確的話,就改由電腦來猜我們的數字,我們來看一下這一段程式吧!
Private Sub txtUserInput_KeyPress(KeyAscii As Integer)
'假如按了Enter就Check猜的數字對不對,有沒有贏,
'如果處於連線狀態,再將資料傳給對方
If KeyAscii = 13 Then
判斷按下Enter鍵
KeyAscii = 0
將按鍵取消,做不做都沒差,消除Enter的按鍵聲而已
If ConnectStatus = True Then
這一段目前用不到!
End If
If CheckUserNumber(txtUserInput.Text, CPUNumber) <> True Then
接者我們呼叫CheckUserNumber這一段副程式來Check User這一次猜對
幾個數字,如果沒有猜對,就讓電腦猜User的數字,如果電腦猜對就
GameOver了!否則就繼續遊戲,將Focus設回Input的text中
If txtUserInput.Enabled = True Then
txtUserInput.SelStart = 0
txtUserInput.SelLength = GAME_NUMBER
txtUserInput.SetFocus
End If
Else
如果CheckUserNumber傳回True,代表User贏了,
Show出訊息,將控制項作一些設定就O.K了
cmdGameStart.Caption = "遊戲開始"
txtUserInput.Enabled = False
GameSetUP.Enabled = True
NetButter.Enabled = True
MsgBox "You Win!!", , Me.Caption
End If
ElseIf KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then
按的不是數字鍵就把它取消掉
KeyAscii = 0
End If
End Sub
接下來我們看這段程式的重點部份,CheckUserNumber這一段副程式
Private Function CheckUserNumber(xNumber As String, AnsNumber As String) As Boolean
'User猜電腦數字的判斷
'Check Input Error , If Error Exit Sub
'Check Match Number,If 4A then User Win Exit Sub
'Else Call CPUGo,換電腦猜User的數字
'假如電腦猜對,就GameOver囉!
Dim i%, j%, MatchA%, MatchB%
先判斷輸入的數字正不正確
1.長度 2.數字有沒有重複
If Len(xNumber) <> GAME_NUMBER Then
MsgBox "請輸入正確數字!", , Me.Caption
Exit Function
End If
If CheckSameNumber(xNumber) = True Then
MsgBox "數字重覆!", , Me.Caption
Exit Function
End If
接者利用For迴圈來將User輸入的xNumber與正確解答AnsNumber
作比對,將幾A幾B的結果推算出來
For i% = 1 To GAME_NUMBER
For j% = 1 To GAME_NUMBER
If Mid$(xNumber, i, 1) = Mid$(AnsNumber, j, 1) Then
If i% = j% Then
MatchA = MatchA + 1
Else
MatchB = MatchB + 1
End If
End If
Next j%
Next i%
將結果List出來
lstUserRecord.AddItem xNumber & Space(3) & Format$(MatchA, "0") & "A" & Format$(MatchB, "0") & "B"
假如沒有全部猜對的話,那就換電腦猜我們的數字了
If MatchA <> GAME_NUMBER And ConnectStatus = False Then
Me.Caption = "電腦思考中..."
Me.MousePointer = 11
DoEvents
呼叫CPUGo這個副程式來進行電腦猜數字的推算
原理我已經大概說明過了
這裡就不在累述了
如果電腦答對的話,就GameOver了,
不過這裡有一點要注意的是
我在CheckUserNumber裡,傳回True代表User勝利
但是不傳回True卻不表示就是電腦贏了,
因為真正的情況應該有三種
User贏,電腦贏,不分勝負繼續遊戲
因此我們應該用其它的方法來簡查電腦是否獲得勝利,
在這裡我用的是txtUserInput的Enabled屬性來判斷
如果電腦猜對了,txtUserInput.Enabled就設為False
If CPUGo() <> True Then
Me.MousePointer = 0
Me.Caption = "大家來玩猜數字"
Else
Me.MousePointer = 0
Me.Caption = "大家來玩猜數字"
cmdGameStart.Caption = "遊戲開始"
txtUserInput.Enabled = False
NetButter.Enabled = True
GameSetUP.Enabled = True
MsgBox "電腦贏了!" & vbCrLf & "電腦的答案是... " & CPUNumber, , Me.Caption
End If
ElseIf MatchA = GAME_NUMBER Then
CheckUserNumber = True
Exit Function
End If
整個猜數字遊戲就是這麼簡單而已,
如果沒有分出勝負就一直在這個程序循環下去,
直到分出勝負為止
這個遊戲裡,我讓先攻的一方佔了比較大的優勢,
因為只要有人猜對了,遊戲就宣告結束,
不會有所謂的平手這種狀況發生,如果你覺得這種方法不公平的話,
可以自己改良一下,讓這個遊戲更有趣吧!
NextTime:連線對戰講解!!敬請期待!!(哈哈...這次有點偷懶,篇幅小了很多,
下次再見囉!)
回到VB教學教室
|
|