{"id":1922,"date":"2018-12-11T18:23:00","date_gmt":"2018-12-11T17:23:00","guid":{"rendered":"http:\/\/dressler-hassloch.de\/?p=1922"},"modified":"2018-12-11T18:23:00","modified_gmt":"2018-12-11T17:23:00","slug":"spiele-in-python-programmieren","status":"publish","type":"post","link":"https:\/\/dressler-hassloch.de\/?p=1922","title":{"rendered":"Spiele in Python programmieren"},"content":{"rendered":"<p>Die Abende werden l\u00e4nger und die Tage k\u00fchler und feuchter. Zeit also, um vom Fahrrad abzusteigen und sich mehr dem Computer und Python zu widmen.<\/p>\n<p>Eine Veranstaltung der &#8220;<a href=\"https:\/\/www.lug-ld.de\/\" target=\"_blank\" rel=\"noopener\">Linux User Group Landau<\/a>&#8221; weckte mein Interesse an der Programmierung von grafischen Computerspielen, aber von der dort vorgestellten Variante &#8220;Programmierung in Scratch&#8221; (Scratch ist \u00fcbrigens auf dem Raspberry Pi vorinstalliert) kam ich recht schnell auf die Idee, mein Python auf dem Raspberry mal in Richtung Spiele auszuprobieren.<\/p>\n<p>Grafische Spiele waren noch nie mein Gebiet, weder als Programmierer noch als Spieler. Und mit dieser Art Grafik hatte ich auch noch keine Erfahrung.<\/p>\n<p>Bis jetzt kannte ich die &#8220;<strong>Tkinter<\/strong>&#8220;-Bibliothek von Python, mit der man recht einfach feld- und gruppenorientierte Ein- und Ausgabemasken erstellen kann. Zus\u00e4tzlich noch Schaltfl\u00e4chen, R\u00e4hmchen und farbliche Effekte. F\u00fcr Spiele ist das wohl eher nicht ausreichend. Auch die &#8220;<strong>turtle<\/strong>&#8220;-Bibliothek zum Zeichnen war nicht so richtig vielversprechend. Dann kannte ich die &#8220;<strong>Matplotlib<\/strong>&#8220;-Bibliothek, die aber eher zum Erstellen von Diagrammen und zum Plotten von Funktionen geeignet ist. Man kann mit dieser Bibliothek auch ganze SW- und Farbbilder plotten. Aber auch diese Erweiterung ist nicht so richtig zum Spielen geeignet.<\/p>\n<p>Beim St\u00f6bern findet man dann sehr schnell die Programmbibliothek &#8220;<strong>Pygame<\/strong>&#8220;, die eine grafische Ausgabe in 2D f\u00fcr Spiele anbietet, die Objekte animiert und die Steuerung mit der Maus unterst\u00fctzt.<\/p>\n<p>Pygame konnte ich ohne Probleme auf meinem Raspberry in Verbindung mit dem Python 3.4 installieren und auch \u00fcber mein VNC-Tool entwickeln und steuern. Die Geschwindigkeit l\u00e4sst allerding bei einer solchen Terminalemulation W\u00fcnsche offen, man g\u00f6nnt dem Raspi dann schon mal einen echten Bildschirm, eine echte Maus und eine echte Tastatur.<\/p>\n<p>Was geh\u00f6rt alles zu dieser Bibliothek?<\/p>\n<p>Man kann Fl\u00e4chen (surface-Objekte) definieren, diese mit Inhalten f\u00fcllen und dann diese Fl\u00e4chen auf den Bildschirm ausgeben. M\u00f6gliche Inhalte wiederum sind andere Fl\u00e4chen, Bilder (jpeg, gif, tiff, bmp), kleine Objekte und Text. Die Fl\u00e4chen sind bei Pygame immer Rechtecke, die man mit einer Geschwindigkeit \/ Richtung (x, y) vorbelegen kann und die dann vom System automatisch entsprechend der Bildwechselrate bewegt werden. Man kann diesen Objekten jederzeit neue Parameter zuweisen, sie aus dem Spiel nehmen oder neu ins Spiel bringen. Zus\u00e4tzlich gibt es noch eine Funktion &#8220;Collissiondetection&#8221;, die im Spielebereich auch hilfreich ist. Damit kann man feststellen, ob sich Objekte ber\u00fchren, sich \u00fcberschneiden oder am Bildschirmrand ansto\u00dfen. Im Farbbereich wird zus\u00e4tzlich mit dem 4. Farbkanal &#8220;transparent&#8221; gearbeitet, damit man Objekte leicht vor oder hintereinander zeigen kann. Und man kann f\u00fcr den Siegertusch Tondateien wiedergeben. Von der Eingabeseite wird ereignisgesteuert die Maus, die Tastatur und die &#8220;collisions&#8221; gr\u00fcndlich \u00fcberwacht und entsprechend an das Programm gemeldet.<\/p>\n<p>Damit hat man einen Werkzeugkasten, der viele einzelne Anforderungen bei der Programmierung typischer 2D-Spiele abdeckt. Da kann man seine Python-Kenntnisse einbringen und verbessern.<\/p>\n<p>Mein erstes Spiel hatte sich bewegende B\u00e4lle (Ping-Pong) und einem Kollisionspunkt in der Mitte des Spielfelds. Mein zweites Projekt war das Logikr\u00e4tsel &#8220;Hashi\/Bridges&#8221;, wobei aber keine bewegte Grafik zum Einsatz kam, aber die Maus aktiv zum Spielen gebraucht wird.<\/p>\n<p>Ich k\u00f6nnte mich f\u00fcr den Hausgebrauch mal an &#8220;Mastermind&#8221; und\/oder &#8220;Tetris&#8221; versuchen.<\/p>\n<p>Ein passende Buchempfehlung: Al Sweigart, Eigene Spiele programmieren &#8211; Python lernen<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Abende werden l\u00e4nger und die Tage k\u00fchler und feuchter. Zeit also, um vom Fahrrad abzusteigen und sich mehr dem Computer und Python zu widmen. Eine Veranstaltung der &#8220;Linux User Group Landau&#8221; weckte mein Interesse an der Programmierung von grafischen Computerspielen, aber von der dort vorgestellten Variante &#8220;Programmierung in Scratch&#8221; (Scratch ist \u00fcbrigens auf dem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11,3],"tags":[],"_links":{"self":[{"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=\/wp\/v2\/posts\/1922"}],"collection":[{"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1922"}],"version-history":[{"count":1,"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=\/wp\/v2\/posts\/1922\/revisions"}],"predecessor-version":[{"id":1923,"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=\/wp\/v2\/posts\/1922\/revisions\/1923"}],"wp:attachment":[{"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dressler-hassloch.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}