2012-04-12 78 views
1

我有一個tic tac腳趾程序,我有一切工作的方式應該是。但是,我對這個編碼所遇到的最後一個問題是,我似乎無法弄清楚什麼時候如何編碼它。這是我到目前爲止。tic tac腳趾編碼領帶

Public Class Form1 

Private turn As Integer = 1 
Private play() As String = {"O", "X"} 
Private board(2, 2) As String 

Private Structure arrayIndex 
    Dim x As Integer 
    Dim y As Integer 
End Structure 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    For x As Integer = 1 To 9 
     Dim b As New Button With { _ 
      .Width = 80, _ 
      .Height = 80, _ 
      .Text = "", _ 
      .Location = New Point(60 + (((x - 1) Mod 3) * 80), 60 + (((x - 1) \ 3) * 80)), _ 
      .Tag = New arrayIndex With {.x = (x - 1) Mod 3, .y = (x - 1) \ 3}} 
     Me.Controls.Add(b) 
     AddHandler b.Click, AddressOf buttons_click 

    Next 
    Me.SetClientSizeCore(360, 360) 

End Sub 

Private Sub buttons_click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    If DirectCast(sender, Button).Text <> "" Then Return 
    DirectCast(sender, Button).Text = play(turn Mod 2) 
    Dim index As arrayIndex = DirectCast(DirectCast(sender, Button).Tag, arrayIndex) 
    board(index.x, index.y) = play(turn Mod 2) 
    turn += 1 
    winner() 
End Sub 

Private Sub winner() 
    Dim rows(7) As String 
    rows(0) = board(0, 0) & board(1, 0) & board(2, 0) 
    rows(1) = board(0, 1) & board(1, 1) & board(2, 1) 
    rows(2) = board(0, 2) & board(1, 2) & board(2, 2) 
    rows(3) = board(0, 0) & board(0, 1) & board(0, 2) 
    rows(4) = board(1, 0) & board(1, 1) & board(1, 2) 
    rows(5) = board(2, 0) & board(2, 1) & board(2, 2) 
    rows(6) = board(0, 0) & board(1, 1) & board(2, 2) 
    rows(7) = board(2, 0) & board(1, 1) & board(0, 2) 

    For x As Integer = 0 To 7 
     If rows(x).Length = 3 AndAlso (rows(x)(0) = rows(x)(1) AndAlso rows(x)(0) = rows(x)(2)) Then 
      If MessageBox.Show(rows(x)(0) & "'s winsssss!", "We have a winner!", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) = DialogResult.OK Then 
       turn = 1 
       ReDim board(2, 2) 
       For Each ctrl As Control In Controls 
        ctrl.Text = "" 
       Next 
       Return 
      Else 
       Me.Close() 


      End If 

     End If 
    Next 

End Sub 


End Class 

回答

2

一種方法是,如果所有的空間都滿了,沒有贏家,那麼就有一條領帶。

+0

是的,我明白,但我似乎無法弄清楚如何編碼 – beginnerprogrammer 2012-04-12 12:22:12

+2

添加一個布爾到每個'空間'標記「空間填充」。檢查它們是否全部爲真。如果是這樣並且比賽還沒有結束,那就是平局。 – 2012-04-12 12:25:22

+0

我明白你的意思了,但我沒有看到代碼以及如何啓動它。我知道我將不得不創建一個變量來保存這個布爾值。但不知道如何編碼其餘的 – beginnerprogrammer 2012-04-12 12:37:10