Estou com um problema neste código do jogo e não vejo onde está. Por já ter um pouco de familiaridade com linguagem C, tomei iniciativa de escrever o código do jogo segundo a minha própria lógica de acordo com a proposta do jogo Genius.
Este é o meu código:
#define LED_VERMELHO 2
#define LED_BRANCO 3
#define LED_AZUL 4
#define LED_AMARELO 5
#define BOTAO_VERMELHO 10
#define BOTAO_BRANCO 11
#define BOTAO_AZUL 12
#define BOTAO_AMARELO 13
int tempo=500;
int sequenciaLed[4];
int botoes[4];
void setup() {
Serial.begin(9600);
iniciaPortas();
iniciaJogo();
}
void iniciaJogo(){
sequenciaLed[0] = LED_VERMELHO;
sequenciaLed[1] = LED_BRANCO;
sequenciaLed[2] = LED_AZUL;
sequenciaLed[3] = LED_AMARELO;
botoes[0] = BOTAO_VERMELHO;
botoes[1] = BOTAO_BRANCO;
botoes[2] = BOTAO_AZUL;
botoes[3] = BOTAO_AMARELO;
int leitura_aleatoria = analogRead(0);
randomSeed(leitura_aleatoria);
}
int estado;
#define N 6
int sequencia[N+1];
int jogada=1;
int resposta;
int acertou = 1;
void loop() {
if(jogada > 1) {
for(int j=0; j<jogada-1; j++) {
resposta = checaRespostaJogador();
Serial.println(resposta);
if(resposta == sequencia[j]){
acertou++;
Serial.println("acertou");
}
else {
piscaLedDerrota();
Serial.println("perdeu");
}
}
}
if(jogada < N+1 && acertou == jogada){
Serial.println("entrou");
int led_aleatorio = random(sequenciaLed[0], sequenciaLed[3]+1);
for(int i=0; i<jogada; i++) {
sequencia[jogada - 1] = led_aleatorio;
piscaLed(sequencia[i], tempo);
}
jogada++;
acertou=0;
}
}
int checaRespostaJogador(){
for(int j=0; j<1; j=0) {
for(int i=0; i<4; i++){
estado = digitalRead(botoes[i]);
if(estado == 0){
return sequenciaLed[i];
}
}
}
}
void iniciaPortas() {
pinMode(LED_AZUL, OUTPUT);
pinMode(LED_BRANCO, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
pinMode(LED_AMARELO, OUTPUT);
pinMode(BOTAO_VERMELHO, INPUT_PULLUP);
pinMode(BOTAO_BRANCO, INPUT_PULLUP);
pinMode(BOTAO_AZUL, INPUT_PULLUP);
pinMode(BOTAO_AMARELO, INPUT_PULLUP);
}
void piscaLed(int led, int tempo) {
digitalWrite(led, HIGH);
delay(tempo);
digitalWrite(led, LOW);
}
void piscaLedDerrota() {
for(int i=0; i<10; i++) {
digitalWrite(sequenciaLed[0], HIGH);
digitalWrite(sequenciaLed[3], HIGH);
delay(300);
digitalWrite(sequenciaLed[0], LOW);
digitalWrite(sequenciaLed[3], LOW);
delay(500);
}
}
A ordem que eu dei no loop() foi para que o primeiro LED piscasse quando jogada = 1 e a seguir entrasse neste trecho aqui:
if(jogada > 1) {
for(int j=0; j<jogada-1; j++) {
resposta = checaRespostaJogador();
Serial.println(resposta);
if(resposta == sequencia[j]){
acertou++;
Serial.println("acertou");
}
else {
piscaLedDerrota();
Serial.println("perdeu");
}
}
}
Ao conferir o primeiro botão com o primeiro LED que piscou, o código confere e exibe "acertou" na telinha do Serial, mas o problema é que o "acertou" é exibido duas vezes consecutivas e não estou enxergando o porquê.
Tem como dar uma conferida pra mim, por favor? Obrigado.