Categories:

SimonGame – Codice in C

define buzzer_pin 10

define start_button_pin 11

define livello 100 //numero massimo di elementi nella sequenza

define stato_stop 0

define stato_visualizzazione 1

define stato_ripetizione 2

int led [4] = {8, 6, 4, 2};
int pulsanti [4] = {9, 7, 5, 3};
int note [4] = {523, 587, 659, 698};
int sequenza [livello];
int livello1=0; //livello attuale
int stato=stato_stop;

void setup() {

pinMode (buzzer_pin, OUTPUT);
pinMode (start_button_pin, INPUT);

for (int i=0; i<4; i++) {
pinMode (led[i], OUTPUT);
pinMode (pulsanti[i], INPUT);
}

}

void loop() {

//definire funzionamento del gioco richiamando le funzioni
if (digitalRead((start_button_pin)==HIGH)){
inizio();
}
if (stato==stato_visualizzazione) {
liv_successivo();
}
if (stato==stato_ripetizione) {
sequenzaRipetuta();
}
delay(10);
}

//funzione per la riproduzione delle note musicali
void riproduzioneNote (int nota_1) {
tone (buzzer_pin, note[nota_1], 150);
digitalWrite (led[nota_1], HIGH);
delay (150);
digitalWrite (led[nota_1], LOW);
}

//lettura pulsanti
int letturaPulsanti () {
for (int i=0; i<4; i++) {
if (digitalRead(pulsanti[i])==HIGH) {
return i;
}
}
return -1;
}

//sequenza d’inizio
void inizio () {
for (int i=0; i<3; i++) {
tone (buzzer_pin, note[0], HIGH);
delay(75);
digitalWrite(led[0], LOW);
delay(75);
tone (buzzer_pin, note[1], HIGH);
delay(75);
digitalWrite(led[0], LOW);
delay(75);
tone (buzzer_pin, note[2], HIGH);
delay(75);
digitalWrite(led[0], LOW);
delay(75);
}
livello1=0;
stato=stato_visualizzazione;
delay(1500);
}

//livello successivo
void liv_successivo () {
for (int i=0; i<=livello1; i++) {
riproduzioneNote (note[0]);
riproduzioneNote (note[1]);
delay(200);
}
livello1++;
}

//sequenza riprodotta in caso d’errore
void errore (int note) {
tone (buzzer_pin, 200, 1000);
digitalWrite (led[note], HIGH);
delay(1000);
digitalWrite(led[note], LOW);
stato=stato_stop;
}

//sequenza riprodotta in caso di vittoria
void vittoria () {
int numero_casuale;
delay(200);
for (int i=0; i<12; i++) {
numero_casuale=random(4);
tone (buzzer_pin, note[numero_casuale], 150);
for (int c=0; c<4; c++) {
digitalWrite(led[c], HIGH);
}
delay (100);
for (int j=0; j<4; j++) {
digitalWrite(led[j], LOW);
}
delay(75);
}
stato=stato_stop;
}

//ripetizione sequenza
void sequenzaRipetuta () {
int notaSelezionata=letturaPulsanti();
if (notaSelezionata>=0){
if (notaSelezionata==sequenza[livello1]){
riproduzioneNote(notaSelezionata);
while(letturaPulsanti()!=-1);
livello1++;
if (livello1>=livello) {
if (livello1<livello) {
stato=stato_visualizzazione;
delay(1000);
} else {
vittoria();
}
}
} else {
errore(notaSelezionata);
}
}
}

Codice in C


Tags: