我正试图用Visual Basic编写一个在用户和计算机之间播放的Tic-Tac-Toe程序。该程序使用模块中的2D阵列来跟踪游戏的状态。这是我目前掌握的代码。
Public Class Form1
Private _currentPlayer As String = "O"
Private _gameArray As String
Private Property gameArray(p1 As Integer, p2 As Integer) As String
Get
Return _gameArray
End Get
Set(value As String)
_gameArray = value
End Set
End Property
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MessageBox.Show("Welcome to Tic Tac Toe! Would you like to play a game?")
End Sub
Private Function nextPlayer() As String
If _currentPlayer.Equals("O") Then
_currentPlayer = "X"
Return "O"
Else
_currentPlayer = "O"
Return "X"
End If
End Function
Private Sub printView()
Console.WriteLine(btn1.Text & "|" & btn2.Text & "|" & btn3.Text)
Console.WriteLine("----------------")
Console.WriteLine(btn4.Text & "|" & btn5.Text & "|" & btn6.Text)
Console.WriteLine("----------------")
Console.WriteLine(btn7.Text & "|" & btn8.Text & "|" & btn9.Text)
End Sub
Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress
Console.WriteLine(e.KeyChar)
Select Case e.KeyChar
Case "1"
btn1.Text = "X"
Case "2"
btn2.Text = "X"
Case "3"
btn3.Text = "X"
Case "4"
btn4.Text = "X"
Case "5"
btn5.Text = "X"
Case "6"
btn6.Text = "X"
Case "7"
btn7.Text = "X"
Case "8"
btn8.Text = "X"
Case "9"
btn9.Text = "X"
End Select
printView()
End Sub
Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click
If Not String.IsNullOrEmpty(btn1.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn1.Text = nextPlayer()
gameArray(0, 0) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click
If Not String.IsNullOrEmpty(btn2.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn2.Text = nextPlayer()
gameArray(0, 1) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn3_Click(sender As Object, e As EventArgs) Handles btn3.Click
If Not String.IsNullOrEmpty(btn3.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn3.Text = nextPlayer()
gameArray(0, 2) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn4_Click(sender As Object, e As EventArgs) Handles btn4.Click
If Not String.IsNullOrEmpty(btn4.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn4.Text = nextPlayer()
gameArray(1, 0) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn5_Click(sender As Object, e As EventArgs) Handles btn5.Click
If Not String.IsNullOrEmpty(btn5.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn5.Text = nextPlayer()
gameArray(1, 1) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn6_Click(sender As Object, e As EventArgs) Handles btn6.Click
If Not String.IsNullOrEmpty(btn6.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn6.Text = nextPlayer()
gameArray(1, 2) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn7_Click(sender As Object, e As EventArgs) Handles btn7.Click
If Not String.IsNullOrEmpty(btn7.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn7.Text = nextPlayer()
gameArray(2, 0) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn8_Click(sender As Object, e As EventArgs) Handles btn8.Click
If Not String.IsNullOrEmpty(btn8.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn8.Text = nextPlayer()
gameArray(2, 1) = nextPlayer()
checkwin()
End If
End Sub
Private Sub btn9_Click(sender As Object, e As EventArgs) Handles btn9.Click
If Not String.IsNullOrEmpty(btn9.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn9.Text = nextPlayer()
gameArray(2, 2) = nextPlayer()
checkwin()
End If
End Sub
Private Sub checkwin()
If (btn1.Text = "X") And (btn2.Text = "X") And (btn3.Text = "X") Then MsgBox("X WINS!")
If (btn4.Text = "X") And (btn5.Text = "X") And (btn6.Text = "X") Then MsgBox("X WINS!")
If (btn7.Text = "X") And (btn8.Text = "X") And (btn9.Text = "X") Then MsgBox("X WINS!")
If (btn1.Text = "X") And (btn4.Text = "X") And (btn7.Text = "X") Then MsgBox("X WINS!")
If (btn2.Text = "X") And (btn5.Text = "X") And (btn8.Text = "X") Then MsgBox("X WINS!")
If (btn3.Text = "X") And (btn6.Text = "X") And (btn9.Text = "X") Then MsgBox("X WINS!")
If (btn1.Text = "X") And (btn5.Text = "X") And (btn9.Text = "X") Then MsgBox("X WINS!")
If (btn3.Text = "X") And (btn5.Text = "X") And (btn7.Text = "X") Then MsgBox("X WINS!")
If (btn1.Text = "O") And (btn2.Text = "O") And (btn3.Text = "O") Then MsgBox("O WINS!")
If (btn4.Text = "O") And (btn5.Text = "O") And (btn6.Text = "O") Then MsgBox("O WINS!")
If (btn7.Text = "O") And (btn8.Text = "O") And (btn9.Text = "O") Then MsgBox("O WINS!")
If (btn1.Text = "O") And (btn4.Text = "O") And (btn7.Text = "O") Then MsgBox("O WINS!")
If (btn2.Text = "O") And (btn5.Text = "O") And (btn8.Text = "O") Then MsgBox("O WINS!")
If (btn3.Text = "O") And (btn6.Text = "O") And (btn9.Text = "O") Then MsgBox("O WINS!")
If (btn1.Text = "O") And (btn5.Text = "O") And (btn9.Text = "O") Then MsgBox("O WINS!")
If (btn3.Text = "O") And (btn5.Text = "O") And (btn7.Text = "O") Then MsgBox("O WINS!")
End Sub
End Class
在编写代码时,程序实际上并不是轮流的,只是简单地在我按下的任何按钮上加一个O。
我还应该让用户既可以点击他们想要的方块,也可以使用键盘上的1-9键选择他们想要的方框。我很难将键分配给相应的按钮。
如有任何帮助,我们将不胜感激。
还可以尝试以这种方式更改代码,这样就不会使用not子句。。。。
Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click
If String.IsNullOrEmpty(btn2.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn2.Text = nextPlayer()
gameArray(0, 1) = nextPlayer()
End If
End Sub
再次查看您的代码。。。。让我们假设_currentlayer=O
Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click
If Not String.IsNullOrEmpty(btn2.Text) Then
MessageBox.Show("This position has already been taken, please select an empty square.")
Else
btn2.Text = nextPlayer() ' this will return O and _currentPlayer is now X
gameArray(0, 1) = nextPlayer() 'Your calling it again so return will be X and _currentPlayer in now O again...
checkwin()
End If
由于这是一个类项目。。。看看你能不能先自己解决这个问题。