0223-0 Spieleprogrammierung mit dem Arduino_03.indd 1 14.09.
10223-0 Spieleprogrammierung mit dem Arduino_03.indd 2 14.09.
INHALT 1 Einführung ............................................................................................................................... 4 1.1 Das Display-Shield .................................................................................................... 4 1.2 Das Joypad-Shield .................................................................................................... 5 1.3 Montage ..................................................................................................
1 EINFÜHRUNG Vor Ihnen liegen die Bauteile für das Spielepaket. Neben der Schnellstartanleitung finden Sie vor sich das LCD-Display-Shield und das JoypadShield. Beide Platinen wurden speziell für den Arduino Uno entwickelt und passgenau abgestimmt. Sie ermöglichen Ihnen, die vorgestellten Beispiele auszuprobieren oder eigene Spiele zu entwickeln. Schauen Sie sich die beiden Shields einmal genauer an. Es gibt viel zu entdecken. 1.
Displaygröße 38 x 20 mm Sonstiges verkürzte Bauform – 14 freie I/O-Ports am Arduino Sie müssen sich allerdings nicht allzu sehr in die Details der Displayansteuerung einarbeiten, denn eine Library nimmt Ihnen den Großteil der Arbeit ab, sodass Sie sich voll auf die Programmierung von Spielen konzentrieren können.
1 | Einführung 1.3 | Montage Wie eingangs erwähnt, passen beide Shields optimal auf einen Arduino Uno. Dabei sollten Sie darauf achten, dass das Display-Shield mit den oberen Steckplätzen des Arduino Uno exakt abschließt. Das Joypad-Shield passt dann genau auf die unteren Steckleisten, wie in der Abbildung zu sehen ist. In dieser Konstellation haben Sie die beste Handhabung und können den Arduino auch zusammen mit dem Shield in die Hand nehmen und bedienen. 1.
1 | Einführung 7 Hier können Sie nicht nur auf zukünftige Updates zur Library oder den Programmen zugreifen, sondern auch auf einige weiterführende Projekte und Informationen der beiden Autoren. Darüber hinaus werden hier wichtige Onlinetools bereitgestellt, die Sie für die Bearbeitung Ihrer eigenen und der Beispielprojekte benötigen. 1.
1 | Einführung 1.7 | Hardwaretest Die IDE und die Beispielprogramme sind nun eingerichtet – Zeit, das erste Programm auf den Arduino zu laden. Öffnen Sie dazu über Datei -> Beispiele -> GameEngine -> Starter das erste Programm und klicken Sie auf den Upload-Button. Nach kurzer Zeit sehen Sie eine Erfolgsmeldung unten im Debug-Fenster. Das Display sollte nun in etwa so aussehen wie auf der Abbildung unten. Ist das nicht der Fall, spielen Sie mit den beiden Buttons direkt unterhalb des Displays herum.
1 | Einführung 9 In diesem Beispielprogramm können Sie außerdem die verschiedenen Funktionen der Shields testen. Drücken Sie beispielsweise einen Joypad-Button, wird dieser auf der Anzeige hervorgehoben. Auch den Sound können Sie testen. Sie sollten nun also die volle Funktionalität aller Komponenten überprüfen, bevor es richtig losgeht. 10223-0 Spieleprogrammierung mit dem Arduino_03.indd 9 14.09.
2 BALL – EINSTIEG IN DIE SPIELEPROGRAMMIERUNG Sie haben nun also alles eingerichtet und getestet – Zeit, sich der tatsächlichen Spieleentwicklung zu widmen. Öffnen Sie dazu das Beispielprogramm Ball über Datei -> Beispiele -> GameEngine -> Ball. In diesem ersten, einfachen Beispielprogramm geht es um das Zeichnen und Bewegen eines einfachen Objekts, eines Balls. Passen Sie zunächst den Kontrast in der Programmzeile 9 an. In dieser Zeile befindet sich innerhalb der Setup-Routine der Befehl engine.
rund um die Ballposition ebenfalls aktiviert werden sollen. Beachten Sie, dass sich in der oberen linken Ecke das Pixel mit der Position 0,0 befindet. 001 void moveBall() { 002 ballX = ballX + 1; 003 ballX = ballX % 128; 004 ballY = ballY % 64; 005 } Mit der Funktion moveBall() wird schließlich Bewegung in den Ball gebracht. Jedes Mal, wenn diese Funktion aufgerufen wird, erhöht sich die x-Position des Balls um 1. Im Klartext bedeutet dies, dass sich der Ball auf dem Display nach rechts bewegt.
2 | Ball – Einstieg in die Spieleprogrammierung 2 Über die controlBall()-Funktion können Sie nun den Ball auch steuern. Die Tasten des Joypads werden dabei auf einfache Weise abgefragt. Die Funktion engine.joypad.isPressed(UP) gibt den Wert TRUE zurück, wenn die Taste gerade gedrückt ist. Dann wird die y-Position des Balls um ein Pixel verringert, was zur Folge hat, dass sich der Ball dem oberen Displayrand nähert. Analog dazu gibt es die Funktion engine.joypad.isPressed(DOWN).
2 | Ball – Einstieg in die Spieleprogrammierung 10223-0 Spieleprogrammierung mit dem Arduino_03.indd 13 13 14.09.
3 PONG – MAL ANDERS In dem nun folgenden Beispielprogramm geht es um das bekannte Spiel Pong, allerdings etwas anders, als Sie es vermutlich kennen. Anstatt einen der Schläger zu bedienen, beeinflussen Sie hier den Ball durch die Richtungstasten. Ganz nebenbei lernen Sie zudem neue Elemente der Spieleprogrammierung kennen. Pong wurde 1972 von Atari veröffentlicht und ist eines der bekanntesten Spiele überhaupt. Es ist angelehnt an das Spiel Ping Pong oder auch Tischtennis.
tion, nämlich drawValue(), die an der angegebenen Position das aktuelle Level bzw. den Punktestand zeichnet. Das aktuelle Level ändert sich immer dann, wenn der Ball erfolgreich abgewehrt wurde. Dies wird über die Funktion moveBall() überprüft.
3 | Pong – mal anders 3 003 004 005 006 007 008 009 010 011 012 013 014 015 016 } player1Y++; } if (player1Y > 55) { player1Y--; } player1Y = (player1Y -1 + random(3)); if (player2Y < 7) { player2Y++; } if (player2Y > 55) { player2Y--; } player2Y = (player2Y -1 + random(3)); Die Spielerbewegung (Schläger) hingegen wird zufällig festgelegt. Vorher wird nur überprüft, ob der Schläger zu nah an die obere oder untere Kante gerät.
3 | Pong – mal anders 17 001 void loop(){ 002 if(engine.update()){ 003 controlBall(); 004 if(engine.isFrameCount(10 - (level/10))) { 005 moveBall(); 006 } 007 if(engine.isFrameCount(25 - (level/4))) { 008 movePlayer(); 009 } 010 drawPlayer(); 011 drawBall(); 012 drawField(); 013 } 014 } Damit der zeitliche Ablauf aller Funktionen gut koordiniert ist, müssen sie in der loop-Routine nacheinander aufgerufen werden.
4 SNAIL – BITMAPS EINBINDEN In den vorangegangenen Beispielen wurden die Spielelemente vor allem durch Linien und Pixel dargestellt. In diesem Beispiel erfahren Sie nun, wie Sie auch komplexere Grafiken in ein Spiel integrieren. Dazu lernen Sie den Onlinekonverter auf Tiny.systems kennen. Auf der Internetseite http://tiny.systems/article/mosaic.html befindet sich ein Tool, mit dem Sie sehr einfach Zeichnungen erstellen können. Auf dieser Webseite finden Sie in der Mitte eine graue Fläche.
Für den ersten Versuch können Sie eine Spielfigur der Größe 16 x 16 px erstellen. Wenn Sie fertig sind, klicken Sie auf den Haken unten links. Es erscheint ein recht langer Hex-Code, den Sie in das Snail-Programm kopieren müssen. Öffnen Sie dazu das Programm mit einem Klick auf Datei -> Beispiele -> GameEngine -> GameEngine1 -> Snail. In Zeile 10 des Programms finden Sie die Variable snail, die schon mit einer anderen Grafik gefüllt ist.
4 | Snail – Bitmaps einbinden 4 Dem Beispielordner dieses Programms liegt bereits ein passend formatiertes Bild bei. Es trägt den Namen Snail.bmp. Diese Datei können Sie auf die Mosaic-Seite hochladen, und als Ausgabe bekommen Sie die Bildinformation in Form von Hex-Zahlen. Diese Hex-Zahlen kopieren Sie nun wieder in die snail-Variable, und schon erscheint eine Schnecke (engl. snail) auf dem Display, sobald Sie das Programm hochladen. 10223-0 Spieleprogrammierung mit dem Arduino_03.indd 20 14.09.
4 | Snail – Bitmaps einbinden 10223-0 Spieleprogrammierung mit dem Arduino_03.indd 21 21 14.09.
5 Flappy Birds auf dem Display FLAPPY BIRD – SPIELSPASS MIT GAME ENGINE 1 Dies ist das letzte Beispiel in dieser Schnellstartanleitung, und hier steht in erster Linie der Spaß im Vordergrund. Bei dem folgenden Programm handelt sich um ein kleines Geschicklichkeitsspiel, ursprünglich für Smartphones entwickelt, das sich vor allem am Anfang des Jahres 2014 großer Popularität erfreute.
ANHANG Eine kurze Zusammenfassung der wichtigsten Befehle der Game Engine 1: init byte contrast (0–63) Initialisierung des Displays mit zu übergebendem Kontrastwert update - Update der Game Engine (Displayinhalte übertragen, Eingaben abfragen usw.
Impressum © 2016 Franzis Verlag GmbH, 85540 Haar bei München www.elo-web.de Autor: Fabian Kainka und Thomas Baum Produktmanager: Dr. Markus Stäuble ISBN 978-3-645-10223-0 Produziert im Auftrag der Firma Conrad Electronic SE, Klaus-Conrad-Str. 1, 92240 Hirschau Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien.