10.2 井字遊戲─OX 
除非你已經LKK,不然一定玩過「OX棋」。如果想玩又不想浪費紙筆,且希望有公平的裁判,那以目前的功力已足以利用VB自行設計了。在此便以應用控制項陣列的技巧及計時器控制項的使用,設計一「OX棋」如下: 
 
 
1. 建立控制項如圖10.3
 
10.3
 
 
2. 設定屬性如下表:
 
 
Object
Name
Caption
Font
(1) Label  lblMsg 新細明體
(2) Label lblTime TNR
(3) Command Button cmdTmr 計時開始 標楷體
(4) Command Button cmdAgain 再玩一次 新細明體
(5) Command Button cmdExit 不玩了 新細明體
(6) Timer Timer
(7) Command Button cmdOX TNR
 
 
備註:cmdOX(Index)為控制項陣列,Index = 0 ~ 8。
 
 
3. 編寫程式碼:
 
 
Dim ox(3, 3) As Integer  
Dim condition As Integer  
Dim result As Integer 
 
Rem 使用者按下「再玩一次」後重設系統初始值 
 
Private Sub cmdAgain_Click()  
  Timer.Enabled = False  
  Dim i, j As Integer  
  result = 0: condition = 0  
  lblMsg.Visible = False  
  For i = 0 To 8  
   cmdOX(I).Caption = “”  
   cmdOX(I).Enabled = True  
  Next i  


  For i = 0 To 2  
   For j = 0 To 2  
    ox(i, j) = 0  
   Next j  
  Next I  
End Sub  


Private Sub cmdExit_Click()   
  End  
End Sub  

Private Sub Form_Load()  
  Dim i, j As Integer  
  condition = 0: result = 0  
  lblMsg.Visible = False  
   For i = 0 To 2  
   For j = 0 To 2  
    ox(i, j) = 0  
   Next j  
  Next i  
End Sub  


Private Sub cmdOX_Click(Index As Integer)  
  Dim i, j As Integer  
  Dim over As Boolean  
  i = Index \ 3  
  j = Index Mod 3  
  If ox(i, j) = 0 Then  
  If condition = 0 Then  
   cmdOX(Index).Caption = “O”  
   condition = 1  
   ox(i, j) = 1  
Else  
   cmdOX(Index).Caption = “X”  
   condition = 0  
   ox(i, j) = 2  
End If 
 
Rem 判斷是否連成一線
 
For i = 0 To 2  
  If ox(0, i) = 1 And ox(1, i) = 1 And ox(2, i) = 1 Then  
   result = 1  
  End If  

  If ox(i, 0) = 1 And ox(i, 1) = 1 And ox(i, 2) = 1 Then  
   result = 1  
  End If  

  If ox(0, i) = 2 And ox(1,i) = 2 And ox(2, i) = 2 Then  
   result = 2  
  End If  

  If ox(i, 0) = 2 And ox(i, 1) = 2 And ox(i, 2) = 2 Then  
   result = 2  
  End If  

Next i  



  If ox(0, 0) = 1 And ox(1, 1) = 1 And ox(2, 2) = 1 Then  
   result = 1  
  End If  

  If ox(0, 0) = 2 And ox(1, 1) = 2 And ox(2, 2) = 2 Then  
   result = 2  
  End If  

  If ox(0, 2) = 1 And ox(1, 1) = 1 And ox(2, 0) = 1 Then  
   result = 1  
  End If  

  If ox(0, 2) = 2 And ox(1, 1) = 2 And ox(2, 0) = 2 Then  
   result = 2  
  End If  

  If result = 1 Then  
   Beep  
   lblMsg.Caption = “好棒啊!畫 O 者贏了 ※※※※※”  
   lblMsg.Visible = True  
   Timer.Enabled = False  

End If  



If result = 2 Then  
  Beep  
  lblMsg.Caption = “帥呆啦!畫 X 者贏了 ※※※※※”  
  lblMsg.Visible = True  
  Timer.Enabled = False  
End If  


If result <> 0 Then  
  For i = 0 To 8  
   cmdOX(i).Enabled = False  
  Next i  
Else  
  over = True  
  For i = 0 To 2  
   For j = 0 To 2  
    If ox(i, j) = 0 Then  
     over = False  
    End If  
   Next j  
  Next i  


    If over Then  
     lblMsg.Enabled = True  
    End If  
   End If  
  End If  

End Sub 

 
Rem 啟動計時器,並設定時間間隔為1000ms 
 
Private Sub cmdTmr_Click()  
  Timer.Enabled = True  
  Timer.Interval = 1000  

End Sub  



Private Sub Timer_Timer()  
  Static second  
  lblTime.Caption = second & “ sec”  
  second = second + 1  

End Sub 

 
 
 
4. 執行結果如圖10.4
 
10.4