vob thonny nach python3
Verfasst: Dienstag 24. März 2020, 20:10
Liebe Helfer, ich bin Python-Anfänger.
Hier meine Version von John Conways "Life": Spielfeld; mit li Maustaste beliebige Felder markieren (1.Generation); mit re Maustaste die folgende "Generation" nach 2 Regeln berechnen und anzeigen.
Meine Fragen:
1. Das Spiel läuft gut unter "thonny", nicht aber im Terminal unter "python3". Woran liegts?
2. Die Funktion "augama" (mit Re-Klick neue Generation erzeugen) würde ich gern als Schleife laufen lassen, um die Generationenfolge quasi als Film darzustellen.Mit einer einfachen while-Schleife klappt das nicht (Zeile57, auskommentiert): Es startet eine Endlosschleife, ohne dass sich die Grafik ändert. Habt Ihr mir Tips für die Schleife?
Vielen Dank!
arkturus
#!/usr/bin/env python3
from tkinter import *
feld = Tk()
#feldgrafik:
canvas_width = 900
canvas_height = 900
w = Canvas(feld, bg="green",
width=canvas_width,
height=canvas_height)
w.pack()
for x in range (0,900,20):
w.create_line(x, 0, x,900, fill="#476042")
for y in range (0,900,20):
w.create_line(0, y, 900,y, fill="#476042")
Gmatrix = [] #feldmatrix
Rmatrix = [] #rechenmatrix
for m in range(45):
t = []
for y in range(45):
t.append(0)
Gmatrix.append(t)
for m in range(45):
t = []
for y in range(45):
t.append(0)
Rmatrix.append(t)
def mmove(event): #ausgangslage markieren mit linksklick
global g
global h
i=int(event.x/20)*20 #feldnummer
j=int(event.y/20)*20
h=int(i/20) #matrixnummer,horizontal
g=int(j/20) #vertikal
if Gmatrix[g][h] == 0:
w.create_rectangle(i,j,i+20,j+20,fill="white")
Gmatrix[g][h] = 1
else:
w.create_rectangle(i,j,i+20,j+20,fill="green",outline="#476042" )
Gmatrix[g][h]= 0
feld.bind('<ButtonRelease-1>', mmove)
def augama(event): #spiel startet mit rechtsklick
# while 1<2:
for g in range (44): #anzahl der nachbarn
for h in range (44):
Rmatrix[g][h] = Gmatrix[g+1][h] + Gmatrix[g-1][h] + Gmatrix[g][h+1] + Gmatrix[g][h-1] + Gmatrix[g+1][h+1] + Gmatrix[g-1][h-1] + Gmatrix[g+1][h-1] + Gmatrix[g-1][h+1]
for g in range ( 45):
for h in range (45):
#lebensbedingungen
if Gmatrix[g][h]== 0 :
if Rmatrix[g][h] == 3:
Gmatrix[g][h] = 1
w.create_rectangle(h*20,g*20,(h+1)*20,(g+1)*20,fill="white")
elif Gmatrix[g][h] == 1:
if Rmatrix[g][h] < 2 or Rmatrix[g][h] > 3 :
Gmatrix[g][h] = 0
w.create_rectangle(h*20,g*20,(h+1)*20,(g+1)*20,fill="green",outline="#476042")
feld.bind('<ButtonRelease-3>', augama)
Hier meine Version von John Conways "Life": Spielfeld; mit li Maustaste beliebige Felder markieren (1.Generation); mit re Maustaste die folgende "Generation" nach 2 Regeln berechnen und anzeigen.
Meine Fragen:
1. Das Spiel läuft gut unter "thonny", nicht aber im Terminal unter "python3". Woran liegts?
2. Die Funktion "augama" (mit Re-Klick neue Generation erzeugen) würde ich gern als Schleife laufen lassen, um die Generationenfolge quasi als Film darzustellen.Mit einer einfachen while-Schleife klappt das nicht (Zeile57, auskommentiert): Es startet eine Endlosschleife, ohne dass sich die Grafik ändert. Habt Ihr mir Tips für die Schleife?
Vielen Dank!
arkturus
#!/usr/bin/env python3
from tkinter import *
feld = Tk()
#feldgrafik:
canvas_width = 900
canvas_height = 900
w = Canvas(feld, bg="green",
width=canvas_width,
height=canvas_height)
w.pack()
for x in range (0,900,20):
w.create_line(x, 0, x,900, fill="#476042")
for y in range (0,900,20):
w.create_line(0, y, 900,y, fill="#476042")
Gmatrix = [] #feldmatrix
Rmatrix = [] #rechenmatrix
for m in range(45):
t = []
for y in range(45):
t.append(0)
Gmatrix.append(t)
for m in range(45):
t = []
for y in range(45):
t.append(0)
Rmatrix.append(t)
def mmove(event): #ausgangslage markieren mit linksklick
global g
global h
i=int(event.x/20)*20 #feldnummer
j=int(event.y/20)*20
h=int(i/20) #matrixnummer,horizontal
g=int(j/20) #vertikal
if Gmatrix[g][h] == 0:
w.create_rectangle(i,j,i+20,j+20,fill="white")
Gmatrix[g][h] = 1
else:
w.create_rectangle(i,j,i+20,j+20,fill="green",outline="#476042" )
Gmatrix[g][h]= 0
feld.bind('<ButtonRelease-1>', mmove)
def augama(event): #spiel startet mit rechtsklick
# while 1<2:
for g in range (44): #anzahl der nachbarn
for h in range (44):
Rmatrix[g][h] = Gmatrix[g+1][h] + Gmatrix[g-1][h] + Gmatrix[g][h+1] + Gmatrix[g][h-1] + Gmatrix[g+1][h+1] + Gmatrix[g-1][h-1] + Gmatrix[g+1][h-1] + Gmatrix[g-1][h+1]
for g in range ( 45):
for h in range (45):
#lebensbedingungen
if Gmatrix[g][h]== 0 :
if Rmatrix[g][h] == 3:
Gmatrix[g][h] = 1
w.create_rectangle(h*20,g*20,(h+1)*20,(g+1)*20,fill="white")
elif Gmatrix[g][h] == 1:
if Rmatrix[g][h] < 2 or Rmatrix[g][h] > 3 :
Gmatrix[g][h] = 0
w.create_rectangle(h*20,g*20,(h+1)*20,(g+1)*20,fill="green",outline="#476042")
feld.bind('<ButtonRelease-3>', augama)