Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- from Tkinter import*
- import random, time
- def newlife():
- print 'New Life!'
- canvas.delete('all')
- condA=[[random.randrange(2) for x in range(n)] for y in range(n)]
- condB=[[0 for x in range(n)] for y in range(n)]
- for x in range(n):
- for y in range(n):
- if condA[x][y]:
- canvas.create_rectangle(x*d, y*d, (x+1)*d, (y+1)*d, width=2, fill='blue')
- else:
- canvas.create_rectangle(x*d, y*d, (x+1)*d, (y+1)*d, width=2, fill='green')
- return (condA, condB)
- def life(condA, condB):
- generation=0
- print 'Generation =',generation
- while generation<10:
- generation+=1
- tk.update_idletasks()
- time.sleep(0.5)
- canvas.delete('all')
- for x in range(n):
- for y in range(n):
- env=0
- if x!=0 and y!=0:
- env+=condA[x-1][y-1]
- if x!=n-1 and y!=n-1:
- env+=condA[x+1][y+1]
- if x!=0 and y!=n-1:
- env+=condA[x-1][y+1]
- if x!=n-1 and y!=1:
- env+=condA[x+1][y-1]
- if x!=0:
- env+=condA[x-1][y]
- if x!=n-1:
- env+=condA[x+1][y]
- if y!=0:
- env+=condA[x][y-1]
- if y!=n-1:
- env+=condA[x][y+1]
- if env==3:
- condB[x][y]=1
- canvas.create_rectangle(x*d, y*d, (x+1)*d, (y+1)*d, width=2, fill='green')
- else:
- condB[x][y]=0
- canvas.create_rectangle(x*d, y*d, (x+1)*d, (y+1)*d, width=2, fill='blue')
- print 'Generation =',generation
- listcompare=0
- for x in range(n):
- for y in range(n):
- if condA[x][y]!=condB[x][y]:listcompare+=1
- if listcompare==0:break
- # condA=condB
- condA=[[condB[x][y] for x in range(n)]for y in range(n)]
- def start():
- condA,condB=newlife()
- life(condA,condB)
- def close():
- quit()
- n,d = 10,15
- tk = Tk()
- frame = Frame(tk, relief=RIDGE, borderwidth=2)
- frame.pack(fill=BOTH,expand=1)
- canvas = Canvas(frame, width=n*d+2, height=n*d+2, bg='white')
- canvas.pack(expand=NO, fill=BOTH)
- button = Button(frame,text="Start",command=start)
- button.pack(side=LEFT)
- button=Button(frame, text="Close", command=close)
- button.pack(side=LEFT)
- tk.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement