Go Down

Topic: Gioco di memoria (Read 173 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 (che sono io):
A parità di risultato maggiore
è il pensiero, minore il lavoro.
Quindi prima di fare pensa!

Patrick_M

le pressioni precedenti vanno ripetute tutte le volte aggiungendo la nuova  immagino
è in vecchi gioco Simon
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Standardoil

sì, lo ricordavo
io intendevo non nelll'array combinazione, nell'array letturaPrecedente, mi sembra una complicazione inutile
Prima legge di Nelson (che sono io):
A parità di risultato maggiore
è il pensiero, minore il lavoro.
Quindi prima di fare pensa!

Patrick_M

sì, lo ricordavo
io intendevo non nelll'array combinazione, nell'array letturaPrecedente, mi sembra una complicazione inutile
ops visto...
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Go Up