• Herzlich Willkommen

      Hallo, ich freu mich, dass du auch diese Woche wieder mit dabei bist! Heute wollen wir einen Hintergrund einfügen, wir wollen, dass unser Spieler sich automatisch fortbewegt und wir wollen, dass das Spiel beendet wird, sobald der Spieler den Rand des Fensters berührt. Ich wünsche dir ganz viel Spaß beim ausprobieren, lernen und entdecken. Lass uns keine Zeit verlieren und direkt loslegen!


    • Die Farben im Code

      Vorab noch eine kleinigkeit: Vielleicht ist dir ja schon aufgefallen, dass dein Code ganz bunt ist. In IDLE werden verschiedene Teile des Codes automatisch farbig gekennzeichnet. So ist der Code besser verständlich und auch Fehler sind besser zu erkennen:





    • Vorschau

      Heute wollen wir einen Hintergrund einfügen, wir wollen, dass unser Spieler sich automatisch fortbewegt und wir wollen, dass das Spiel beendet wird, sobald der Spieler den Rand des Fensters berührt. Hier habe ich dir ein kleines Video von dem Spiel erstellt. Dieses kannst du dir jetzt auch einmal ansehen , um dir ein Bild von dem zu machen, was wir heute schaffen wollen:



    • Das Hintergrundbild herunterladen

      Wir wollen gleich mit dem Hintergrund anfangen. Erstelle einen neuen Ordner in deinem Ordner „Python_Kurs“ und nenne ihn „images“.


      Lade dir jetzt bitte folgendes Bild runter und speichere es in deinem neuen Ordner „images“.


    • Snake

      Hier siehst du einmal wie unser Programm am Ende des heutigen Kurses aussehen soll. Sollte es später einmal nicht funktionieren, gleiche deinen Code mit diesem hier ab. Solltest du deinen Fehler nicht finden, kannst du mir gerne jederzeit eine Nachricht schreiben.


      --------------------------------------------------------------------------------------------------------------------------------------

      Der Hintergrund

      Du solltest dir eben folgendes Bild heruntergeladen haben und es in einem neuen Ordner mit dem Namen "images" gespeichert haben. Ist das nicht der Fall, holle es bitte jetzt nach.

      background

      Nun öffne wieder dein Snake-Programm. Gehe hierfür mit Rechts-Klick auf dein Programm und wähle „Edit with IDLE“ aus. Dein Programm wird sich nun öffnen.

       

      Jetzt wollen wir alle Änderungen einmal durchgehen. Währenddessen kannst du diese in deinem Code übernehmen. Als aller erstes wollen wir jetzt unser Hintergrundbild laden. Wir speichern es in der Variable „backround“. In den eckigen Klammern geben wir den Pfad unseres Bildes an. Dein Computer weiß, dass wir uns in dem Ordner „Python_Kurs“ befinden denn dort befindet sich ja schließlich auch unsere Python-Datei „Snake“. Unser Bild befindet sich in dem Ordner „images“. Also müssen wir zunächst dort hinein wechseln. Unser Bild hat den Namen „background.png“. Also geben wir "images/background.png„ ein und unser Comuter weiß, wo er das Bild findet und welches er auswählen muss.


      Unser Bild hat nun allerdings andere Abmessungen als unser Bildschirm. Aus diesem Grund müssen wir die Größe unseres Bildschirms abändern, damit der Screen ausschließlich mit unserem Hintergrund gefüllt ist. Die Maße unseres Bildes betragen 396 x 348 Pixel. Ändere deshalb jetzt die Zahlen der Variable „screen“ von 750 und 401 auf 396 und 348.

       

      Wenn du dein Programm jetzt startest, wird dir der Hintergrund noch nicht angezeigt. Das liegt daran, dass wir das Bild noch nicht gezeichnet haben. Das wollen wir jetzt aber ändern: Gehe hierfür zunächst an die Stelle in deinem Code, an dem du die Zeile „screen.fill((0,0,0))“ geschrieben hast. Diese Zeile kannst du jetzt löschen, denn wir wollen unseren Bildschirm jetzt nicht mehr schwarz zeichnen. Füge dann die Zeile „screen.blit(backround,(0,0)) “ stattdessen ein. Jetzt kannst du einmal dein Spiel starten und dein Hintergrund wird gezeichnet.


      Letzte Woche habe ich schon einmal erwähnt, dass man auch eigene Funktionen erstellen kann. Sie sorgen auf der einen Seite dafür, dass der Code übersichtlicher wird und auf der anderen Seite können sie viel Schreibarbeit ersparen. Eine solche Funktion wollen wir uns jetzt für alles definieren, was wir in unserem Spiel zeichnen. Du erstellst eine Funktion indem du erst einmal den Befehl „def“ schreibst, dahinter den Namen deiner Funktion, zwei Klammern und einen Doppelpunkt. Manchmal soll eine Funktion Daten verarbeiten. Diese schreibt man dann in die Klammern. Bei unser Zeichenfunktion müssen aber zunächst keine Daten verarbeitet werden.

      Wir schreiben also „def draw(): “. Jetzt kannst du die Zeilen „screen.blit(backround,(0,0))“, „pygame.draw.rect(screen, (255,255,0), (x,y,width,height))“ und „pygame.display.update()“ aus der Schleife herausschneiden (indem du diese Zeilen markierst, rechtsklick und auf „Cut“ klickst) und in deine Funktion einfügen (Rechtsklick unterhalb deiner Funktion und „Paste“ klicken). Achte hierbei unbedingt auf die Einrückungen der drei Zeilen. Andernfalls, weiß dein Computer nicht, dass dieser Code-Block zu deiner Funktion gehört.



      Nun müssen wir unsere neue Funktion noch innerhalb der Schleife aufrufen, damit unser Spieler und auch unser Hintergrund weiterhin gezeichnet wird. Hierfür musst du nur noch „draw()“ in deine While-Schleife schreiben. Nun kannst du dein Spiel wieder starten und du wirst sehen, dass weiterhin alles gezeichnet wird wie zuvor.


      Weiter Änderungen

      Den ersten Punkt von unserer To-Do-Liste für heute haben wir erldeigt. Bevor wir nun mit den Begrenzungen weiter machen wollen wir noch zwei kleinigkeiten abändern: Zuerst soll unser Spieler nicht mehr rechteckig, sondern quadratisch sein. Außerdem wollen wir, dass er zu Beginn link in der Mitte des Bildschirms platziert ist. Hierfür musst du die Variablen wie folgt umändern:


      Wenn du dein Spiel startest, wird dein Spiel so aussehen:


      Bis jetzt steht in der oberen Zeile noch „pygame window“. Das können und wollen wir jetzt noch ändern. Tippe hierfür diese Zeile ab. Der Text in den Anführungszeichen ist der Text, der dann später an der Stelle wo jetzt noch „pygame window“ steht, angezeigt. Du kannst dein Spiel nennen wie du magst.


      Wenn ich das Spiel jetzt starte, nachdem ich diese Zeile hinzugefügt habe, sieht meine Zeile so aus:


      Spielfeldbegrenzungen

      Jetzt können wir mit den Begrenzungen unseres Bildschirms beginnen. Da es bei Snake ja so ist, dass wenn man den Rand des Bildschirms berührt das Spiel vorbei ist, können wir die Begrenzungen einfach als Bedingungen unserer While-Schleife schreiben. Wir können soviele Bedingungen in unsere While-Schleife schreiben wie wir wollen. Wir trennen sie mit einem „and“ voneinander ab. Wird eine Bedingung „False“, gehen wir aus der Schleife raus. Tippe nun folgende Zeile ab:



      Du kannst dein Spiel jetzt einmal starten und versuchen den Rand zu berühren. Du wirst es wahrscheinlich schaffen, allerdings wirst du danach deinen Spieler nicht mehr bewegen können. Das liegt daran, dass wir unserem Computer noch nicht gesagt haben, was er tun soll, wenn wir die Schleife verlassen haben. Schreibe deshalb diese Zeile außerhalb der Schleife (also ohne Einrückung) ganz an das Ende deines Spiels:

      Wenn du es nun noch einmal versuchst, wir dein Spiel automatisch beendet und geschlossen werden. Und schon haben wir einen weiteren Punkt unserer Liste abhaken können.

      Automatisches Bewegen des Spielers

      Nun wollen wir uns dem letzten Punkt widmen: der automatischen Bewegung unseres Spielers. Hierfür erstellen wir zunächst eine Liste mit allen möglichen Richtungen außerhalb unserer Schleife. Außerdem legen wir eine sogenannte Hilfsvariable an. Sie dient einzig und allein dem Zweck Werte zwischenzuspeichern. Zu Beginn des Spiels soll sich unser Spieler noch nicht bewegen. Aus diesem Grund soll unsere Hilfsvariable „lastDir“ erstmal noch keinen Wert haben, also „lastDir = None“.

      Wenn wir eine der Pfeiltasten drücken, speichern wir die Richtung in unserer Hilfsvariable. Hierfür werden wir diesen Codeblock abändern:


      Ändere deinen Code nun so ab, dass er wie folgt aussieht:


      Dein Computer setzt nun beim betätigen einer Pfeiltaste den Wert von „lastDir“ auf einen Wert aus „direct“. „direct[0] entspricht hierbei dem Wert „UP“, „direct[1] entspricht dem Wert „RIGHT“, „direct[2] entspricht dem Wert „DOWN“ und „direct[3] entspricht dem Wert „LEFT“. Doch was sollen eigentlich die eckigen Klammern hinter „direct“ und wofür stehen die Zahlen? Mit „direct[0]“ wählen wir das erste Element aus der Liste „direct“ aus. In der Informatik beginnt man beim Zählen immer mit der Null. „direct[1]“ ist dann eben das zweite Element und so weiter und so fort.

      Wenn du dein Spiel jetzt starten würdest, würde sich dein Spieler nun nicht mehr bewegen. Das müssen wir jetzt noch ändern: Tippe hierfür diesen Codeblock ab:

      Je nachdem welche Taste du betätigt hast und welchen Wert „lastDir“ zwischengespeichert hat, wird nun der Wert von „speed“ solange auf „x“ oder „y“ aufaddiert oder abgezogen bis du eine andere Taste benutzt und „lastDir“ einen anderen Wert zwischenspeichert.

      Jetzt starte noch einmal dein Spiel und siehe nach, ob alles funktioniert.


    • Wenn du nun soweit bist, dass dein Programm aussieht wie meins, kannst du es jetzt hier hochladen.

    • Ausblick

      Unser Spiel lässt sich nun fast spielen. Eine ganz wichtige Sache feht noch: Die Äpfel. Diese wollen wir nächste Woche noch hinzufügen. Ich freue mich, dich nächste Woche wieder bei diesem Kurs begrüßen zu dürfen.