私の頭は今回転しています、そしてそれはおそらく私がいくつかの基本的な論理を逃したためです。
VB.NETに「じゃんけん」プログラムがあり、個々のゲーム/ラウンドごとに正しい結果が得られます。私が抱えている問題は、「勝ち、負け、引き分け」でもあるMATCHの結果を決定しようとするときです。一致するのは、Best-of-3(最初から2)とBest-of-5(最初から3)です。試合の結果は引き分けになる可能性があるため、これには次のようなさまざまな組み合わせ/順列があります。
- W、L、D
- L、W、D
- L、D、W
- 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()関数を正しく機能させる方法に親切に光を当てることができますか?
どんな助けでも大歓迎です。
よろしくお願いします