Go Down

Topic: Gioco di memoria (Read 101 times) previous topic - next topic

disne

Buongiorno a tutti,
vorrei realizzare il gioco di memoria con 3 led e 3 pulsanti dove viene mostrata una sequenza di accensioni via via più complesse: l'obiettivo è ripeterle correttamente premendo i bottoni corrispondenti;
il codice risponde solo alla pressione del primo pulsante:

Code: [Select]
#define LEDnum 3
#define ITERAZ 20
const byte LEDpin[LEDnum] = {13, 12, 11};
const byte BUTTONpin[LEDnum] = {6, 5, 4};
byte combinazione[ITERAZ];

byte letturaPrecedente[LEDnum];

int livello = 0;

void setup() {
  for (byte c = 0; c < LEDnum; c++) {
    pinMode(LEDpin[c], OUTPUT);
    pinMode(BUTTONpin[c], INPUT);
    letturaPrecedente[c] = digitalRead(BUTTONpin[c]);
  }

  randomSeed(analogRead(A0));
}

// Inizia il gioco
void loop() {
  // Aggiunge un elemento random alla sequenza
  combinazione[livello] = random(0, LEDnum);
  // Incrementa il livello raggiunto
  livello++;

  for (byte c = 0; c < livello; c++) {
    digitalWrite(LEDpin[combinazione[c]], HIGH);
    delay(500);
    digitalWrite(LEDpin[combinazione[c]], LOW);
    delay(500);
  }

  for (byte c = 0; c < livello; c++) {
    byte qualeBottone;

    do {
      qualeBottone = leggiBottone();
      delay(20);
    } while (qualeBottone == 255);

    if (qualeBottone != combinazione[c]) {
      livello = 0;
      break;
    }

  }

  if (livello >= 20)
    livello = 0;

  delay(10);
}

byte leggiBottone() {
  byte qualeBottone = 255;
  for (byte c = 0; c < LEDnum; c++) {
    byte letturaAttuale = digitalRead(BUTTONpin[c]);
    if (letturaAttuale == HIGH && letturaPrecedente[c] == LOW) {
      qualeBottone = c;
      letturaPrecedente[c] = HIGH;
    }
    else if (letturaAttuale == LOW && letturaPrecedente[c] == HIGH) {
      letturaPrecedente[c] = LOW;
    }
    return qualeBottone;
  }
}

Standardoil

non capisco perchè tieni traccia delle pressioni precedenti
me ne sfugge la logica
Prima legge di Nelson sugli studenti
per colpa di qualcuno non si fa credito a nessuno
se sei uno studente, diplomando o laureando
NON riceverai risposta da me, lamentati con i tuoi colleghi

Patrick_M

le pressioni precedenti vanno ripetute tutte le volte aggiungendo la nuova  immagino
è in vecchi gioco Simon

Standardoil

sì, lo ricordavo
io intendevo non nelll'array combinazione, nell'array letturaPrecedente, mi sembra una complicazione inutile
Prima legge di Nelson sugli studenti
per colpa di qualcuno non si fa credito a nessuno
se sei uno studente, diplomando o laureando
NON riceverai risposta da me, lamentati con i tuoi colleghi

Patrick_M

sì, lo ricordavo
io intendevo non nelll'array combinazione, nell'array letturaPrecedente, mi sembra una complicazione inutile
ops visto...

Go Up