Ich kenne das Spiel space invaders zwar nicht mehr von den acarde Automaten, sondern nur vom Computer aber es hat mich dennoch Stunden gefangen genommen. Bei meinem "mini" space invaders Spiel kann man zwar nicht durch das Weltall fliegen sonder nur sein X nach oben und unten bewegen. Spaß macht das Spiel dennoch.
Arduino / Ardulbock Spiel: mini space invaders
Einfach gesagt, mit dem Joystick muss das X auf dem OLED Display nach oben und unten bewegt werden und darf dabei die anderen X die einem entgegen kommen nicht berühren. Das OLED ist an den Bus des Arduino angeschlossen, der Joystick wird an die analogen Eingängen A0 und A1 angeschlossen. Ieh hab das grove System von SEEED verwendet.
Die sechs X kommen dem einem X immer näher, ein Zufallsgenerator entscheidet welcher Weg frei bleibt. In diesem Fall muss das X in der Mitte sein, sonst wird es von der anderen X einfach verschlungen und das Spiel ist aus.
Hier kurz vor dem Ende, bis zu letzt hat der Spieler Zeit auszuweichen. Dabei werden die feindlichen X mit jeder Runde schneller. Bei dem Versuch das X zu verschlingen.
Wurde der Spieler dann verschlungen bekommt er wenigsten noch gesagt wieviele Punkte er gemacht hat. Für jede bestandene Runde gibt es einen Punkt. Danach geht das Spiel gleich weiter. "you are game over push the button to try again" gibt es bei diesem Spiel nicht.....
Arduino / Ardulbock Software für mini space invaders Spiel
An der Ardublock Vorschau sieht man bereits wie groß das Programm ist. Deshalb zeige ich hier nur Ausschnitte und beschreibe diese kurz. Das gesamte Programm gibt hier als ZIP zum herunterladen. Es kann nur mit der DUIONO EDU Version ARDUBLOCK geöffnet werden. Also bitte nicht die mini oder maxi Version verwenden. Es gibt drei Versionen in der ZIP Datei.
- Spiel ohne Punkte und ohne Zeit, es kommen nur die XXXXX, bei einem Fehler geht es einfach weiter
- Spiel mit Punkten, jede Runde die geschafft wird, gibt einen Punkt. Wird ein Fehler gemacht, erscheint die Punktezahl und nach 2 Sekunden geht es weiter.
- Spiel mit Punkten wie oben, nur dass die Geschwindigkeit mit der sich die XXXXXX bewegen immer schneller wird. Diese Version beschreibe ich auch hier.
Über das "deltaT" wird die Zeit gesteuert in der der die X vorrücken. Das reset "deltaT" sorgt dafür das nach jeder Runde die Zeit neu zu zählen beginnt. Damit das Programm nicht so lange wird, habe ich die einzelnen Teile in Unterprogramme verteilt. Außerdem frage ich den Joystick in der ´"integer" Variable ab. Durch diese Variable entscheidet sich im nächsten Schritt welcher Teil vom Programm weiter ausgeführt wird.
Da der Joystick nicht 100% in der Mitte bleibt muss ich für die Mittelstellung die Zahlen 502 bis 505 abfragen. Liegt eine dieser Zahlen an, dann ist der Joystick in der Mitte. Damit ich im zweiten "falls" Block abfragen kann, dass der Spieler dem X ausweicht. Ändere ich die 502 bis 505 in den Wert 3 um und das X wird auf der Linie 3 angezeigt. Im zweiten "falls" Block prüfe ich nun mit "und" ob die X schon ganz hinten angekommen sind, wo der Spieler stehen soll und ob er da auch steht. Steht er mit seinem X falsch ist das Spiel zu Ende und das Ergebnis wird auf dem Display angezeigt.
Das gleiche macht das Programm nun auch wenn der Joystick nach oben gedrückt wird. Wenn "integer" als Größer als 502 ist. Über den Zuordnen Block von 4-6 werden die Zeilen des OLED angesteuert.
Genau das gleiche nur wird hier der Joystick nach unten bewegt.
Ist der Zähler bei sieben angekommen, ist eine Runde vorbei und...
- es gibt einen Punkt in der Punkte Variable
- der Zähler wird auf null gesetzt
- es gibt eine neue Zufallszahl über reandom
- wer möchte kann sich die Variablen im serial monitor ansehen
- das OLED wird auf ---- zurück gesetzt
- von der Zeit werden 10ms abgezogen
Hier das erste Unterprogramm. Es sogt dafür dass auf jeder Zeile im Display ein X erscheint. Nur auf der zufällig aufgewählten Zeile eben nicht. Der "falls" Block wird sieben man benötigt. Jedesmal fehlt eine Zahl.
In den nächsten Unterprogrammen werden nun die Zeilen mit den X für die jeweilige Reihe gesetzte. Auch diese "falls" Blöcke muss nach unten und rechts sieben mal geklont werden. Damit wirklich nur die Zeile und Reihe ein X bekommt die gerade soll, ist die oberste Bedingungen, dass "nicht --> fehler =" Diese Bedingungen kann nur "nicht" von einer Variablen erfüllt sein, da der Zufallsgenerator immer nur eine Zahl ausgibt.