Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JOGO GENIUS #176

Open
AlyssonPoli opened this issue Nov 19, 2023 · 0 comments
Open

JOGO GENIUS #176

AlyssonPoli opened this issue Nov 19, 2023 · 0 comments

Comments

@AlyssonPoli
Copy link

#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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant