Advertisement
Guest User

v1.5 Usage of Arrays, removed unnecessary recursion

a guest
Feb 22nd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.03 KB | None | 0 0
  1. import turtle
  2. import math
  3.  
  4. class TicTacToeGame():
  5. def __init__(self):
  6. self.board_drawer = turtle.Turtle()
  7. self.screen_width = turtle.Screen().window_width()
  8. self.screen_height = turtle.Screen().window_height()
  9. self.setScale()
  10. self.square_size = self.box_size / 3
  11. self.total_squares = 9
  12. self.width = 1
  13. self.height = 1
  14. self.board = {}
  15. self.board_xcor = turtle.Screen().window_width() / -5.5
  16. self.board_ycor = turtle.Screen().window_height() / 2.5
  17. self.drawGrid()
  18. self.registerShapes()
  19. self.scoreturtle = turtle.Turtle()
  20. self.scoreturtle.ht()
  21.  
  22. def setScale(self):
  23. if self.screen_width < self.screen_height:
  24. self.box_size = self.screen_width / 1.5
  25. else:
  26. self.box_size = self.screen_height / 1.5
  27.  
  28. def gameover(self):
  29. turtle.Screen().resetscreen()
  30. self.scoreturtle.speed(0)
  31. self.scoreturtle.ht()
  32. self.scoreturtle.penup()
  33. self.scoreturtle.setposition(0, 0)
  34. self.scoreturtle.write("Game Over!", False, align="center", font=("Arial", 32, "normal"))
  35. self.obstacles = {}
  36. self.food = {}
  37. self.ghosts = []
  38. self.gameOver = True
  39.  
  40. def registerShapes(self):
  41. screen = turtle.Screen()
  42. q = 5 * self.square_size / 12
  43. screen.register_shape("X", (
  44. (0, 0),
  45. (-q, -q),
  46. (q, q),
  47. (0, 0),
  48. (-q, q),
  49. (q, -q)))
  50. screen.register_shape("O", (
  51. (q, 0),
  52. (0.9659 * q, 0.2588 * q),
  53. (0.8660 * q, 0.5 * q),
  54. (0.7071 * q, 0.7071 * q),
  55. (0.5 * q, 0.8660 * q),
  56. (0.2588 * q, 0.9659 * q),
  57. (0, q),
  58. (-0.2588 * q, 0.9659 * q),
  59. (-0.5 * q, 0.8660 * q),
  60. (-0.7071 * q, 0.7071 * q),
  61. (-0.8660 * q, 0.5 * q),
  62. (-0.9659 * q, 0.2588 * q),
  63. (-q, 0),
  64. (-0.9659 * q, -0.2588 * q),
  65. (-0.8660 * q, -0.5 * q),
  66. (-0.7071 * q, -0.7071 * q),
  67. (-0.5 * q, -0.8660 * q),
  68. (-0.2588 * q, -0.9659 * q),
  69. (0, -q),
  70. (0.2588 * q, -0.9659 * q),
  71. (0.5 * q, -0.8660 * q),
  72. (0.7071 * q, -0.7071 * q),
  73. (0.8660 * q, -0.5 * q),
  74. (0.9659 * q, -0.2588 * q)))
  75.  
  76. def drawGrid(self):
  77. self.board_drawer.penup()
  78. self.board_drawer.ht()
  79. self.board_drawer.speed(0)
  80. self.board_drawer.setpos(self.board_xcor,
  81. self.board_ycor)
  82. self.board_drawer.pendown()
  83. self.board_drawer.forward(self.box_size * self.width)
  84. self.board_drawer.right(90)
  85. self.board_drawer.forward(self.box_size * self.height)
  86. self.board_drawer.right(90)
  87. self.board_drawer.forward(self.box_size * self.width)
  88. self.board_drawer.right(90)
  89. self.board_drawer.forward(self.box_size * self.height)
  90. self.board_drawer.penup()
  91. self.board_drawer.right(90)
  92. self.board_drawer.forward(self.square_size * self.width)
  93. self.board_drawer.pendown()
  94. self.board_drawer.right(90)
  95. self.board_drawer.forward(self.box_size * self.height)
  96. self.board_drawer.penup()
  97. self.board_drawer.left(90)
  98. self.board_drawer.forward(self.square_size * self.width)
  99. self.board_drawer.pendown()
  100. self.board_drawer.left(90)
  101. self.board_drawer.forward(self.box_size * self.height)
  102. self.board_drawer.penup()
  103. self.board_drawer.right(90)
  104. self.board_drawer.forward(self.square_size * self.width)
  105. self.board_drawer.right(90)
  106. self.board_drawer.forward(self.square_size * self.height)
  107. self.board_drawer.pendown()
  108. self.board_drawer.right(90)
  109. self.board_drawer.forward(self.box_size * self.width)
  110. self.board_drawer.penup()
  111. self.board_drawer.left(90)
  112. self.board_drawer.forward(self.square_size * self.height)
  113. self.board_drawer.pendown()
  114. self.board_drawer.left(90)
  115. self.board_drawer.forward(self.box_size * self.width)
  116.  
  117. def moveObject(self, obj, width, height):
  118. obj.setpos(((turtle.Screen().window_width() / -5.5) + self.square_size / 2 + self.square_size * (width - 1)),
  119. (((turtle.Screen().window_height() / 2.5) - self.square_size / 2 - self.square_size * (height - 1))))
  120. return
  121.  
  122. def createX(self, width, height):
  123. x = turtle.Turtle()
  124. x.speed(0)
  125. x.shape("X")
  126. x.penup()
  127. self.moveObject(x, width, height)
  128. store_val = (width * 10) + height
  129. self.moveObject(x, width, height)
  130. self.board[store_val] = ["x"]
  131. return
  132.  
  133. def createO(self, width, height):
  134. o = turtle.Turtle()
  135. o.speed(0)
  136. o.shape("O")
  137. o.fillcolor("white")
  138. o.penup()
  139. store_val = (width * 10) + height
  140. self.moveObject(o, width, height)
  141. self.board[store_val] = ["o"]
  142. return
  143.  
  144. def getSquare(self, width, height):
  145. store_val = (width * 10) + height
  146. return self.board[store_val]
  147.  
  148. def checkFilled(self, width, height):
  149. store_val = (width * 10) + height
  150. if store_val in self.board:
  151. return True
  152. else:
  153. return False
  154.  
  155. def doNothing(self):
  156. self.trasht.ht()
  157.  
  158. game = TicTacToeGame()
  159. screen = turtle.Screen()
  160. mainTurn = True
  161. xcor = game.board_xcor
  162. ycor = game.board_ycor
  163. sq_size = game.square_size
  164.  
  165. boardstate = []
  166. boardstate.append([0, 0, 0])
  167. boardstate.append([0, 0, 0])
  168. boardstate.append([0, 0, 0])
  169. # 0 -> empty
  170. # 1 -> filled with X
  171. # 2 -> filled with O
  172.  
  173.  
  174. def checkStatus():
  175. #checks if rows are matching
  176. for i in range(3):
  177. if not boardstate[i][0] == 0:
  178. if boardstate[i][0] == boardstate[i][1] and boardstate[i][0] == boardstate[i][2]:
  179. game.gameover()
  180. #checks if columns are matching
  181. for j in range(3):
  182. if not boardstate[0][j] == 0:
  183. if boardstate[0][j] == boardstate[1][j] and boardstate[0][j] == boardstate[2][j]:
  184. game.gameover()
  185. #checks if diagonals are matching
  186. if not boardstate[0][0] == 0:
  187. if boardstate[0][0] == boardstate[1][1] and boardstate[0][0] == boardstate[2][2]:
  188. game.gameover()
  189. if not boardstate[2][0] == 0:
  190. if boardstate[2][0] == boardstate[1][1] and boardstate[2][0] == boardstate[0][2]:
  191. game.gameover()
  192. #if entire board is filled, tied
  193. for k in range(3):
  194. for l in range(3):
  195. if not boardstate[k][l] == 0:
  196. checker += 1
  197. if checker == 9:
  198. game.gameover()
  199.  
  200. def makeMove(width, height):
  201. global mainTurn
  202. global boardstate
  203. #checks if moving position is already full
  204. if not boardstate[height-1][width-1] == 0:
  205. print "Not a valid move!"
  206. else:
  207. #checks if its X's turn
  208. if mainTurn:
  209. game.createX(width, height)
  210. mainTurn = False
  211. boardstate[height-1][width-1] = 1
  212. checkStatus()
  213. else:
  214. #else it's O's turn
  215. game.createO(width, height)
  216. mainTurn = True
  217. boardstate[height-1][width-1] = 2
  218. checkStatus()
  219.  
  220. def checkMove(x, y):
  221. #makes sure the click is a valid move
  222. width = (int) (math.floor((x - xcor)/sq_size) + 1)
  223. height = (int) (math.floor((ycor - y)/sq_size) + 1)
  224. if 1 <= width and width <= 3:
  225. if 1 <= height and height <= 3:
  226. makeMove(width, height)
  227.  
  228. screen.onclick(checkMove)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement