Tinkercad Projekt 1 - Reaktionsspiel

Teste deine Reaktionszeit!

Die Spielregeln sind einfach: Sobald beide RGB-LEDs dieselbe Farbe zeigen, musst du den Taster gedrückt (halten). War das richtig, blinkt die grüne LED. Verpasst du den richtigen Moment oder drückst, obwohl die LEDs nicht dieselbe Farbe zeigen, blinkt die rote LED.

Schwierigkeitsgrad: anspruchsvoll

Starte die Simulation und probiere es aus:


Um dieses Spiel zu programmieren muss du folgendes können:
Die RGB-LEDs sollen auf zufällige Art die Farben wechseln. Dafür kannst du die random()-Funktion verwenden:
https://www.arduino.cc/reference/de/language/functions/random-numbers/random/

int zufallszahl = random(kleinste_zahl, groesste_zahl);

random() liefert dir eine Zufallszahl zwischen kleinste_zahl und groesste_zahl. Wenn man diesen Wertebereich allerdings sehr klein fasst, sind die Zahlen nicht mehr wirklich zufällig. Es ist also besser einen großen Bereich vorzugeben und die Zufallszahl dann danach erst kleiner zu skalieren (siehe z.B. Übung 13). random() wird zufälliger, wenn man vorher folgenden Befehl ausführt:

randomSeed(analogRead(0));

Mit random() kannst du dir nun die nächste Zufallsfarbe vorgeben lassen, die die RGB-LED anzeigen soll. Damit der Spieler allerdings klar kommt, sollten die Farben leicht voneinander unterscheidbar, also nur eine kleine Menge unterschiedlicher Farben erlaubt sein. Um es dir und dem Spieler einfacher zu machen, könntest du die Farben z.B. so mischen, dass es nur 8 mögliche Farben gibt:
  1. rot: aus, grün: aus, blau: aus → "schwarz" (eigentlich ist die LED komplett ausgeschaltet)
  2. rot: an, grün: aus, blau: aus → rot
  3. rot: aus, grün: an, blau: aus → grün
  4. rot: aus, grün: aus, blau: an → blau
  5. rot: an, grün: an, blau: aus → gelb
  6. rot: an, grün: aus, blau: an pink
  7. rot: aus, grün: an, blau: an cyan
  8. rot: an, grün: an, blau: an weiß
Auf diese Art kannst du dann die einzelnen Farbkanäle einfach ein- oder ausschalten und der Zufallsgenerator muss dir nur sagen welche Farbkombination angezeigt werden soll. Das ist einfacher als für jeden Farbkanal wirklich eine Zufallszahl zu benutzen.

Du musst dir die angezeigten Farben der beiden RGB-LEDs in Variablen abspeichern, weil das Spiel selbst ja wissen muss, ob die Farben der beiden RGB-LEDs gerade gleich sind oder nicht.

Der Ablauf einer Spielrunde ist dann folgender:
  1. Neue Zufallsfarben für beide LEDs bestimmen.
  2. Neue Farben anzeigen und dabei den Taster auslesen.
  3. Auswertung: Sind beide Farben gleich und der Taster wurde gedrückt, blinkt die grüne LED. Sind beide Farben gleich und der Taster wurde nicht gedrückt, blinkt die rote LED. Sind beide Farben nicht gleich und der Taster wurde gedrückt, blinkt auch die rote LED.
Dadurch, dass die angezeigten Farben nun wirklich dem Zufall unterworfen sind, kann es, wenn man Pech hat, sehr lang dauern, bis wirklich mal zwei gleiche Farben dabei sind. Das langweilt dann den Spieler. Aus diesem Grund ist es sinnvoll die Spielrunden mitzuzählen und wenn zu viele Spielrunden ohne gleiche Farbe vorbei sind, die Farbe der einen RGB-LED einfach gleich der Farbe der anderen zu setzen (das also einfach zu faken). Sobald 2 gleiche Farben angezeigt werden, muss dieser Zähler aber wieder zurückgesetzt werden.

Wenn das soweit funktioniert, kannst du versuchen einen Schritt weiter zu gehen und die Farbverläufe zwischen der aktuell angezeigten Farbe und der neuen Zufallsfarbe zu animieren so wie im Demo-Entwurf oben.

Falls du die Schaltung nicht selbst aufbauen willst, hier der Starter:

Du kannst dir natürlich auch eigene Spielregeln ausdenken.



Kommentare

Beliebte Posts aus diesem Blog

Tinkercad Übung 6 - LED mit Taster ansteuern

Tinkercad Übung 11 - LED dimmen

Tinkercad Übung 15 - Ultraschallsensor auslesen