Faça seu Jogo Pedra Papel Tesoura com Arduino | jo ken po | Shield LCD Keypad da DFRobot

Neste projeto vamos fazer um Jogo de Pedra Papel e Tesoura (ou jo ken po) com o Arduino UNO e um Shield LCD Keypad da DFRobot

Apresentação: Júlio Vansan Gonçalves

Materiais:

  • Arduino UNO
  • Shield LCD Keypad da DFRobot
  • Cabo USB

Para Comprar
Shield LCS Keypad da DFRobot
https://produto.mercadolivre.com.br/MLB-1434240145-display-lcd-keypad-shield-16×2-botoes-arduino-_JM

Link códigos usados no vídeo

/* *************************
 *  Projeto Bacana - 10/2021
 *  www.projetobacana.com.br
 *  Júlio Vansan Gonçalves 
 *  ************************
 *  Jogo Pedra Papel e Tesoura, baseado na biblioteca <LiquidCrystal.h>
*  Placa Arduino UNO
*  com Shield de LCD com teclas DF ROBOT
*/

#include <LiquidCrystal.h>
// Selecione os pinos que serão usados para o LCD, se for usar o Shield não altere !
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Definições de Variaveis e botões do painel
int lcd_key     = 0;
int adc_key_in  = 0;
int escolhaArduino = 0;
int escolhaJogador;
int delayResultado=2000;
int delayPlacar=1500;
int placarJogador=0;
int placarArduino=0;
#define btnTESOURA  0
#define btnOK     1
#define btnPAPEL 2
#define btnPEDRA   3
#define btnSELECT 4
#define btnNONE   5

// Função de Leitura dos Botões
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);    // Leitura do valor recebido pelos botões
 // Os valores dos botoes estão abaixo, pode ter variações de valores
 if (adc_key_in > 1000) return btnNONE; 
 if (adc_key_in < 50)   return btnTESOURA;  
 if (adc_key_in < 150)  return btnOK; 
 if (adc_key_in < 300)  return btnPAPEL; 
 if (adc_key_in < 450)  return btnPEDRA; 
 if (adc_key_in < 700)  return btnSELECT;  
 return btnNONE;  // Se nenhum botão for pressionado retorna este valor
}

// Função que mostra o resultado no LCD
int resultado(){
    lcd.setCursor(0,0);
    lcd.print("        x        ");
    lcd.setCursor(0,0);
    if (escolhaArduino == 1) lcd.print("Pedra");  
    if (escolhaArduino == 2) lcd.print("Papel");  
    if (escolhaArduino == 3) lcd.print("Tesoura");
  
    lcd.setCursor(9,0); 
    if (escolhaJogador == 1) lcd.print("  Pedra");  
    if (escolhaJogador == 2) lcd.print("  Papel");  
    if (escolhaJogador == 3) lcd.print("Tesoura"); 
}

// Função que mostra a tela inicial
int telaInicial(){
 lcd.setCursor(0,0);
            
 lcd.print("Projeto Bacana   ");
 escolhaArduino = 0;  
}

//Função que verifica todas as possibilidades do jogo e mostra quem ganhou
int jogo()
{
  if (((escolhaJogador == 1) && (escolhaArduino == 1)) || ((escolhaJogador == 2) && (escolhaArduino == 2)) || ((escolhaJogador == 3) && (escolhaArduino == 3))){
    lcd.setCursor(0,1);
    lcd.print("-> Empatamos! <-");
    resultado();
    delay(delayResultado);
    telaInicial();
  }
  
  if ((escolhaJogador == 1) && (escolhaArduino == 2)){
    lcd.setCursor(0,1);
    lcd.print("Eu Ganhei !!      ");
    placarArduino ++;    
    resultado();
    delay(delayResultado);
    telaInicial();
  }

  if ((escolhaJogador == 1) && (escolhaArduino == 3)){
    lcd.setCursor(0,1);
    lcd.print("Voce Venceu !    ");
    placarJogador ++;
    resultado();
    delay(delayResultado);
    telaInicial();
  }

  if ((escolhaJogador == 2) && (escolhaArduino == 1)){
    lcd.setCursor(0,1);
    lcd.print("Voce Venceu !   ");
    placarJogador ++;    
    resultado();
    delay(delayResultado);
    telaInicial();
  }

  if ((escolhaJogador == 2) && (escolhaArduino == 3)){
    lcd.setCursor(0,1);
    lcd.print("Eu Ganhei !!      ");
    placarArduino ++;        
    resultado();
    delay(delayResultado);
    telaInicial();
  }

  if ((escolhaJogador == 3) && (escolhaArduino == 1)){
    lcd.setCursor(0,1);
    lcd.print("Eu Ganhei !!      ");
    placarArduino ++;    
    resultado();
    delay(delayResultado);
    telaInicial();
  }

  if ((escolhaJogador == 3) && (escolhaArduino == 2)){
    lcd.setCursor(0,1);
    lcd.print("Voce Venceu !   ");
    placarJogador ++;    
    resultado();    
    delay(delayResultado);
    telaInicial();
  }  
}  


