home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / TicTacToe_Game.cls < prev    next >
Text File  |  1997-10-01  |  5KB  |  207 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "TicTacToe_Game"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = False
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = False
  10. '
  11. ' File          : TicTacToe_Game.cls
  12. '
  13. ' Project       : demo
  14. ' Configuration : demo 1
  15. ' Phase         : Implementation 1
  16. ' System        : TicTacToe 1
  17. '
  18. ' The Tic Tac Toe game itself.
  19. Option Explicit
  20.  
  21.  
  22. ' Inheritance attributes
  23.  
  24.  
  25. ' Association attributes
  26.  
  27. Public gui_ As TicTacToe_GUI
  28.  
  29. Private board_ As New ClassSet
  30.  
  31.  
  32. ' User defined attributes
  33.  
  34. Private turnNumber_ As Integer
  35.  
  36. Private players_ As String
  37. ' Has default value "XO"
  38.  
  39. Private drawText_ As String
  40. ' Has default value "It's a draw!!!"
  41.  
  42. Private winText_ As String
  43. ' Has default value " is the winner!!!"
  44.  
  45.  
  46. ' User defined methods
  47.  
  48. Public Sub TicTacToe_Game_Constructor()
  49.     players = "XO"
  50.     drawText = "It's a draw!!!"
  51.     winText = " is the winner!!!"
  52.     ' Start user section
  53.     createCells
  54.     connectCells
  55.     ' End user section
  56. End Sub
  57.  
  58. Private Sub Class_Terminate()
  59.     ' Start user section
  60.     ' End user section
  61. End Sub
  62.  
  63. ' Creates all the cells of the board.
  64. Public Sub createCells()
  65.     Dim acell As TicTacToe_Cell
  66.     Dim i As Integer
  67.   
  68.     For i = 0 To (gui.numberOfCells - 1)
  69.         Set acell = New TicTacToe_Cell
  70.         acell.TicTacToe_Cell_Constructor
  71.         AddBoard acell, i
  72.     Next i
  73. End Sub
  74.  
  75. ' Connects all the cells of the board.
  76. ' Each cell is connected to all its neighbours.
  77. Public Sub connectCells()
  78.     Dim N, E, W, S As Integer
  79.     Dim i As Integer
  80.     N = -Sqr(gui.numberOfCells)
  81.     W = -1
  82.     E = -W
  83.     S = -N
  84.     
  85.     For i = 0 To (gui.numberOfCells - 1)
  86.         board(i).AddNeighbour board(i + N), "N"
  87.         If i Mod Sqr(gui.numberOfCells) <> (Sqr(gui.numberOfCells) - 1) Then
  88.             board(i).AddNeighbour board(i + N + E), "NE"
  89.             board(i).AddNeighbour board(i + E), "E"
  90.             board(i).AddNeighbour board(i + S + E), "SE"
  91.         End If
  92.         board(i).AddNeighbour board(i + S), "S"
  93.         If i Mod Sqr(gui.numberOfCells) <> 0 Then
  94.             board(i).AddNeighbour board(i + S + W), "SW"
  95.             board(i).AddNeighbour board(i + W), "W"
  96.             board(i).AddNeighbour board(i + N + W), "NW"
  97.         End If
  98.     Next i
  99. End Sub
  100.  
  101. ' Initialize everything for a new game.
  102. Public Sub startGame()
  103.     turnNumber = 0
  104.     gui.clearBoard
  105.     Me.clearBoard
  106.     gui.enableBoard
  107.     gui.displayResult ("")
  108. End Sub
  109.  
  110. ' Clears all the cells of the board.
  111. Public Sub clearBoard()
  112.     Dim i As Integer
  113.     For i = 0 To (board_.Count - 1)
  114.         board(i).contents = ""
  115.     Next i
  116. End Sub
  117.  
  118. ' Checks if there is a winner or a draw
  119. ' and displays this result.
  120. Public Sub checkResult(number As Integer)
  121.     If board(number).getMaxLine = Sqr(gui.numberOfCells) Then
  122.         gui.disableBoard
  123.         gui.displayResult Me.getActivePlayer + winText
  124.     Else
  125.         If turnNumber = gui.numberOfCells - 1 Then
  126.             gui.disableBoard
  127.             gui.displayResult drawText
  128.         End If
  129.     End If
  130.     turnNumber = turnNumber + 1
  131. End Sub
  132.  
  133. ' Marks the selected cell and checks to
  134. ' see if there is a result.
  135. Public Sub selectCell(number As Integer)
  136.     board(number).contents = getActivePlayer
  137.     checkResult (number)
  138. End Sub
  139.  
  140. ' Determines the active player.
  141. Public Function getActivePlayer() As String
  142.     getActivePlayer = Mid(players, turnNumber Mod Len(players) + 1, 1)
  143. End Function
  144.  
  145.  
  146. ' Access methods
  147.  
  148. Public Property Get turnNumber() As Integer
  149.     turnNumber = turnNumber_
  150. End Property
  151.  
  152. Public Property Let turnNumber(x As Integer)
  153.     turnNumber_ = x
  154. End Property
  155.  
  156. Public Property Get players() As String
  157.     players = players_
  158. End Property
  159.  
  160. Public Property Let players(x As String)
  161.     players_ = x
  162. End Property
  163.  
  164. Public Property Get drawText() As String
  165.     drawText = drawText_
  166. End Property
  167.  
  168. Public Property Let drawText(x As String)
  169.     drawText_ = x
  170. End Property
  171.  
  172. Public Property Get winText() As String
  173.     winText = winText_
  174. End Property
  175.  
  176. Public Property Let winText(x As String)
  177.     winText_ = x
  178. End Property
  179.  
  180.  
  181. ' Association methods
  182.  
  183. Public Property Get gui() As TicTacToe_GUI
  184.     Set gui = gui_
  185. End Property
  186.  
  187. Public Property Get board(Index As Integer) As TicTacToe_Cell
  188.     If board_.ContainsKey(CStr(Index)) Then
  189.         Set board = board_.Item(CStr(Index))
  190.     Else
  191.         Set board = Nothing
  192.     End If
  193. End Property
  194.  
  195. Public Sub AddBoard(x As TicTacToe_Cell, Index As Integer)
  196.     If Not (x Is Nothing) Then
  197.         board_.Add x, CStr(Index)
  198.     End If
  199. End Sub
  200.  
  201. Public Sub RemoveBoard(Index As Integer)
  202.     Dim temp As TicTacToe_Cell
  203.     Set temp = board_.Item(CStr(Index))
  204.     board_.RemoveUsingKey(CStr(Index))
  205. End Sub
  206.  
  207.