Skip to content

JOGO GENIUS #176

@AlyssonPoli

Description

@AlyssonPoli

#include <Arduino.h>
#include <Bounce2.h>
#include <Tone.h>

const int LedPins[] = {2, 3, 4, 5}; // Pinos dos leds
const int ButtonsPins[] = {6, 7, 8, 9}; // Pinos dos botões correlacionados aos leds
const int BuzzerPin[] = {10}; // Pino do Buzzer
const int StartButton[] = {11}; // Pino do botão de iniciar o jogo
const int FreqLed[] = {262, 294, 330, 349};

int Sequence[10]; // Sequência dos 10 níveis para o jogo
int Level = 0; // Nível atual
int PressedButton; // Ao pressionar botão

void setup() {
Serial.begin(9600); // Inicia a comunicação serial

// Configurar os pinos dos LEDs como saída
for (int i = 0; i < 4; i++) {
pinMode(LedPins[i], OUTPUT);
}

// Configurar os pinos dos botões como entrada com pull-up
for (int i = 0; i < 4; i++) {
pinMode(ButtonsPins[i], INPUT_PULLUP);
}

// Configurar o pino do botão de início como entrada com pull-up
pinMode(StartButton[0], INPUT_PULLUP);

// Configurar o pino do buzzer como saída
pinMode(BuzzerPin[0], OUTPUT);
}

void loop() {
IniciarJogo();
IniciarGame();
}

// Função para acender um LED com uma frequência específica
void AcenderLED(int IndiceLed, int duracao = 500) {
// Desligar todos os LEDs
for (int i = 0; i < 4; i++) {
digitalWrite(LedPins[i], LOW);
}

// Ligar o LED específico
digitalWrite(LedPins[IndiceLed], HIGH);

// Tocar a frequência associada ao LED
tone(BuzzerPin[0], FreqLed[IndiceLed]);
delay(400); // tempo associado ao som

// Desligar o buzzer
noTone(BuzzerPin[0]);
}

// Função para gerar uma sequência aleatória
void gerarSequencia() {
for (int i = 0; i < 10; i++) {
Sequence[i] = random(0, 4); // Gera um número aleatório entre 0 e 3
}
}

// Função para iniciar o jogo
void IniciarJogo() {
if (digitalRead(StartButton[0]) == HIGH) {
// Botão "Start" pressionado
gerarSequencia();

// Mensagem de depuração
Serial.println("Jogo iniciado! Sequência gerada.");

// Acender todos os LEDs e tocar um som por 2 segundos
for (int i = 0; i < 4; i++) {
  AcenderLED(i, 300);
}
delay(2000);

// Desligar todos os LEDs e o buzzer
for (int i = 0; i < 4; i++) {
  digitalWrite(LedPins[i], LOW);
}
noTone(BuzzerPin[0]);

// Mensagem de depuração
Serial.println("Preparando para iniciar o jogo...");

// Iniciar o jogo
Level = 0;

}
}

// Função para jogar o jogo
void IniciarGame() {
if (Level < 10) {
// Adicione mensagens de depuração
Serial.print("Aguardando botão pressionado - Nível ");
Serial.println(Level + 1);

// Mostrar a sequência atual
for (int i = 0; i <= Level; i++) {
  AcenderLED(Sequence[i], 500); // Acende cada LED da sequência por 500ms
  delay(300); // Pequeno atraso entre os LEDs
}

// Desligar todos os LEDs e aguardar o jogador pressionar um botão
for (int i = 0; i < 4; i++) {
  digitalWrite(LedPins[i], LOW);
}

// Aguardar o jogador pressionar um botão
PressedButton = waitForButtonPress();

// Adicione mensagens de depuração
Serial.print("Botão pressionado: ");
Serial.println(PressedButton);

// Comparar a entrada do jogador com a sequência
if (PressedButton == Sequence[Level]) {
  // Se o botão estiver correto, avançar para o próximo nível
  Level++;

  // Adicione mensagens de depuração
  Serial.println("Resposta correta! Avançando para o próximo nível.");
} else {
  // Se o botão estiver errado, toca um som de erro
  tone(BuzzerPin[0], 1000, 500); // Toca um som de erro por 500ms
  delay(1000); // Aguarda antes de reiniciar o jogo

  // Adicione mensagens de depuração
  Serial.println("Resposta incorreta. Reiniciando o jogo.");

  // Reiniciar o jogo
  Level = 0;
}

} else {
// Adicione mensagens de depuração
Serial.println("Jogador completou todos os níveis!");

// Adicione aqui o código adicional para o caso de o jogador completar todos os níveis, se necessário.

// Reiniciar o jogo
Level = 0;

}
}

// Função para esperar o jogador pressionar um botão
int waitForButtonPress() {
int BotaoPressionado = -1;
while (BotaoPressionado == -1) {
for (int i = 0; i < 4; i++) {
if (digitalRead(ButtonsPins[i]) == LOW) {
BotaoPressionado = i;
delay(100); // Debounce
while (digitalRead(ButtonsPins[i]) == LOW) {
// Aguardar até que o botão seja liberado
}
}
}
}
return BotaoPressionado;
}

Gostaria de ajuda nesse código, ele não está saindo do nível 1. Mesmo se eu acertar o nível 1, ele já para, ele não incrementa para o próximo nível. No caso queria que ele continuasse até o nível 10

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions