Arduino-Reflex-Duell, Wer reagiert schneller?
Beim Reflex-Duell treten zwei Spieler gegeneinander an und warten gespannt auf ein Signallicht. Sobald es aufleuchtet, heißt es blitzschnell reagieren und sofort den eigenen Buzzer drücken. Das einfache Prinzip sorgt für Nervenkitzel und Spaß: Konzentration, Spannung und Reaktionsschnelligkeit entscheiden über Sieg oder Niederlage. Durch die kurzen, intensiven Runden eignet sich das Spiel perfekt für kleine Turniere, Pausenwettkämpfe oder Teamevents. Ob als rasantes Partyspiel oder als Wettbewerb mit Punkte oder KO-System, das Reflex-Duell bringt garantiert Stimmung und fordert die Reflexe aller Teilnehmer heraus!
Spiel 8 aus der 200 Arduino Spiele Sammlung.
- Ablauf des REFLEX GAME:
- beide drücken
- Im weißen TFT steht "READY"
- TFT schwarz
- Spieler warten auf roten TFT
- Beide Spieler haben gedrückt
- Speiel Ende
- TFT hat die Farbe des Tasters, der schneller war
- TFT zeigt die Zeit beider Spieler an
- Beide müssen zum Resett drücken
- Spiel beginnt von vorne
Grün hat das Spiel gewonnen, zu sehen am grünen Hintergrund und an der Zeit in Millisekunden.
Die Verdrahtung des Arduino ist relativ einfach, wenn das Display mal angeschlossen ist, es braucht nur die beiden Taster für die Spieler.
Arduino Programm für den Arduino:
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
char spiel = 'A';
long ZeitVariable = 0L;
int zeit = 0;
void Unterprogramm_B();int spieler_1 = 0;
int spieler_2 = 0;
void Unterprogramm_A();int zufall = 0;
void Unterprogramm_C();void Unterprogramm_D();void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
spiel = 'A';tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_BLACK);
tft.setRotation(1);
tft.setCursor(30, 30);
tft.setTextColor(ST7735_RED);
tft.setTextSize(3);
tft.print("PRESS");
tft.setCursor(40, 60);
tft.print("BOTH");
}void loop() {
ZeitVariable = millis();
while(ZeitVariable + 1L >= millis()) {
Unterprogramm_A();
Unterprogramm_B();
Unterprogramm_C();
Unterprogramm_D();
}
if (( spiel == 'B' )) {
zeit = ( zeit + 1 );
}
}//B
void Unterprogramm_B() {
if (( spiel == 'B' )) {
if (( !( digitalRead(2) ) && ( spieler_1 < 50 ) )) {spieler_1 = zeit;
}
if (( !( digitalRead(3) ) && ( spieler_2 < 50 ) )) {spieler_2 = zeit;
}
if (( ( spieler_1 > 50 ) && ( spieler_2 > 50 ) )) {spiel = 'C';
}
}
}//A
void Unterprogramm_A() {
if (( ( spiel == 'A' ) && ( !( digitalRead(2) ) && !( digitalRead(3) ) ) )) {tft.fillScreen(ST7735_WHITE);
tft.setCursor(10, 30);
tft.setTextColor(ST7735_BLACK);
tft.setTextSize(4);
tft.print("READY?");
delay( 900 );
tft.fillScreen(ST7735_BLACK);
zufall = random( 700 , 7000 );
delay( zufall );
tft.fillScreen(ST7735_RED);
zeit = 0;
spiel = 'B';
}
}//C
void Unterprogramm_C() {
if (( spiel == 'C' )) {
if (( spieler_1 < spieler_2 )) {tft.fillScreen(ST7735_BLUE);
}
if (( spieler_2 < spieler_1 )) {tft.fillScreen(ST7735_GREEN);
}
tft.setCursor(0, 10);
tft.setTextColor(ST7735_BLACK);
tft.setTextSize(3);
tft.print("BLUE = ");
tft.setCursor(0, 38);
tft.setTextColor(ST7735_BLACK);
tft.setTextSize(3);
tft.print(spieler_1);
tft.setCursor(0, 70);
tft.setTextColor(ST7735_BLACK);
tft.setTextSize(3);
tft.print("GREEN = ");
tft.setCursor(0, 98);
tft.setTextColor(ST7735_BLACK);
tft.setTextSize(3);
tft.print(spieler_2);
delay( 500 );
spiel = 'D';
}
}//D
void Unterprogramm_D() {
if (( spiel == 'D' )) {
if (( !( digitalRead(2) ) || !( digitalRead(3) ) )) {spiel = 'A';
spieler_2 = 0;
spieler_1 = 0;
tft.fillScreen(ST7735_BLACK);
tft.setCursor(30, 30);
tft.setTextColor(ST7735_RED);
tft.setTextSize(3);
tft.print("PRESS");
tft.setCursor(40, 60);
tft.setTextColor(ST7735_RED);
tft.setTextSize(3);
tft.print("BOTH");
delay( 1000 );
}
}
}