home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / TicTacToe_Game.sru < prev    next >
Text File  |  1997-09-30  |  6KB  |  259 lines

  1. $PBExportHeader$tictactoe_game.sru
  2. $PBExportComments$Generated by ObjectTeam
  3. forward
  4. global type tictactoe_game from nonvisualobject
  5. end type
  6. end forward
  7.  
  8. shared variables
  9. // User defined attributes
  10.  
  11. // Non modeled user defined attributes
  12.  
  13. end variables
  14.  
  15. global type tictactoe_game from nonvisualobject
  16. end type
  17. global tictactoe_game tictactoe_game
  18.  
  19. type variables
  20. // User defined attributes
  21. integer turnNumber
  22. string players = 'XO'
  23. string drawText = 'It~'s a draw!!!'
  24. string winText = ' is the winner!!!'
  25.  
  26. // Association attributes
  27. public tictactoe_gui gui
  28. private classdict boardDict
  29.  
  30. // Non modeled user defined attributes
  31.  
  32. // Control to class mappings
  33. //    tictactoe_game --> TicTacToe_Game
  34. end variables
  35.  
  36. forward prototypes
  37. public subroutine createCells ()
  38. public subroutine connectCells ()
  39. public subroutine startGame ()
  40. public subroutine clearBoard ()
  41. public subroutine checkResult (integer number)
  42. public subroutine selectCell (integer number)
  43. public function string getActivePlayer ()
  44. public subroutine removeGui ()
  45. public subroutine setGui (tictactoe_gui newGui)
  46. public function tictactoe_gui getGui ()
  47. public function tictactoe_cell getBoard (integer Index)
  48. public subroutine setBoard (integer Index, tictactoe_cell newBoard)
  49. public subroutine removeBoard (integer Index)
  50. end prototypes
  51.  
  52. public subroutine createCells ();//
  53. tictactoe_cell aCell
  54. integer i
  55.  
  56. FOR i = 1 TO 9
  57.     aCell = create tictactoe_cell
  58.     setBoard(i,aCell)
  59. NEXT
  60. end subroutine
  61.  
  62. public subroutine connectCells ();//
  63. integer N, S, E, W, MN, MS
  64. integer i
  65. tictactoe_cell cell
  66. string dirs
  67. N = -3
  68. S = -N
  69. E =  1
  70. W = -E
  71. MN = Abs(N)
  72. MS = MN^2 - MN
  73.  
  74.  
  75.  
  76.  
  77. FOR i = 1 TO 9
  78.     dirs = ""
  79.     cell = getboard(i)
  80.     cell.setneighbour('N', getBoard(i + N))
  81.     IF (Mod(i, MN) <> 0) THEN
  82.         cell.setNeighbour('NE', getBoard(i + N + E))
  83.         cell.setNeighbour('E', getBoard(i + E))
  84.         cell.setNeighbour('SE', getBoard(i + S + E))
  85.     END IF
  86.     cell.setNeighbour('S', getBoard(i + S))
  87.     IF (Mod(i, MN) <> 1) THEN
  88.         cell.setNeighbour('NW', getBoard(i + N  + W))
  89.         cell.setNeighbour('W', getBoard(i + W))
  90.         cell.setNeighbour('SW', getBoard(i + S + W))
  91.     END IF
  92. NEXT
  93.  
  94.  
  95.  
  96.  
  97. /*
  98. FOR i = 1 TO 9
  99.     dirs = ""
  100.     cell = getboard(i)
  101.     IF (i > MN) THEN
  102.         // not most north row
  103.         cell.setneighbour('N', getBoard(i + N))
  104.         dirs = dirs + ' N' + string(i + N)
  105.     END IF
  106.     IF (Mod(i, MN) <> 0) THEN
  107.         // not most east column
  108.         IF (i > MN) THEN
  109.             cell.setNeighbour('NE', getBoard(i + N + E))
  110.             dirs = dirs + ' NE' + string(i + N + E)
  111.         END IF
  112.         cell.setNeighbour('E', getBoard(i + E))
  113.         dirs = dirs + ' E' + string(i + E)
  114.         IF (i <= MS) THEN
  115.             cell.setNeighbour('SE', getBoard(i + S + E))
  116.             dirs = dirs + ' SE' + string(i + S + E)
  117.         END if
  118.     END IF
  119.     IF (i <= MS) THEN
  120.         // not most south row
  121.         cell.setNeighbour('S', getBoard(i + S))
  122.         dirs = dirs + ' S' + string(i + S)
  123.     END IF
  124.     IF (Mod(i, MN) <> 1) THEN
  125.         // not most west row
  126.         IF (i > MN) THEN 
  127.             cell.setNeighbour('NW', getBoard(i + N  + W))
  128.             dirs = dirs + ' NW' + string(i + N + W)
  129.         END IF
  130.         cell.setNeighbour('W', getBoard(i + W))
  131.         dirs = dirs + ' W' + string(i + W)
  132.         IF (i <= MS) THEN 
  133.             cell.setNeighbour('SW', getBoard(i + S + W))
  134.             dirs = dirs + ' SW' + string(i + S + W)
  135.         END IF
  136.     END IF
  137.     messagebox("ttt_c:connectcells", "i:"+string(i)+"dirs:"+dirs+"~nmod:"+string(Mod(i, MN)))
  138.  
  139. NEXT
  140. */
  141.  
  142. end subroutine
  143.  
  144. public subroutine startGame ();//
  145. turnnumber = 0
  146. gui.clearboard()
  147. this.clearboard()
  148. gui.enableboard()
  149. gui.displayResult('')
  150. end subroutine
  151.  
  152. public subroutine clearBoard ();//
  153. tictactoe_cell cell
  154. integer i
  155. FOR i = 1 TO (boardDict.size())
  156.     cell = getboard(i)
  157.     cell.contents = ' '
  158. NEXT
  159. end subroutine
  160.  
  161. public subroutine checkResult (integer number);//
  162. tictactoe_cell cell
  163. cell = getBoard(number)
  164.  
  165. IF (cell.getMaxLine() = 3) THEN
  166.     gui.disableBoard()
  167.     gui.displayResult(getActivePlayer() + wintext)
  168. ELSEIF (turnnumber = (9 - 1)) THEN
  169.     gui.disableBoard()
  170.     gui.displayResult(drawtext)
  171. END IF
  172. turnnumber = turnnumber + 1
  173.     
  174.     
  175. end subroutine
  176.  
  177. public subroutine selectCell (integer number);// 
  178. tictactoe_cell cell
  179. cell = getboard(number)
  180. cell.contents = getActivePlayer()
  181. checkResult(number)
  182. end subroutine
  183.  
  184. public function string getActivePlayer ();//
  185. // messagebox("ttt_g", "players:"+ players +"~nturnnumber:"+string(turnnumber) +"~nLen:"+string(Len(players)) +"~nMod:"+string(Mod(turnnumber, Len(players))) +"~nMid:"+Mid(players, Mod(turnnumber, Len(players)) + 1, 1) )
  186. return Mid(players, Mod(turnnumber, Len(players)) + 1, 1)
  187. end function
  188.  
  189. public subroutine removeGui ();// Association accessor method
  190. if not isNull(gui) then
  191.     setNull(gui.game)
  192. end if
  193. setNull(gui)
  194. end subroutine
  195.  
  196. public subroutine setGui (tictactoe_gui newGui);// Association accessor method
  197. if not isNull(gui) then
  198.     setNull(gui.game)
  199. end if
  200. if not isNull(newGui) then
  201.     TicTacToe_Game nullRef
  202.     setNull(nullRef)
  203.     newGui.setGame(nullRef)
  204.     newGui.game = this
  205. end if
  206. gui = newGui
  207. end subroutine
  208.  
  209. public function tictactoe_gui getGui ();// Association accessor method
  210. return gui
  211. end function
  212.  
  213. public function tictactoe_cell getBoard (integer Index);// Association accessor method
  214. return boardDict.get(Index)
  215. end function
  216.  
  217. public subroutine setBoard (integer Index, tictactoe_cell newBoard);// Association accessor method
  218. if isNull(newBoard) then
  219.     return
  220. end if
  221. boardDict.set(Index, newBoard)
  222. end subroutine
  223.  
  224. public subroutine removeBoard (integer Index);// Association accessor method
  225. powerobject object
  226. object = boardDict.get(Index)
  227. if isNull(object) then
  228.     return
  229. end if
  230. boardDict.remove(Index)
  231. end subroutine
  232.  
  233. on tictactoe_game.create
  234. TriggerEvent( this, "constructor" )
  235. end on
  236.  
  237. on tictactoe_game.destroy
  238. TriggerEvent( this, "destructor" )
  239. end on
  240.  
  241. event constructor;setNull(gui)
  242. boardDict = create classdict
  243. // Start user code section
  244. this.createcells()
  245. this.connectcells()
  246. // End user code section
  247. end event
  248.  
  249. event destructor;// Start user code section
  250. // End user code section
  251. if not isNull(gui) then
  252.     setNull(gui.game)
  253. end if
  254. setNull(gui)
  255. destroy(boardDict)
  256. setNull(boardDict)
  257. end event
  258.  
  259.