Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import Tk, Frame, Canvas
- class GameOfLife:
- def __init__(self, originalarray):
- self.original = originalarray
- self.size = len(originalarray)
- i = 0
- self.copy = []
- while (i < self.size):
- self.copy.append([0] * self.size)
- i = i + 1
- def iterate(self):
- c = 0
- r = 0
- while (r < self.size):
- while(c < self.size):
- if (self.original[r][c] == 1 and self.isAlive(self.original, r, c)):
- self.copy[r][c] = 1
- elif (self.original[r][c] == 0 and self.isBorn(self.original, r, c)):
- self.copy[r][c] = 1
- else:
- self.copy[r][c] = 0
- c = c + 1
- c = 0
- r = r + 1
- temp = self.original
- self.original = self.copy
- self.copy = temp
- def isAlive(self, array, c, r):
- alive = 0
- if (c + 1 < self.size):
- if (r + 1 < self.size and array[c + 1][r + 1]):
- alive = alive + 1
- if (array[c + 1][r]):
- alive = alive + 1
- if (r >= 0 and array[c + 1][r - 1]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (r + 1 < self.size and array[c][r + 1]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (r >= 0 and array[c][r - 1]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (c >= 0):
- if (r + 1 < self.size and array[c - 1][r + 1]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (array[c - 1][r]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (r >= 0 and array[c - 1][r - 1]):
- alive = alive + 1
- return alive == 2 or alive == 3
- def isBorn(self, array, c, r):
- alive = 0
- if (c + 1 < self.size):
- if (r + 1 < self.size and array[c + 1][r + 1]):
- alive = alive + 1
- if (array[c + 1][r]):
- alive = alive + 1
- if (r >= 0 and array[c + 1][r - 1]):
- alive = alive + 1
- if (r + 1 < self.size and array[c][r + 1]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (r >= 0 and array[c][r - 1]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (c >= 0):
- if (r + 1 < self.size and array[c - 1][r + 1]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (array[c - 1][r]):
- alive = alive + 1
- if alive > 3:
- return 0
- if (r >= 0 and array[c - 1][r - 1]):
- alive = alive + 1
- return alive == 3
- class Window:
- def __init__(self, master):
- self.frame = Frame(master, width=1200, height=1200)
- self.frame.pack()
- self.rectSize = 5
- # self.button = Button(self.frame, text="Iterate", fg="red", command=self.iterate)
- # self.button.pack(side=TOP)
- self.canvas = Canvas(self.frame, width=1200, height=1200)
- self.canvas.pack()
- def drawRect(self, x, y, color):
- realX = x * self.rectSize
- realY = y * self.rectSize
- self.canvas.create_rectangle(realX, realY, realX + self.rectSize, realY + self.rectSize, fill=color)
- def drawList(self, array, oldArray):
- c = 0
- r = 0
- length = len(array)
- while (r < length):
- while(c < length):
- if (array[r][c]):
- if (oldArray[r][c] == 0):
- self.drawRect(c, r, 'black')
- elif (oldArray[r][c] == 1):
- self.drawRect(c, r, 'white')
- c = c + 1
- c = 0
- r = r + 1
- def drawAllList(self, array):
- c = 0
- r = 0
- for col in array:
- for row in col:
- if (row):
- self.drawRect(c, r, 'black')
- else:
- self.drawRect(c, r, 'white')
- c = c + 1
- c = 0
- r = r + 1
- if __name__ == "__main__":
- root = Tk()
- root.minsize(300, 300)
- root.geometry("500x500")
- i = 0
- # Acorn
- original = []
- while (i < 100):
- original.append([0] * 100)
- i = i + 1
- original[51][50] = 1
- original[52][50] = 1
- original[55][50] = 1
- original[56][50] = 1
- original[57][50] = 1
- original[52][52] = 1
- original[54][51] = 1
- app = GameOfLife(original)
- window = Window(root)
- i = 0
- def callback():
- app.iterate()
- window.drawList(app.original, app.copy)
- root.after(1, callback)
- root.after(1, callback)
- window.drawAllList(app.original)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement