Jogo da Forca

Jogo da forca, um clássico que todo o mundo já deve ter jogado. Agora você pode joga-lo com um Arduino, alguns LED e um Buzzer que toca a música caso você perca o jogo. Você pode alterar a palavra segredo e a dica que vai ser dada ao seu adversário.

Dificuldade:

Montagem:

Programação:


Material Utilizado:

Arduino Uno

Cabo USB A para B

Protoboard 830

Resistor 330Ω

LEDs

Buzzer

Alguns Jumpers

A Montagem

O Sketch

Para baixar o Sketch junto com o arquivo pitches.h clique aqui

/*   

Jogo da FORCA    

*/


#define buzzer 11 // Define o pino onde o buzzer será conectado
#define compasso 1500 //Altera o compasso da música
#include "pitches.h"

int
erros=0, acertos, i, j;
String
segredo= "LABORATORIO DE GARAGEM"; //<-Altere nesta String a palavra secreta
const
String dica= "Onde voce encontra as melhores informacoes sobre Arduino"; //<-Altere nesta linha a dica sobre a palavra utilizada
String tentativas = " -", test;
char
inChar;

const int gameover[] = {   
NOTE_C5,NOTE_G4,NOTE_E4,NOTE_A4,NOTE_B4,NOTE_A4,NOTE_GS4,NOTE_AS4, NOTE_GS4,   NOTE_E4,NOTE_D4,NOTE_E4

};

const int tempo_gameover[] = {   

4,4,4,8,8,8,8,8,8,   
12,12,4

};

boolean
temletra=0;

void
setup()
{   

Serial
.begin(9600);   
DDRD = 0xFC;    
PORTD = 0xFC;   
delay
(1000);   
PORTD = 0x00;   
delay(1000);   
PORTD = 0xFF;   

segredo.toUpperCase();   
Serial
.println();   
Serial
.println(" Jogo da forca");   
Serial
.println();   
Serial
.print("Dica: ");   
Serial
.println(dica);   
Serial
.println();   

for
(i = 0; i < segredo.length(); i++){     
if (segredo[i] == 0x20){       
test += " ";     
}     
else if(segredo[i] == 0x2D){       
test += "- ";     
}     
else
{       
test += "_ ";     
}   
}   

for
(i = 0; i < (segredo.length()*2); i++)
{     
Serial.print(test[i]);   
}   
Serial
.println();   
Serial
.println();
}

void
loop()
{   

while
(Serial.available() > 0) {     
char caracter = Serial.read();     

if(isAlphaNumeric(caracter) || isDigit(caracter)) {       
caracter = toupper(caracter);       
for
(j = 0; j < tentativas.length(); j++){         
if
( tentativas[j] == (caracter) ){           
temletra = 1;         
}       
}       

if (temletra == 1)       
{         
Serial
.println("Letra ja digitada");         
temletra = 0;       
}       

else
      
{         
tentativas += caracter;                  

if
(segredo.indexOf(caracter) <0 ){           
erros++;         
}         

acertos = 0;         

for
(j = 0; j < tentativas.length(); j++){           
for (i = 0; i < segredo.length(); i++){             
if( segredo[i]== tentativas[j]){               
test[i*2]=  segredo[i];               
acertos++;             
}           
}         
}          

Serial
.print("ERROS: ");         
Serial.println(erros);         
Serial
.println();         

//###########################################################
        
// imprime letras na tela
        
for ( i = 0; i < (segredo.length()*2); i++){           
Serial
.print(test[i]);         
}         
Serial
.println();         
Serial
.println();       
}      
}     

else
{       
Serial
.println("Digite um caracter valido");       
Serial
.println();     
}     

//Atualiza LEDs que indicam os erros
    
PORTD = 0xFF << (erros +2);     

if
(acertos == segredo.length()){       
Serial
.println("Voce venceu!!!");       
while
(1){       
}     
}     

if (erros >=6){       
Serial
.println("GAME OVER");       //Toca musica de GAME OVER       
for
(int Nota = 0; Nota < 12; Nota++) {         
int
tempo = compasso/tempo_gameover[Nota];         
tone
(11, gameover[Nota],tempo);         
delay
(tempo*1.2);       
}       
while
(1){       
}     
}   
}
}