Game Of Life - Martins Homepage

Direkt zum Seiteninhalt

Hauptmenü:

Game Of Life

Programmierkurs > Unterrichtsprojekte

Dieses Spiel von John Conway sollte jeder einmal programmiert haben. Besonders leicht fällt es mit Python, wobei Tkinter als GUI-Bibliothek fungiert.
Als Programmierumgebung eignen sich die (kostenlosen) IDEs Thonny und PyCharm.

Wer von den "alten Hasen" glaubt, schon alles Interessante über dieses Thema zu kennen, dem sei dieses Video empfohlen: Game Of Life implementiert mit Game Of Life!

Damit der Start mit Python und Tkinter leicht fällt, hier ein paar Vorgaben (Python 3). Auszufüllende Leerstellen sind mit ... gekennzeichnet. Insgesamt benötigt man etwa 150 Zeilen Code.

import tkinter as tk

...

def drawCell(row, col, alive):
...
   canvas.create_rectangle(x0, y0, x1, y1, fill=color, outline=color)

def drawWorld():
   drawn = canvas.find_all()
   # print len(drawn)
   for d in drawn:
       canvas.delete(d)
...
   drawCell(row, col, alive)

def flipCell(event):
   global cells
   cmdStop()
   col = event.x ...
   row = event.y ...
...

def generate():
...
   if running:
       after_id = canvas.after(3, generate)

def cmdStop():
   global running
   if running:
       running = False

############### main ###################
# init GUI
gui = tk.Tk()
gui.title('Game of Life')
frame = tk.Frame(gui)
frame.pack()
canvasSide = CELL_DIST + WORLD_SIDE * (CELL_SIDE + CELL_DIST)
canvas = tk.Canvas(frame, width=canvasSide, height=canvasSide, bg="gray")
canvas.pack()

# init world
row = ["-" for _ in range(WORLD_SIDE)]
for _ in range(WORLD_SIDE):
   cells_A.append(row[:])
   cells_B.append(row[:])

cells = cells_A
drawWorld()

# make interactive
canvas.bind('<Button-1>', flipCell)

runButton = tk.Button(frame, text="Run", command=cmdRun)
runButton.pack("side": "left")

stopButton = tk.Button(frame, text="Stop", command=cmdStop)
stopButton.pack("side": "left")

stepButton = tk.Button(frame, text="Step", command=cmdStep)
stepButton.pack("side": "left")

clearButton = tk.Button(frame, text="Clear", command=cmdClear)
clearButton.pack("side": "left")

gui.mainloop()



Das komplette Programm kann man hier herunterladen.






 
Zurück zum Seiteninhalt | Zurück zum Hauptmenü