void setup()
{
 lcd.begin(16, 2);  // Inicia a Biblioteca
 // Mensagens iniciais sem utilidade prática !!!
 lcd.setCursor(0,0);
 lcd.print("Julio Vansan");
 lcd.setCursor(0,1);
 lcd.print("Apresenta . . . . . ");
 delay(delayPlacar);
 lcd.setCursor(0,0); 
 lcd.print("Projeto Bacana   "); 
 lcd.setCursor(0,1);
 lcd.print("................                   ");
 delay(delayPlacar); 
}
 
void loop()
{
 lcd.setCursor(0,1); 
 lcd_key = read_LCD_buttons();  // Leitura dos botões

 switch (lcd_key)               // Dependendo do botão pressionado, uma ação será executada.
 {
   case btnTESOURA:
     {
     lcd.print("-->> Tesoura    "); // Antes de iniciar o Jogo exibe a mensagem do botão correspondente
     escolhaJogador=3;
     jogo();
     break;
     }
   case btnPEDRA:
     {
     lcd.print("-->> Pedra      "); // Antes de iniciar o Jogo exibe a mensagem do botão correspondente
     escolhaJogador=1;
     jogo();
     break;
     }
   case btnOK:
     { 
     lcd.print("Estou Escolhendo   "); 
     escolhaArduino=random(1,4);  // Enquanto botão pressionado, o arduino irá escolher numeros aleatórios entre 1 e 3
     break;
     }
   case btnPAPEL:
     {
     lcd.print("-->> Papel      "); // Antes de iniciar o Jogo exibe a mensagem do botão correspondente
     escolhaJogador=2;    
     jogo(); 
     break;
     }
   case btnSELECT: // mostra o placar do Jogo
     {
       lcd.setCursor(0,0);
       lcd.print("Atencao . . . .        ");
       lcd.setCursor(0,1); 
       lcd.print("   Resultados    ");
       delay(delayPlacar);

       lcd.setCursor(0,0);
       lcd.print("                 ");
       lcd.setCursor(0,1); 
       lcd.print("                 ");
//       delay(delayPlacar/2); //tempo para suspense
       
       lcd.setCursor(0,0);
       lcd.print("Eu    = ");
       lcd.setCursor(8,0);
       lcd.print(placarArduino);
       lcd.setCursor(0,1); 
       lcd.print("Voce  = ");
       lcd.setCursor(8,1);
       lcd.print(placarJogador);
       delay(delayResultado);
       telaInicial();

     break;
     }
     case btnNONE:
     {
     if (escolhaArduino == 0)
       lcd.print("UP Para Iniciar! "); // Se não for pressionado a tecla ok , mostra esta mensagem
     else
       lcd.print("Pode Escolher !!    ");   // se o arduino já escolheu o numero, fica esperando sua jogada
     break;
     }
 }
}

#Projeto #arduino  #Jogo #PedraPapelTesoura #jokenpo #DIY #maker #microcontrolador #façavocemesmo
— 
Curta, compartilhe e inscreva-se para ficar atualizado com os nossos conteúdos! 
Para saber mais sobre o Canal Projeto Bacana: 
E-mail: contato@projetobacana.com.br
Site: https://www.projetobacana.com.br/  
Facebook:  https://www.facebook.com/projetobacana.com.br
Instagram:  https://www.instagram.com/projetobacana.com.br/
Youtube:  https://www.youtube.com/channel/UC0e1bfaL0-gnAP2KQA5vxqQ