Arduino Simon säger (3 / 7 steg)
Steg 3: Mer kod
Vi börjar med funktionen "reset spel" där vi fylla upp våra GAME_SEQUENCE array
< p > void resetGame() {< br > / / reset steg
READ_STEP = 0;
GAME_STEP = 0;
skapa slumpmässig sekvens
för (int jag = 0; jag < GAME_MAX_SEQUENCE; i ++) {< br > GAME_SEQUENCE [i] = random(4) + 1. < br >} < /p >< p > / / gå till nästa spelet staten; Visa ledde sekvens
GAME_STATUS = 1;
} < /p >
Vårt nästa spel steg vore uppspelning steg där vi spelar sekvensen
void playSequence() {< br > / / spela ett steg av vår sekvens
för (int jag = 0; jag < = GAME_STEP; i ++) {
Serial.Print ("Set LED");
Serial.println(GAME_SEQUENCE[i]);
Delay(GAME_SPEED*2);
setLED(GAME_SEQUENCE[i]);
playTone(GAME_SEQUENCE[i]);
Delay(GAME_SPEED);
clearLEDs();
}
Gå till nästa steg: läsa knappar
GAME_STATUS = 2;
}
Efter att ha spelat vår sekvens vänta vi på tryckknapp input
void readSequence() {< br > / / läsa våra knappar
int button_value = readButtons();
om (button_value > 0) {
en knapp har tryckts
om (button_value == GAME_SEQUENCE[READ_STEP]) {
korrekt värde!
setLED(button_value);
playTone(button_value);
digitalWrite (LED_CORRECT, hög);
Delay(GAME_SPEED);
clearLEDs();
digitalWrite (LED_CORRECT, låg);
Kan snabba upp!
GAME_SPEED = GAME_SPEED-15.
Serial.println("correct!");
IF(READ_STEP == GAME_STEP) {
Återställ Läs steg
READ_STEP = 0;
Gå till nästa spel steg
GAME_STEP ++;
Gå till uppspelningsläge sekvens av vårt spel
GAME_STATUS = 1;
Serial.println ("gå till nästa steg");
Tänd alla lysdioder för att ange nästa sekvens
setLEDs(true,true,true,true);
Delay(GAME_SPEED);
setLEDs(false,false,false,false);
} annat {
READ_STEP ++;
}
Delay(10);
} annat {
fel värde!
Gå till spelet över läge
GAME_STATUS = 3;
Serial.println ("Game Over!");
}
}
Delay(10);
}
Slutligen när du gör ett misstag köra vi det "game over" modus:
void gameOver() {< br > / / röd RGB
digitalWrite (LED_WRONG, hög);
Spela Pwa Pwa Pwa
tonen (Summer, 98, TONE_DURATION);
Delay(TONE_DURATION);
tonen (Summer, 93, TONE_DURATION);
Delay(TONE_DURATION);
tonen (Summer, 87, TONE_DURATION);
Delay(TONE_DURATION);
Delay(GAME_SPEED);
}
Vi har också några hjälpare funktioner som gör våra liv lättare, de kan användas var som helst i vår kod
void setLED (int id) {< br > switch(id) {
fall 0:
setLEDs(false,false,false,false);
bryta;
fall 1:
setLEDs(true,false,false,false);
bryta;
fall 2:
setLEDs(false,true,false,false);
bryta;
fall 3:
setLEDs(false,false,true,false);
bryta;
fall 4:
setLEDs(false,false,false,true);
bryta;
}
}
Annullera playTone (int id) {
Switch(ID) {
fall 0:
noTone(BUZZER);
bryta;
fall 1:
tonen (Summer, RED_TONE, TONE_DURATION);
bryta;
fall 2:
tonen (Summer, GREEN_TONE, TONE_DURATION);
bryta;
fall 3:
tonen (Summer, BLUE_TONE, TONE_DURATION);
bryta;
fall 4:
tonen (Summer, YELLOW_TONE, TONE_DURATION);
bryta;
}
}
void setLEDs (boolean röd, booleska green, booleska blå, int gul) {
om (röd) digitalWrite (LED_RED, hög);
annat digitalWrite (LED_RED, låg);
om (grön) digitalWrite (LED_GREEN, hög);
annat digitalWrite (LED_GREEN, låg);
om (blå) digitalWrite (LED_BLUE, hög);
annat digitalWrite (LED_BLUE, låg);
om (gul) digitalWrite (LED_YELLOW, hög);
annat digitalWrite (LED_YELLOW, låg);
}
void clearLEDs() {
setLEDs(false,false,false,false);
}
int readButtons(void) {
om (digitalRead(BUTTON_RED) == 0) tillbaka 1.
annat if (digitalRead(BUTTON_GREEN) == 0) returnera 2.
annat if (digitalRead(BUTTON_BLUE) == 0) returnera 3.
annat if (digitalRead(BUTTON_YELLOW) == 0) returnera 4.
Return 0;
}