Ich habe mich mal an ein paar Spielen probiert die man mit zwei Calliope mini mit Hilfe des Funk-Moduls zu zweit spielen kann.
Am besten fande ich davon bis jetzt mein Funk-Pong. Es ist zwar kein sonderlich leichtes Projekt aber wer mag kann sich den Code, auch ohne die vollständig zu verstehen, kopieren und es einfach spielen.
AnleitungDen Code auf beide Calliope mini bringen und beide mit Strom versorgen. Das Spiel beginnt sobald ein Spieler auf den Knopf B drückt. Ab diesem Zeitpunkt kann der eigene Balken mit Knopf A nach links und mit Knopf B nach rechts bewegt werden.
Bei dem Spieler der das Spiel mit Knopf B gestartet hat erscheint ein Ball (ein Punkt). Verschwindet der Ball am oberen Ende des Dipslays erscheint er oben auf dem Calliope mini des Gegenspielers. Der Ball darf das untere Ende des Displays nicht berühren und muss mit dem eigenen Balken davon abgehalten werden.
Berührt der Ball das untere Ende des Displays verliert der Spieler auf dessen Seite der Ball war. Der andere Spieler gewinnt. Um eine neue Runde zu starten muss bei beiden Calliope mini der Resetknopf gedrückt werden.
zum CodeUm den Calliope mini zu programmieren habe ich https://pxt.calliope.cc/ genutzt.
status - speichert den status in dem sich das spiel des jeweiligen Calliope mini befindet
0 = warten auf den Start
1 = spielen
2 = gewonnen
3 = verloren
richtung_x - beschreibt ob sich der Ball nach link (-1) oder nach rechts (1) bewegt
richtung_y - beschreibt ob sich der Ball nach oben (-1) oder nach unten (1) bewegt
x & y - sind die Koordienaten der aktuellen position des Balls
balken_x - ist die X-Koordinate der linken Kante des eigenen Balken
Beim Starten wird der Spiel-Status auf 0 gesetzt, also wartet der Calliope mini darauf dass das Spiel beginnt.
In der Dauerhalft-SchleifeDie Pause bestimmt den Takt, also die Geschwindigkeit mit, in dem sich der Ball bewegt. Kleinere Pause = höherer Takt = schnelleres Spiel.
In den zwei weiteren Zeilen wird der Ball bewegt in dem die X&Y-Koordinate je nach jeweiliger Bewegungsrichtung geändert wird.
Berührt der Ball links oder rechts den Rand des Displays wird die horizontale Richtung umgekehrt. In diesem Fall ist der Ball intern schon aus dem Display raus gerollt, weshalb nach der Richtungsänderung die horizontale Position noch angepasst werden muss bevor die neue Position des Balls auf dem Display dargestellt wird.
Erreicht der Ball das untere Ende des Displays können zwei Ereignisse eintreten. Befindet sich der Balken direkt unter dem Ball wird die vertikale Richtung umgekehrt. Befindet sich der Balken nicht unter dem Ball verliert der Spieler und es wird eine Nachricht an den anderen Calliope mini geschickt.
Erreicht der Ball das obere Ende des Displays wechselt der Ball von einem Calliope mini zum anderen. Dafür muss etwas umgerechnet werden da wenn der Ball beispielsweise oben links beim mini1 verschwindet muss er beim mini2 oben rechts auftauchen. Auch richtung_x muss umgekehrt werden (richtung_y ist in dem fall immer 1 (nach unten).
Um den Ball rüber zu bringen wird ein Name-Value-Paar geschickt, wobei Name die X-Koordinate des Balls ist (nur als String) und Value die horizontale Richtung des Balls.
Nach dem alle Bewegungen des Balls abgehandelt wurden kann die neue Position des Balls und des Balken auf dem Display dargestellt werden.
Dafür wir in den zwei grünen Schleifen ersteinmal jedes Pixel abgeschaltet und danach wieder ein Pixel für den Ball und zwei Pixel für den Balken eingeschaltet.
Ist der Status nicht 1 wird der Calliope mini nicht groß rum rechnen sondern ein Smiley anzeigen der darstellt ob man gewonnen oder verloren hat.
Außerhalb der Dauerhaft-SchleifeWird Knopf A gedrückt ändert sich die Position des Balken um 1 nach Links.
Wird Knopf B gedrückt ändert sich die Position des Balken um 1 nach Rechts.
Wartet der Calliope mini darauf dass das Spiel beginnt fängt er es an und schickt eine Nachricht an den zweiten Calliope mini.
Es können drei verschieden Arten von Nachrichten beim Calliope mini ankommen.
Wenn value = 137 hat der andere Spieler verloren und der Calliope mini der diese Nachricht empfängt hat gewonnen.
Wenn value = 11 dann wurde das Spiel vom anderen Calliope mini gestartet.
In jedem anderen Fall wird die neue Position des Balls beim Wechsel zwischen den Calliope mini kommuniziert. Um den Ball rüber zu bringen wird ein Name-Value-Paar geschickt, wobei Name die X-Koordinate des Balls ist (nur als String) und Value die horizontale Richtung des Balls.
Viel Spaß und Erfolg!
LG Marian Mehling
Comments