[PYTHON] Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird

Nachdem ich nach Paizas Python-Kurs gesucht hatte, was ich bei Google machen sollte, wie man ein Lebensspiel in [Python ab Null] von My Navi News (https://news.mynavi.jp/article/zeropython-) erstellt. Da es 9 /) gab, habe ich versucht, ein Lebensspiel manuell zu aktualisieren, indem ich darauf Bezug genommen habe.

Bei der Ausführung wird der folgende schwarze Bildschirm angezeigt: image.png

Klicken Sie hier, um Zellen zu platzieren oder abzubrechen. Das Folgende ist die Anordnung namens [Pentadecaslon] image.png

Wird jedes Mal aktualisiert, wenn die [Eingabetaste] gedrückt wird. image.png

Die Anordnung von [Pentadecaslon] wiederholt sich in regelmäßigen Abständen und geht nicht zugrunde, Durch Hinzufügen einer Zelle in der Mitte image.png Das Gleichgewicht geht verloren und eine neue Form entsteht. image.png

import tkinter as tk

WIDTH, HEIGHT = 600, 400  #Leinwandgröße
cell = {'size': 20, 'color': 'green'}  #Zellinformationen
COLS, ROWS = WIDTH//cell['size'], HEIGHT//cell['size']  #Anzahl der Spalten und Zeilen von Canvas
data = [[False for x in range(COLS)] for y in range(ROWS)]  #Existenz der Zelle

win = tk.Tk()
win.title('LifeGame')

#Anzahl der Generierungsaktualisierungen
text = tk.StringVar()  #Widget-Variable, die die Zeichenfolge enthält
update = 0  #Anfangswert der Aktualisierungsanzahl
text.set(update)  #Legen Sie die Anzahl der Updates fest
label = tk.Label(win, textvariable=text,  font=('IPAex Gothic', '24'))
label.pack()

#Canvas-Einstellungen
cv = tk.Canvas(win, width=WIDTH, height=HEIGHT, bg='black')
cv.pack()


#Zeichnen Sie Linien in einem Raster, um das Anordnen von Zellen zu vereinfachen
def draw_grid():
    for x in range(COLS):
        x1 = x * cell['size']
        cv.create_line(x1, 0, x1, HEIGHT, fill='white')
    for y in range(ROWS):
        y1 = y * cell['size']
        cv.create_line(0, y1, WIDTH, y1, fill='white')


#Platzieren und löschen Sie Zellen mit einem Mausklick
def place_cells(e):
    draw_grid()
    #Berechnen Sie den Index, um die Zelle aus den angeklickten Koordinaten zu zeichnen
    x, y = e.x // cell['size'], e.y // cell['size']
    #Löschen Sie die bereits gezeichnete Zelle.
    if data[y][x]:
        cv.delete('current')
        data[y][x] = False
    #Zeichne eine Zelle.
    else:
        x1, y1 = x * cell['size'], y * cell['size']
        cv.create_oval(x1, y1, x1+cell['size'], y1+cell['size'], fill=cell['color'])
        data[y][x] = True


cv.bind('<Button>', place_cells)  #Wenn Canvas angeklickt wird


#Das Schicksal der nächsten Generation hängt davon ab, wie viele Zellen um Sie herum leben
def check_cells(x, y):
    #Relative Koordinaten der umgebenden Zellen
    tbl = [(-1, -1), (0, -1), (1, -1), (1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0)]
    cnt = 0  #Anzahl lebender Zellen
    #Überprüfen Sie die umgebenden Zellen nacheinander
    for t in tbl:
        xx, yy = x + t[0], y + t[1]  #Berechnen Sie den absoluten Wert der umgebenden Zellen.
        if not 0 <= xx < COLS or not 0 <= yy < ROWS:
            continue
        if data[yy][xx]:
            cnt += 1  #Zählen Sie, ob die umgebenden Zellen leben.

    if cnt == 3:
        return True  #Geburt
    if data[y][x]:  #Wenn du lebst
        if 2 <= cnt <= 3:
            return True  #Überleben
        return False  #Überfüllt und entvölkert
    return data[y][x]  #Behalten Sie den Status Quo bei


#Finden Sie das Schicksal der nächsten Generation von Zellen heraus.
def next_turn(e):
    global data
    global update
    #Speichern Sie die aktualisierten Daten um 1 Uhr
    data2 = [[check_cells(x, y) for x in range(COLS)] for y in range(ROWS)]
    data = data2  #Daten aktualisieren
    update += 1  #Zählen Sie die Anzahl der Updates
    text.set(update)  #Aktualisieren Sie die Anzahl der Generationen
    draw()


win.bind('<Return>', next_turn)  #Wenn die Eingabetaste gedrückt wird


#Zeichne eine Zelle.
def draw():
    cv.delete('all')
    for y in range(ROWS):
        for x in range(COLS):
            if data[y][x]:
                x1, y1 = x * cell['size'], y * cell['size']
                cv.create_oval(x1, y1, x1+cell['size'], y1+cell['size'], fill=cell['color'])


win.mainloop()

Lebensspiele scheinen verschiedene Muster zu haben. https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0 image.png

Recommended Posts

Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird
[Lernrekord] Erstelle mit Pyhtons Tkinter ein mysteriöses Dungeon-Spiel
Erstellen Sie eine GUI-App mit Tkinter of Python
Ich habe ein Lebensspiel mit Numpy gemacht
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Erstellen Sie eine mit tkinter erstellte ausführbare GUI-Datei
Erstelle mit pygame2 eine neue Benutzeroberfläche!
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Erstellen Sie eine Matrix mit PythonGUI (tkinter-Kombinationsfeld)
Erstellen Sie eine gefälschte Klasse, die auch betrügt, ist Instanz
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
Erstellen Sie einen Chatbot, der die kostenlose Eingabe mit Word2Vec unterstützt
Ich möchte manuell eine Legende mit matplotlib erstellen
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Erstellen Sie eine PythonBox, die nach der PEPPER-Eingabe mit Random ausgegeben wird
[Python] Erstellen Sie mit tkinter einen Bildschirm zur Datei- und Ordnerpfadspezifikation
Generieren Sie mit apg ein leicht zu merkendes Passwort
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Erstellen Sie eine Homepage mit Django
Erstellen Sie den Image Viewer mit Tkinter
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Erstellen Sie ein Verzeichnis mit Python
Lebensspiel mit Python [ich habe es geschafft] (auf Terminal & Tkinter)
Erstellen Sie mit Selenium ein Programm, mit dem Sie Ihr Lieblingsbild erstellen können
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
[Python] Was ist eine with-Anweisung?
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie eine virtuelle Umgebung mit Python!
Lebensspiel mit Python! (Conways Spiel des Lebens)
Zura machte wie ein Lebensspiel
Erstellen Sie einen Poisson-Stepper mit numpy.random
Erstellen Sie mit Django einen Datei-Uploader
Erstellen Sie einen BOT, der mit Discord registrierte Bilder wie Piktogramme aufrufen kann
Erstellen Sie eine Web-App, die mit Plotly Dash einfach visualisiert werden kann
Erstellen Sie mit Class einen Python-Funktionsdekorator
[Python] Ein Programm, das Treppen mit # erstellt
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie mit Python + PIL ein Dummy-Image.
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie eine große Textdatei mit Shellscript
Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
VM mit YAML-Datei (KVM) erstellen
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie ein neues Diktat, das Diktate kombiniert
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Lebe ein typenloses Twitter-Leben mit Alexa
[Python] Erstellen Sie einen LineBot, der regelmäßig ausgeführt wird
Erstellen Sie mit NetworkX einen verbindenden nächsten Nachbarn