Abschnittsübersicht

  • Hervorgehoben

    Die Schlange kann nun über das Spielfeld bewegt werden (sogar über die Spielfeldränder hinaus, aber darum kümmern wir uns später). Bei so viel Bewegung wird die Schlange irgendwann hungrig und braucht Futter. Unter "Futter" verstehen wir Objekte, die auf dem Spielfeld erscheinen. Die Schlange soll dann das Futter "fressen", indem sie auf die Futterposition gesteuert wird.

    • Auch Futter ist ein Turtle()-Objekt im Spiel, so wie der Schlangenkopf.

      Zu Beginn des Programms wird es mit Futter = t.Turtle() erstellt. Wie bei der Schlange auch gibt es eine Funktion initFutter(), mit der die Eigenschaften vom Futter (Farbe, Aussehen, Position) festgelegt wird.

      Statt eines Quadrates als Futter kannst du auch eine Schildkröte anzeigen lassen mit der Futter.shape("turtle"). Es ist aber auch möglich die Schlange Blätter fressen zu lassen. Die Form dafür muss man sich jedoch selbst erzeugen. 

      Die Form des Blattes wird mittels Koordinaten (x, y) erzeugt, dafür wird ein Tuple mit Koordinatenpunkten genutzt. In meinem Codebeispiel werden diese Koordinaten in die Variable blatt_koerper geschrieben.
      Anschließend wird die Form anhand der Koordinaten erzeugt mit t.register_shape('Bezeichnung', Liste mit Koordinaten), damit die Form aufgerufen werden kann, benötigt sie eine Bezeichnung. Ich habe sie in meinem Beispiel blatt genannt. Nun folgt der Aufruf der Form mit shape('blatt'). 

      Hier ein Beispiel dafür:


      Folgend das Anlegen des Futter-Objektes und dessen erster Aufruf.

      Wenn wir unsere Programm nun ausprobieren. Lässt sich die Schlange bewegen und das Futter ist sichtbar, aber das Futter verschwindet noch nicht, wenn die Schlange das Futter erreicht.

    • Wir müssen in unserer while-Schleife noch eine Prüfung bzw. Bedingung einfügen. Wenn die Schlange und das Futter die gleiche Position haben, soll das Futter mit hideturtle() versteckt werden bzw. verschwinden .


    • Das Futter soll ja eigentlich nicht wirklich verschwinden, sondern irgendwo anders auf dem Spielfeld neu erscheinen. Dafür brauchst du Zufallszahlen. 

      Für Zufallszahlen musst du ganz oben im Programmcode ein zweites Modul importieren, das random-Modul. Ergänze deinen Import in deinem Programm mit der Zeile:


      Angenommen, die neue Futterposition hat die Koordinaten fx und fy. Dann kannst du mit Futter.setposition(fx, fy) die Futterkoordinaten neu setzen. Um nun eine passende zufällige Zahl für fx und fy zu erhalten, hilft uns die Funktion randrange(unterGrenze, oberGrenze, Schrittweite). Sie gibt die eine Zufallszahl zwischen den beiden Werten, die du für die unterGrenze und die oberGrenze einsetzt. Die Schrittweite ist ausgehend von der unterGrenze und kann die Zahlen eingrenzen.

      Beispiel: randrange(-4, 8, 2) Es sind Zahlen zwischen -4 und 8, bei 2er-Schritten bleiben nur noch die Zahlen -2, 0, 2, 4, 6 und 8 übrig.

      Die Schrittweite ist wichtig, da unsere Schlange sich in 20er-Schritten bewegt. Würde das Futter dazwischen auftauchen, würde die Schlange es niemals erreichen. Wir brauchen für die Futterposition also ebenfalls eine Schrittweite von 20 Pixeln.

      Wenn wir die Zufallsposition in unsere Programm integrieren, brauchen wir das Futter nicht mehr verstecken. Der Programmabschnitt sieht dann wie folgt aus: