2017-09-09 1 views
1

Ich fand diese Implementierung zu Conway's Game of Life. Ich habe nie mit GUI zu tun, und ich versuche, diesen Code zu verstehen (und implementieren meine eigenen)Python Spiel des Lebens Zeichenfunktion (Turtle) (Aufruf einer Instanz Methode?)

gibt es eine spezielle Funktion, die mich bugs. die Funktion, die jeden "Organismus" anzieht (Schwarz ist lebendig, Weiß ist tot).

# import turtle (at the top) 
def draw(self, x, y): 
    "Update the cell (x,y) on the display." 
    turtle.penup() 
    key = (x, y) 
    if key in self.state: 
     turtle.setpos(x*CELL_SIZE, y*CELL_SIZE) 
     turtle.color('black') 
     turtle.pendown() 
     turtle.setheading(0) 
     turtle.begin_fill() 
     for i in range(4): 
      turtle.forward(CELL_SIZE-1) 
      turtle.left(90) 
     turtle.end_fill() 

Und dies ist die Funktion, die das ganze Brett zeigt: def Display (self):

"""Draw the whole board""" 
turtle.clear() 
for i in range(self.xsize): 
    for j in range(self.ysize): 
     self.draw(i, j) 
turtle.update() 

Der Code funktioniert natürlich, aber Intellij sagt, dass er nicht Bezug finden kann ALLE diese Funktionen. Ich denke es liegt daran, dass es eine Instanzmethode aufruft, als eine Klassenmethode und das Selbst fehlt.

  1. Ich verstehe nicht, wie es funktioniert.
  2. Wie kann ich es beheben? Ich habe versucht, eine neue Schildkröte zu machen, aber es hat nicht funktioniert (und meiner Meinung nach keine gute Idee). Vielleicht sollte ich eine Turtle als Argument in die Funktionen setzen?

Stuck auf diesem einen seit Stunden. Würde etwas Hilfe lieben.

+0

ist dieser Code in einer Klasse? Wenn ja, können wir den Klassencode haben? – notcompletelyrational

+0

Drücken Sie den Link im ersten Satz - Conways Spiel des Lebens. (http://fiftyexamples.readthedocs.io/en/latest/life.html) – TheCrystalShip

Antwort

2

Intellij sagt, dass er nicht Bezug auf all diesen Funktionen

Die Schildkröte Modul ist ein ungeradeer Vogel finden. (Entschuldigen Sie die gemischte Metapher.) Es wird versucht, verschiedene Dinge für verschiedene Zielgruppen zu sein, und das führt zu Verwirrung:

1) Funktion vs. Methoden

Turtle ist ein objektorientiertes Modul, in dem Sie Instanzen von Schildkröten erstellen & Bildschirm und rufen Methoden auf sie:

screen = turtle.Screen() 
screen.setworldcoordinates(0, 0, xsize, ysize) 

yertle = turtle.Turtle() 
yertle.forward(100) 

jedoch zur Aufnahme Programmierer beginnen und/oder andere Schildkröte Sprachen emulieren, sondern bietet auch eine funktionale Schnittstelle:

turtle.setworldcoordinates(0, 0, xsize, ysize) 
turtle.forward(100) # move the "default" turtle forward 

Um Verwechslungen Funktionen und Methoden zu vermeiden, empfehle ich Schildkröte auf diese Weise importieren:

from turtle import Turtle, Screen 

, die nur die Objektschnittstelle und nicht die Funktion eines ermöglicht.

Die IntelliJ-Warnung tritt auf, weil die funktionale Schnittstelle zu Turtle dynamisch von der Objektmethodenschnittstelle beim Laden abgeleitet wird - es gibt keine tatsächlichen Funktionen, auf die in der Datei zurückgegriffen werden kann.

2) Eigenständiges vs. Embedded

Die Schildkröte Modul ist in einem größeren tkinter Projekt entweder als Einzellösung oder eingebettet. Wie Sie auf Schildkröten zugreifen und der Bildschirm unterscheidet sich je nachdem, was Sie tun.

Soweit diese Implementierung von Conways Spiel des Lebens geht, verwendet es die funktionale Schnittstelle, wenn es wahrscheinlich das Objekt verwenden sollte und es behandelt das Turtle-Modul als eigenständiges aber dann damit andere Tk-basierte Panels zu öffnen:

from turtle import TK 

sollte es umgekehrt sein. Es gibt keine schnelle Lösung, um dieses Modul anzupassen, jede Turtle- und Tkinter-Referenz müsste untersucht und überdacht werden.

Verwandte Themen