我现在头晕目眩,可能是因为我错过了一些基本逻辑。
我在 VB.NET 中有一个“Rock, Paper, scissor”程序,它为每个单独的游戏/回合提供了正确的结果。我遇到的问题是在尝试确定 MATCH 的结果时,该结果也可以是“Win,Loose,Draw”。比赛是 3 胜制(先到 2)和 5 胜制(先到 3)。由于比赛的结果可能是平局,因此有多种组合/排列方式,例如:
- W、L、D
- 左、宽、深
- 左、右、右
- D、L、W
- W,D,L,......等等......
到目前为止,我有以下代码:
Public Class GameForm
Private humanScore As Integer = 0
Private compScore As Integer = 0
Private drawScore As Integer = 0
Private totalGames As Integer = 0
Private totalGamesForWin As Integer = 0
Private totalGamesPlayed As Integer = 0
Private player1 = New PlayerHumanPlayer()
Private player2 = New PlayerComputerRandom()
Private Sub GameForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If GameTypeForm.cmboMatchDuration.SelectedItem = 0 Then
totalGames = 3
totalGamesForWin = 2
lblMatchInfor.Text = GlobalVariables.MatchTypeBestOf3Message
ElseIf (GameTypeForm.cmboMatchDuration.SelectedItem = 1) Then
totalGames = 5
totalGamesForWin = 3
lblMatchInfor.Text = GlobalVariables.MatchTypeBestOf5Message
End If
End Sub
Private Sub btnRock_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRock.Click
findGameWinner("HumanPlayer", "Rock", "RandomComputer")
End Sub
Private Sub btnPaper_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPaper.Click
findGameWinner("HumanPlayer", "Paper", "RandomComputer")
End Sub
Private Sub btnScissors_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnScissors.Click
findGameWinner("HumanPlayer", "Scissors", "RandomComputer")
End Sub
Public Sub findGameWinner(ByVal p1name As String, ByVal p1WeaponSelected As String, ByVal p2Name As String)
player1.Name = p1name
player1.pickWeapon(p1WeaponSelected) ' Should I be using the Rock Class???
player2.Name = p2Name
player2.pickWeapon()
Dim winner As Integer = player1.getWeapon().compareTo(player2.getWeapon())
Select Case winner
Case 1
updateScores(True, False)
findMatchWinner()
Case -1
updateScores(False, True)
findMatchWinner()
Case 0
updateScores(False, False)
findMatchWinner()
End Select
End Sub
Public Function updateScores(ByVal humanWon As Boolean, ByVal compWon As Boolean) As Integer
If humanWon = True Then
humanScore = humanScore + 1
'Update Human labels
lblPlayerScore.Text = humanScore.ToString()
'txtCompChoice.Text = txtCompChoice.Text + Environment.NewLine + Type.GetType(player2.pWeapon.ToString()).ToString()
txtCompChoice.Text = txtCompChoice.Text + Environment.NewLine + player2.pWeapon.ToString()
txtGameStatus.Text = txtGameStatus.Text + Environment.NewLine + player1.Name() + " wins!"
ElseIf compWon = True Then
compScore = compScore + 1
'Update Computer labels
lblCompScore.Text = compScore.ToString()
'txtCompChoice.Text = txtCompChoice.Text + Environment.NewLine + Type.GetType(player2.pWeapon.ToString()).ToString()
txtCompChoice.Text = txtCompChoice.Text + Environment.NewLine + player2.pWeapon.ToString()
txtGameStatus.Text = txtGameStatus.Text + Environment.NewLine + player2.Name() + " wins!"
Else
drawScore = drawScore + 1
'Update Draw labels
lblDrawGame.Text = drawScore.ToString()
'txtCompChoice.Text = txtCompChoice.Text + Environment.NewLine + Type.GetType(player2.pWeapon.ToString()).ToString()
txtCompChoice.Text = txtCompChoice.Text + Environment.NewLine + player2.pWeapon.ToString()
txtGameStatus.Text = txtGameStatus.Text + Environment.NewLine + "Draw!"
End If
totalGamesPlayed = totalGamesPlayed + 1
Return totalGamesPlayed
End Function
Public Function findMatchWinner() As String
If totalGamesPlayed <> totalGames Then
If humanScore = totalGamesForWin Then
lblMatchInfor.Text = GlobalVariables.HumanMacthWinMessage
clearForm()
ElseIf compScore = totalGamesForWin Then
lblMatchInfor.Text = GlobalVariables.CompMacthWinMessage
clearForm()
ElseIf totalGamesPlayed = totalGames - 1 Then
lblMatchInfor.Text = GlobalVariables.DeciderGameMessage
End If
ElseIf humanScore = totalGamesForWin Then
lblMatchInfor.Text = GlobalVariables.HumanMacthWinMessage
clearForm()
ElseIf compScore = totalGamesForWin Then
lblMatchInfor.Text = GlobalVariables.CompMacthWinMessage
clearForm()
ElseIf (drawScore = totalGamesPlayed) Then
lblMatchInfor.Text = GlobalVariables.DrawMacthWinMessage
clearForm()
End If
Return "Human OR Computer"
End Function
Public Sub clearForm()
End Sub
End Class
我以为我做得很好,直到我想起我完全忘记了平局/平局。从那以后我的脑袋一直在循环,所以有人可以解释一下如何让 findMatchWinner() 函数正常工作吗?
任何帮助将不胜感激。
提前谢谢