Advertisement
Guest User

Untitled

a guest
Dec 1st, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. from tkinter import Tk, Frame, Canvas
  2.  
  3. class GameOfLife:
  4.  
  5. def __init__(self, originalarray):
  6.  
  7. self.original = originalarray
  8. self.size = len(originalarray)
  9.  
  10. i = 0
  11. self.copy = []
  12. while (i < self.size):
  13. self.copy.append([0] * self.size)
  14. i = i + 1
  15.  
  16.  
  17. def iterate(self):
  18. c = 0
  19. r = 0
  20. while (r < self.size):
  21. while(c < self.size):
  22. if (self.original[r][c] == 1 and self.isAlive(self.original, r, c)):
  23. self.copy[r][c] = 1
  24. elif (self.original[r][c] == 0 and self.isBorn(self.original, r, c)):
  25. self.copy[r][c] = 1
  26. else:
  27. self.copy[r][c] = 0
  28. c = c + 1
  29. c = 0
  30. r = r + 1
  31. temp = self.original
  32. self.original = self.copy
  33. self.copy = temp
  34.  
  35. def isAlive(self, array, c, r):
  36. alive = 0
  37. if (c + 1 < self.size):
  38. if (r + 1 < self.size and array[c + 1][r + 1]):
  39. alive = alive + 1
  40. if (array[c + 1][r]):
  41. alive = alive + 1
  42. if (r >= 0 and array[c + 1][r - 1]):
  43. alive = alive + 1
  44. if alive > 3:
  45. return 0
  46. if (r + 1 < self.size and array[c][r + 1]):
  47. alive = alive + 1
  48. if alive > 3:
  49. return 0
  50. if (r >= 0 and array[c][r - 1]):
  51. alive = alive + 1
  52. if alive > 3:
  53. return 0
  54. if (c >= 0):
  55. if (r + 1 < self.size and array[c - 1][r + 1]):
  56. alive = alive + 1
  57. if alive > 3:
  58. return 0
  59. if (array[c - 1][r]):
  60. alive = alive + 1
  61. if alive > 3:
  62. return 0
  63. if (r >= 0 and array[c - 1][r - 1]):
  64. alive = alive + 1
  65. return alive == 2 or alive == 3
  66.  
  67. def isBorn(self, array, c, r):
  68. alive = 0
  69. if (c + 1 < self.size):
  70. if (r + 1 < self.size and array[c + 1][r + 1]):
  71. alive = alive + 1
  72. if (array[c + 1][r]):
  73. alive = alive + 1
  74. if (r >= 0 and array[c + 1][r - 1]):
  75. alive = alive + 1
  76. if (r + 1 < self.size and array[c][r + 1]):
  77. alive = alive + 1
  78. if alive > 3:
  79. return 0
  80. if (r >= 0 and array[c][r - 1]):
  81. alive = alive + 1
  82. if alive > 3:
  83. return 0
  84. if (c >= 0):
  85. if (r + 1 < self.size and array[c - 1][r + 1]):
  86. alive = alive + 1
  87. if alive > 3:
  88. return 0
  89. if (array[c - 1][r]):
  90. alive = alive + 1
  91. if alive > 3:
  92. return 0
  93. if (r >= 0 and array[c - 1][r - 1]):
  94. alive = alive + 1
  95. return alive == 3
  96.  
  97. class Window:
  98. def __init__(self, master):
  99. self.frame = Frame(master, width=1200, height=1200)
  100. self.frame.pack()
  101. self.rectSize = 5
  102.  
  103. # self.button = Button(self.frame, text="Iterate", fg="red", command=self.iterate)
  104. # self.button.pack(side=TOP)
  105.  
  106. self.canvas = Canvas(self.frame, width=1200, height=1200)
  107. self.canvas.pack()
  108.  
  109. def drawRect(self, x, y, color):
  110. realX = x * self.rectSize
  111. realY = y * self.rectSize
  112. self.canvas.create_rectangle(realX, realY, realX + self.rectSize, realY + self.rectSize, fill=color)
  113.  
  114. def drawList(self, array, oldArray):
  115. c = 0
  116. r = 0
  117. length = len(array)
  118. while (r < length):
  119. while(c < length):
  120. if (array[r][c]):
  121. if (oldArray[r][c] == 0):
  122. self.drawRect(c, r, 'black')
  123. elif (oldArray[r][c] == 1):
  124. self.drawRect(c, r, 'white')
  125. c = c + 1
  126. c = 0
  127. r = r + 1
  128.  
  129. def drawAllList(self, array):
  130. c = 0
  131. r = 0
  132. for col in array:
  133. for row in col:
  134. if (row):
  135. self.drawRect(c, r, 'black')
  136. else:
  137. self.drawRect(c, r, 'white')
  138. c = c + 1
  139. c = 0
  140. r = r + 1
  141.  
  142. if __name__ == "__main__":
  143. root = Tk()
  144. root.minsize(300, 300)
  145. root.geometry("500x500")
  146. i = 0
  147. # Acorn
  148. original = []
  149. while (i < 100):
  150. original.append([0] * 100)
  151. i = i + 1
  152. original[51][50] = 1
  153. original[52][50] = 1
  154. original[55][50] = 1
  155. original[56][50] = 1
  156. original[57][50] = 1
  157. original[52][52] = 1
  158. original[54][51] = 1
  159. app = GameOfLife(original)
  160. window = Window(root)
  161. i = 0
  162. def callback():
  163. app.iterate()
  164. window.drawList(app.original, app.copy)
  165. root.after(1, callback)
  166.  
  167. root.after(1, callback)
  168. window.drawAllList(app.original)
  169. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement