
Zwei Schnecken liefern sich ein Rennen. Sie laufen eine zufällig ermittelte Anzahl von Schritten. Wer als Erstes mit dem letzten Zug das Ziel überschreitet, hat gewonnen.
So sieht es aus:


Auf einem LCD:


Schneckenrennen mit einer Schnecke
Im Kopf des Programms werden verschiedene ⇒Arrays verwendet, damit die Ausgabe möglichst flexibel gestaltet werden kann. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // Anzahl der Schritte Minimum/Maximum int Minimum = 1; int Maximum = 4; // Schritte bis zum Ziel int Ziel = 10; int Schritte = 0; int Runde = 1; // wenn Neustart = true -> Variable zurücksetzen bool Neustart = false; /* Arrays für die Schnecken BisherigeSchritte[] -> Anzahl zurückgelegter Schritte Schnecke[] -> Namen der Schnecken SchrittZeichen[] -> Zeichen für die zurückgelegten Schritte es können (fast) beliebige Zeichen verwendet werden */ int BisherigeSchritte[2]; String Schnecke[2] = {“Lisa”, “Karl”}; String SchrittZeichen[2] = {“> “, “+ ”}; |
Im setup-Teil wird über die Entfernung zum Ziel, die beteiligten Schnecken und über die Tastenbelegung informiert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial) {;} // Info über das Spiel Serial.println(“Schneckenrennen”); Serial.println(“Schnecken: ” + Schnecke[0] + ” und ” + Schnecke[1]); // \n = neue Zeile Serial.println(“Ziel: ” + String(Ziel)); Serial.println(“Tasten:\nw -> weiter\nn -> Neustart”); Serial.println(“——————————————-”); // Zufallsgenerator starten randomSeed(analogRead(A0)); } |
Der loop-Teil. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | void loop() { // auf serielle Eingabe warten while (Serial.available() > 0) { // Eingabe im Seriellen Monitor lesen char Zeichen = Serial.read(); // Enter/Senden gedrückt if (Zeichen == ’n’) { Neustart = true; } if (Zeichen == ‘w’) { // beim Neustart -> alle Variablen zurücksetzen if (Neustart) { BisherigeSchritte[0] = 0; BisherigeSchritte[1] = 0; Runde = 1; Neustart = false; } Serial.println(“Runde ” + String(Runde)); // Schnecke 1 // Anzahl der Schritte zufällig ermitteln Schritte = ZufallsZahl(Minimum, Maximum); // Summe der Schritte berechnen BisherigeSchritte[0] = BisherigeSchritte[0] + Schritte; /* Variablen an die Funktion Bildschirmausgabe übergeben Name der Schnecke, Summe der Schritte, Zeichen für die zurückgelegten Schritte für das erste Element [0] -> die erste Schnecke */ Bildschirmausgabe(Schnecke[0], BisherigeSchritte[0], SchrittZeichen[0]); /* Variablen an die Funktion Bildschirmausgabe übergeben Name der Schnecke, Summe der Schritte, Zeichen für die zurückgelegten Schritte für das zweite Element [1] -> die zweite Schnecke */ Schritte = ZufallsZahl(Minimum, Maximum); BisherigeSchritte[1] = BisherigeSchritte[1] + Schritte; Bildschirmausgabe(Schnecke[1], BisherigeSchritte[1], SchrittZeichen[1]); Serial.println(“——————————————-”); // Runde hochzählen Runde ++; // Sieger Schnecke 1 if (BisherigeSchritte[0] > Ziel) { if (BisherigeSchritte[0] > BisherigeSchritte[1]) { Serial.println(Schnecke[0] + ” hat gewonnen!”); Neustart = true; } } // Sieger Schnecke 2 if (BisherigeSchritte[1] > Ziel) { if (BisherigeSchritte[0] < BisherigeSchritte[1]) { Serial.println(Schnecke[1] + ” hat gewonnen!”); Neustart = true; } } // unentschieden if (BisherigeSchritte[0] > Ziel && BisherigeSchritte[1] > Ziel) { if (BisherigeSchritte[0] == BisherigeSchritte[1]) { Serial.println(“Unentschieden!”); Neustart = true; } } } } } |
Jetzt fehlen noch die Funktion ZufallsZahl() und die Funktion Bildschirmausgabe().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | int ZufallsZahl(int Minimum, int Maximum) { int Zahl = random(Minimum, Maximum); return Zahl; } void Bildschirmausgabe(String Name, int Schritte, String SchrittZeichen) { // Name der Schnecke und Anzahl der Schritte anzeigen Serial.println(Name + ” ” + String(Schritte)); // entsprechend der Anzahl der Schritte Zeichen anzeigen for (int i = 0; i < Schritte; i++) { Serial.print(SchrittZeichen); } // mit Leerzeichen auffüllen und Ziel anzeigen if (Schritte <= Ziel) { for (int i = Schritte; i < Ziel; i++) { Serial.print(“ ”); } Serial.print(“| Ziel”); } Serial.println(); } |

Erweitere das Programm auf drei Schnecken.
So sieht es aus:

Verwandte Anleitungen:
- Einmaleinsreihen anzeigen
- Einmaleinsreihen — Anzeige mit Keyes-Fernbedienung
- Fußballtipp
- Geldautomat
- Kniffel — EEPROM verwenden
- Lottozahlen — Anzeige im Seriellen Monitor
- Primzahlen ermitteln
- Satzmaschine
- Städte-Info
- Teiler bestimmen
Letzte Aktualisierung:






