19-2 Grupo 1

## **Autores**

Eduardo Fonseca Pavanatti – 0040961813014
João Felipe de Lima Coleoni – 0040961813028
João Pedro Mendonça – 0040961813031
Josef Henrique Zambreti – 0040961813029
Mariangela Machado Piconi – 0040961813035
Rafael Giampaulo - 0040961813018

## **Resumo**

ArDuinRPG é um sistema de RPG tradicional em texto, jogável a partir de push buttons
e com respostas visuais a partir de LEDs indicadores.

## **Softwares/Materiais Utilizados**

* Arduino IDE
* Arduino Genuino UNO
* 2 push buttons de ação
* 4 push buttons de movimento
* Cabo USB
* X Cabos Jumper
* Peças de LEGO
* LED indicador

## **Metodologia**

O **ArDuinRPG** foi desenvolvido com o objetivo de construir um RPG utilizando
componentes do Arduino para simular um Arcade; para isso, foi utilizado o
software Arduino IDE com a resposta gráfica da porta COM que apresenta o
desenvolvimento do jogo.

Na história do jogo, temos um personagem representando um herói que irá se
aventurar por novos lugares, recebendo uma missão e posteriormente
enfrentando combates. A interação do player com o game é feita a partir das
placas de botões, uma placa com dois push buttons utilizados nas ações do
personagem e outra placa com quatro push buttons utilizada para controlar o
movimento do player.

Além das interações com os botões realizadas no controle construído em LEGO,
temos também as respostas visuais dos LEDs, que serviram como indicadores de vida
(LED colorido que alterna de verde a vermelho) e mana (LED azul).

## **Desenvolvimento**

No primeiro momento a programação do jogo era desenvolvida baseada nos
controles de movimento do personagem, pela placa de quatro botões, e resposta
gráfica da porta COM; depois foi definida a função dos outros componentes: o
LED colorido indicaria a vida do personagem em questão de acordo com a cor, aonde
o verde significa vida totalmente cheia, amarela pela metade, vermelha
totalmente vazia, passando assim por essa escala RGB (ver fotos abaixo).

Com a inclusão de combates e interações durante a história, foi necessária a
implantação de mais uma placa de botão para controle dessas ações, sendo que o botão
azul indica o ataque/ação do jogo, e o verde a magia.

## **Resultado**

Apesar do código massivo e trabalhoso, conseguimos atingir resultados
satisfatórios com o projeto, obtendo assim um jogo de RPG totalmente funcional com um sistema
único baseado em sistemas antigos, a partir dos recursos disponibilizados pelo
professor Perrotti.

## **Conclusão**

O projeto foi concluído com êxito nas aplicações desenvolvidas, os botões
funcionaram perfeitamente com as interações do jogador e os LEDs ajudaram
na imersão do jogador dentro da história proposta do nosso RPG, facilitando até
a visualização dos seus status por estes serem indicados em um único
controle.

Com a experiência da construção desse jogo, o conhecimento obtido será de
grande valia para a implantação em sistemas desse tipo em nossos futuros
jogos, tornando viável até mesmo a elaboração de projetos com outros recursos do Arduino para
garantir uma maior interatividade e imersão do jogador.

Uma das maiores dificuldades encontrada durante o projeto foi manejar a memoria para ter espaço para todas as variáveis e códigos, sendo necessário fazer uma biblioteca de arrays de char com todas as frases usadas no jogo. Outro desafio foi fazer o gerenciamento de telas, para saber em que momento está ocorrendo um combate ou se o player localiza-se no mapa do mundo.

## **Código**

```
#define LIN 11
#define COL 70
  #define btLeft 4
#define btRight 3
#define btUp 5
  #define btDown 2

int pinMana[] = {A0,A1,A2,A3};

#define pinAzul 10
#define pinVermelho 11
#define pinVerde 9

#define btGreen 7
#define btBlue 6
//Controladores do Jogo
//Tela do jogo 1)Mapa, 2)Batalha
int Tela = 1;
int Turno = 0;
int Boss = 0;
int contX = 0;
bool LegendaON = false;
bool Legenda2ON = false;
bool LegendaDanoOFF = false;

// Status Player
int P_Vida = 510;
int P_Mana = 0;
int AuxDano = 0;
int Acao = 0;
// Cordenada Player
int Px = 3;
int Py = 6;
// Ultimas Cordenadas do Player
int LPy = 1;
int LPx = 1;

// Cordenada Cidade
int Cx1 = 1;
int Cx2 = 0;
int Cy1 = 0;
int Cy2 = 2;

// Cordenada Floresta
int Fx1 = 6;
int Fx2 = 5;
int Fy1 = 10;
int Fy2 = 13;

// Cordenada Piramide/Vulcao
int Vx1 = 9;
int Vx2 = 7;
int Vy1 = 50;
int Vy2 = 55;

// Cordenada CasteloMal
int CMx1 = 3;
int CMx2 = 1;
int CMy1 = 60;
int CMy2 = 68;

// Status Inimigo
const char I_Nome[] PROGMEM  = {"Choomper"};
const char I_Nome2[] PROGMEM  = {"Espirito do Fogo"};
const char I_Nome3[] PROGMEM  = {"Rei Dragão"};
int I_Vida = 510;
bool I_Vivo = true;

//contadores
int i,j,k,len;
char myChar;

//BibliotecaDeStringsUtilizadasNaLegenda
const char Mapa0[] PROGMEM  = {"Nada encontrado, continue andando..."};
const char Mapa1[] PROGMEM  = {"Aperte o botão AZUL para entrar na Cidade"};
const char Mapa2[] PROGMEM  = {"Aperte o botão AZUL para entrar na Floresta"};
const char Mapa3[] PROGMEM  = {"Aperte o botão AZUL para entrar na Montanha"};
const char Mapa4[] PROGMEM  = {"Aperte o botão AZUL para entrar no Castelo"};
//Cidade
const char Cidade0[] PROGMEM  = {"O povo da cidade precisa da sua ajuda na floresta."};
const char Cidade1[] PROGMEM  = {"Um monstro terrível esta por la."};
const char Cidade2[] PROGMEM  = {"As pessoas ficam muito felizes por tua nova conquista."};
const char Cidade3[] PROGMEM  = {"Uma criança pede para você procurar a irmã dele, na floresta."};
const char Cidade4[] PROGMEM  = {"A mãe da criança te agradece e você ganha um abraço das duas"};
const char Cidade5[] PROGMEM  = {"crianças. Quando de repente escuta um rugido vindo de longe."};
const char Cidade6[] PROGMEM  = {"O povo está assustado com o rugido e pensa que ele veio do"};
const char Cidade7[] PROGMEM  = {"castelo."};
const char Cidade8[] PROGMEM  = {"O povo te agradece pela ajuda, você sente-se bem ao ver a"};
const char Cidade9[] PROGMEM  = {"felicidade de todos."};
//Floresta
const char Floresta0[] PROGMEM  = {"Você encontra uma criança perdida e assustada, ela diz que veio"};
const char Floresta1[] PROGMEM  = {"para cá quando se perdeu do seu irmão correndo de um dragão"};
const char Floresta2[] PROGMEM  = {"Você encontra alguns animais tranquilos pela floresta"};
const char Floresta3[] PROGMEM  = {"nada para se preocupar."};
//Montanha
const char Montanha0[] PROGMEM  = {"O povo da cidade precisa da sua ajuda na montanha."};
const char Montanha1[] PROGMEM  = {"Um monstro terrivel esta por la."};
const char Montanha2[] PROGMEM  = {"batalha contra o dragão"};
const char Montanha3[] PROGMEM  = {"A montanha está bem silenciosa e vazia, aparentemente"};
const char Montanha4[] PROGMEM  = {"não tem nada nem ninguém no seu topo."};
//Castelo
const char Castelo1[] PROGMEM  = {"Os guardas não te deixam entrar, você não é nobre e não tem a"};
const char Castelo2[] PROGMEM  = {"permissão para entrar."};
const char Castelo3[] PROGMEM  = {"Ouvimos os seus feitos pela cidadela, o Rei quer que você prove a sua"};
const char Castelo4[] PROGMEM  = {"lealdade, matando o espírito  malvado que mora no topo da montanha"};
const char Castelo5[] PROGMEM  = {"Muito obrigado pela ajuda nobre guerreiro, aqui esta sua permissão"};
const char Castelo6[] PROGMEM  = {"para entrar no castelo quando quiser."};
const char Castelo7[] PROGMEM  = {"O rei esta muito feliz com a sua visita, ele agradece a sua ajuda na"};
const char Castelo8[] PROGMEM  = {"montanha."};
const char Castelo9[] PROGMEM  = {"A rainha diz que o Rei e a Princesa foram raptados por um dragão, ela"};
const char Castelo10[] PROGMEM  = {"diz que viu ele voando até a montanha."};
const char Castelo11[] PROGMEM  = {"Obrigado nobre guerreiro pela ajuda, você agora é o chefe da guarda"};
const char Castelo12[] PROGMEM  = {"real e além disso todos da cidadela poderão entrar no castelo."};
const char Castelo13[] PROGMEM  = {"Pode entrar"};
//Batalha
const char Batalha0[] PROGMEM  = {"Escolha a sua ação na batalha:"};
const char Batalha1[] PROGMEM  = {"Azul)Ataque Básico  Verde)Magia Cura  ↑)Magia Básica  ↓)Magia Suprema"};
const char Batalha2[] PROGMEM  = {"Sem mana para a ação..."};
const char Batalha3[] PROGMEM  = {"Você balança a sua espada e causa "};
const char Batalha4[] PROGMEM  = {"Você concentra-se e canaliza uma magia de cura, recuperando "};
const char Batalha5[] PROGMEM  = {"Você canaliza uma esfera de poder e a lança causando "};
const char Batalha6[] PROGMEM  = {"Você sente uma grande força correndo por suas veias e desfere um"};
const char Batalha7[] PROGMEM  = {"poderoso laser de aura causando "};
const char Batalha8[] PROGMEM  = {"Parabéns Herói  você venceu essa batalha!!!!"};
//Chomper
const char Chomper0[] PROGMEM  = {"Choomper morde a tua cabeça causando "};
const char Chomper1[] PROGMEM  = {"Choomper te morde causando "};
const char Chomper2[] PROGMEM  = {"Choomper tenta te morder porem você desviou"};
//Espirito
const char Espirito0[] PROGMEM  = {"Espirito cria uma chuva de bolas de fogo te causando "};
const char Espirito1[] PROGMEM  = {"Espirito incendeia te causando "};
const char Espirito2[] PROGMEM  = {"Espirito tenta te incendiar porem você desviou"};
//Dragão
const char Dragao0[] PROGMEM  = {"Rei Dragão cria uma bola de fogo em sua direção te causando "};
const char Dragao1[] PROGMEM  = {"Rei Dragão te acerta uma patada causando "};
const char Dragao2[] PROGMEM  = {"Rei Dragão tenta te acertar com uma patada porem erra"};
//Final
const char FIM1[] PROGMEM  = {"Você provou ser um Heroi de verdade, o mundo de ONI esta salvo graças"};
const char FIM2[] PROGMEM  = {"a sua bondade e coragem. Obrigado por ter Jogado."};
const char FIM3[] PROGMEM  = {"*******************  VOCÊ MORREU, TENTE NOVAMENTE  *******************"};

void setup() {
  Serial.begin(57600);
  pinMode(btLeft, INPUT_PULLUP);
  pinMode(btRight, INPUT_PULLUP);
  pinMode(btUp, INPUT_PULLUP);
  pinMode(btDown, INPUT_PULLUP);

  pinMode(btGreen, INPUT_PULLUP);
  pinMode(btBlue, INPUT_PULLUP);

    pinMode(pinAzul, OUTPUT);
  pinMode(pinVermelho, OUTPUT);
  pinMode(pinVerde, OUTPUT);

    analogWrite(pinAzul, 255);
  analogWrite(pinVermelho, 255);
  analogWrite(pinVerde, 255);

    for (int i = 0; i < 4; i++) {
    pinMode(pinMana[i], OUTPUT);
  }

    SetMana();
    DesenhaMapa();
  SetVida();
  }

  unsigned long next = 0;
  int acao_aplicada = 0;
  int morto;
  #define lapse 250

void loop() {
  // put your main code here, to run repeatedly:
  LerControles();
  if(acao_aplicada == 1){
    if(Tela ==1){
      DesenhaMapa();
    }else if(Tela == 2){
      DesenhaBatalha(Boss);
    }else if(Tela == 3){
      DesenhaFim();
    }
    }else if(Turno == 1 && P_Vida > 0){
    delay(1500);
    Turno = 2;
      DesenhaBatalha(Boss);
  }else if(Turno == 2 && P_Vida > 0){
    delay(1500);
    Turno = 0;
      acao_aplicada = 1;
  }
    SetVida();
    SetMana();
    if(Tela == 4 && morto == 0){
    delay(1500);
    DesenhaMorte();
  }
  }

  void LerControles(){
    boolean valLF = !digitalRead(btLeft);
  boolean valRG = !digitalRead(btRight);
  boolean valUP = !digitalRead(btUp);
  boolean valDOWN = !digitalRead(btDown);

  boolean valGreen = !digitalRead(btGreen);
  boolean valBlue = !digitalRead(btBlue);

    if(millis() >= next && Tela == 1)
  {
      LPy = Py;
      LPx = Px;
      if(valLF && acao_aplicada == 0)
    {
        Px--;
        next = millis() + lapse;
      acao_aplicada = 1;
    }
      if(valRG && acao_aplicada == 0)
    {
        Px++;
        next = millis() + lapse;
      acao_aplicada = 1;
    }
      if(valUP && acao_aplicada == 0)
    {
        Py--;
        next = millis() + lapse;
      acao_aplicada = 1;
    }
      if(valDOWN && acao_aplicada == 0)
    {
        Py++;
        next = millis() + lapse;
      acao_aplicada = 1;
    }
      if(valBlue && acao_aplicada == 0)
    {
        if(Px == 2 && Py == 1){
        //Cidade
        if(Boss <= 1){
          Boss = 1;
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 5 || Boss == 6){
          Boss = 6;
          P_Vida = 510;
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 8){
          P_Vida = 510;
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 9){
          P_Vida = 510;
          LegendaON = true;
          Legenda2ON = true;
        }else{
            P_Vida = 510;
          LegendaON = true;
          Legenda2ON = true;
        }
        }else if(Px == 7 && Py == 12){
        //Floresta
        if(Boss == 1){
          I_Vida = 500;
          I_Vivo = true;
          Tela = 2;
          Boss++;
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 6){
          LegendaON = true;
          Legenda2ON = true;
        }else{
            LegendaON = true;
          Legenda2ON = true;
        }
        }else if(Px == 10 && Py == 52){
        //Montanha
        if(Boss == 3){
          I_Vida = 750;
          I_Vivo = true;
          Tela = 2;
          Boss++;
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 10){
          Boss = 11;
          I_Vida = 1000;
          I_Vivo = true;
          Tela = 2;
          LegendaON = true;
          Legenda2ON = true;
        }else{
            LegendaON = true;
          Legenda2ON = true;
        }
        }else if(Px == 4 && Py == 65){
        //Castelo
        if(Boss < 1){
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 2 || Boss == 3){
          Boss = 3;
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 4){
          Boss = 5;
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss > 4 && Boss < 9){
          LegendaON = true;
          Legenda2ON = true;
        }else if(Boss == 9 || Boss == 10){
          LegendaON = true;
          Legenda2ON = true;
          Boss = 10;
        }else if(Boss == 11){
          LegendaON = true;
          Legenda2ON = true;
          Tela = 3;
        }else{
            LegendaON = true;
          Legenda2ON = true;
        }
        }
        next = millis() + lapse;
      acao_aplicada = 1;
    }

      if(Px<0){
        Px = 0;
      }
      if(Py<0){
        Py = 0;
      }
      if(Px>LIN-1){
      Px = LIN-1;
    }
      if(Py>COL-1){
      Py = COL-1;
    }
        Py = LPy;
        Px = LPx;
    }
    }
    else if(millis() >= next && Tela == 2 && Turno == 0)
  {
      if(valLF && acao_aplicada == 0)
    {
        next = millis() + lapse;
      acao_aplicada = 1;
      if(P_Mana > 0){
        P_Mana = P_Mana - 1;
        AuxDano = random(100, 150);
        I_Vida = I_Vida - AuxDano;
        Acao = 3;
      }else{
          Acao = 5;
      }
        Turno = 1;
    }
      if(valRG && acao_aplicada == 0)
    {
        next = millis() + lapse;
      acao_aplicada = 1;
      if(P_Mana > 3){
        P_Mana = P_Mana - 4;
        AuxDano = random(550, 700);
        I_Vida = I_Vida - AuxDano;
        Acao = 4;
      }else{
          Acao = 5;
      }
        Turno = 1;
    }
      if(valGreen && acao_aplicada == 0)
    {
        next = millis() + lapse;
      acao_aplicada = 1;
      if(P_Mana > 1){
        P_Mana = P_Mana -2;
        AuxDano = random(150, 300);
        P_Vida = P_Vida + AuxDano;
        Acao = 2;
      }else{
          Acao = 5;
      }
        Turno = 1;
    }
      if(valBlue && acao_aplicada == 0)
    {
        next = millis() + lapse;
      AuxDano = random(75, 100);
      I_Vida = I_Vida - AuxDano;
      acao_aplicada = 1;
      Acao = 1;
        Turno = 1;
    }
    }
  }

  void SetVida(){
    if(P_Vida > 255){
    analogWrite(pinVermelho, (P_Vida - 255));
    analogWrite(pinVerde, 0);
  }else{
      analogWrite(pinVermelho, 0);
    analogWrite(pinVerde, 255 - P_Vida);
  }

    if(P_Vida <= 0){
    analogWrite(pinVermelho, 0);
    analogWrite(pinVerde, 255);
    Tela = 4;
    }

    if(P_Vida > 510){
    P_Vida = 510;
    analogWrite(pinVermelho, 255);
    analogWrite(pinVerde, 0);
  }
  }

  void SetMana(){
    for (int i = 0; i < 4; i++) {
    digitalWrite(pinMana[i], false);
  }
    if(P_Mana > 0){
    digitalWrite(pinMana[0], true);
  }
    if(P_Mana > 1){
    digitalWrite(pinMana[1], true);
  }
    if(P_Mana > 2){
    digitalWrite(pinMana[2], true);
  }
    if(P_Mana > 3){
    digitalWrite(pinMana[3], true);
  }

  }

  void DesenharLegenda(const char LegChar[]){
    len = strlen_P(LegChar);
  for (k = 0; k < len; k++)
  {
      myChar =  pgm_read_byte_near(LegChar + k);
    Serial.print(myChar);
  }
    if(Turno > 0 && Tela < 3 && Acao != 4 && !LegendaDanoOFF){
    Serial.print(AuxDano);
    Serial.print(F(" de dano"));
  }
    if(Acao == 4){
    Acao = 10;
    }
  }

  void DesenhaMapa(){
    //Desenha o mapa
  i=0;
    for (i=0; i< LIN; i++)
  {
      j=0;
      for (j=0; j< COL; j++){
      if(Px == i && Py == j){
         Serial.print(F("♥"));
      }
        else if((Cx1 >= i && Cx2 <= i) && (Cy1 <= j && Cy2 >= j)){
        if(Cy1 <= j && 1 == i){
          Serial.print(F("@"));
        }else if(Cy1 == j && 0 == i){
          Serial.print(F(" ▲ "));
        }else{
            Serial.print(F(""));
        }
        }
        else if((Fx1 >= i && Fx2 <= i) && (Fy1 <= j && Fy2 >= j)){
        if(Fy1 < j){
          Serial.print(F("♣"));
        }else{
            Serial.print(F(""));
        }
        }
        Serial.print(F("x"));
      }
        else if((CMx1 >= i && CMx2 <= i) && (CMy1 <= j && CMy2 >= j)){
        if(CMx2 == i && CMy1 == j){
          Serial.print(F(" █▄█▄█"));
        }
          else if(CMx1 == i && CMy1 == j){
          Serial.print(F(" █▄▄▄█"));
        }
          else if(CMx1 > i && CMx2 < i && CMy1 == j){
          Serial.print(F(" █     █"));
        }
        }
        else if((Vx1 >= i && Vx2 <= i) && (Vy1 <= j && Vy2 >= j)){
        if(Vx2 == i && Vy1 == j){
          Serial.print(F("  ▲   "));
        }
          else if(Vx1 == i && Vy1 == j){
          Serial.print(F("▲▲▲ "));
        }
          else if(Vx1 > i && Vx2 < i && Vy1 == j){
          Serial.print(F(" ▲▲  "));
        }
        }
        else{
          Serial.print(".");
      }
      }
      Serial.println("");
  }
    //Desenha Legenda
  for (i=0; i<4; i++)
  {
      j=0;
      for (j=0; j<COL; j++)
    {
        if(i == 0 || i == 3){
        Serial.print("-");
      }
        else if(i == 1 && j == 0){
        GERALEGENDA(1);
      }
        else if(i == 2 && j == 0){
        GERALEGENDA(2);
      }
      }
     Serial.println("");
  }
    acao_aplicada = 0;
}

void GERALEGENDA(int X){
  if(!LegendaON && !Legenda2ON){
    if(Px == 2 && Py == 1){
      //Cidade
        if(X == 1) DesenharLegenda(Mapa1);
    }else if(Px == 7 && Py == 12){
      //Floresta
      if(X == 1) DesenharLegenda(Mapa2);
    }else if(Px == 10 && Py == 52){
      //Montanha
      if(X == 1) DesenharLegenda(Mapa3);
    }else if(Px == 4 && Py == 65){
      //Castelo
        if(X == 1) DesenharLegenda(Mapa4);
    }else{
        if(X == 1) DesenharLegenda(Mapa0);
    }
    }else{
      if(Px == 2 && Py == 1){
        //Cidade
        if(Boss <= 1){
          if(X == 1) DesenharLegenda(Cidade0);
          if(X == 2) DesenharLegenda(Cidade1);
        }else if(Boss == 5 || Boss == 6){
          if(X == 1) DesenharLegenda(Cidade2);
          if(X == 2) DesenharLegenda(Cidade3);
        }else if(Boss == 8){
          if(X == 1) DesenharLegenda(Cidade4);
          if(X == 2){DesenharLegenda(Cidade5);
          Legenda2ON  = false;}
        }else if(Boss == 9){
          if(X == 1) DesenharLegenda(Cidade6);
          if(X == 2) DesenharLegenda(Cidade7);
        }else{
            if(X == 1) DesenharLegenda(Cidade8);
          if(X == 2) DesenharLegenda(Cidade9);
        }
          if(!Legenda2ON)Boss = 9;
      }else if(Px == 7 && Py == 12){
        //Floresta
        if(Boss == 1){

          }else if(Boss == 6){
          if(X == 1) DesenharLegenda(Floresta0);
          if(X == 2){ DesenharLegenda(Floresta1);
          Legenda2ON  = false;}
          if(X == 1) DesenharLegenda(Floresta2);
          if(X == 2) DesenharLegenda(Floresta3);
        }
          if(!Legenda2ON)Boss = 8;
      }else if(Px == 10 && Py == 52){
        //Montanha
        if(Boss == 3){
          if(X == 1) DesenharLegenda(Montanha0);
          if(X == 2) DesenharLegenda(Montanha1);
        }else if(Boss == 10){
          if(X == 1) DesenharLegenda(Montanha2);
        }else{
            if(X == 1) DesenharLegenda(Montanha3);
          if(X == 2) DesenharLegenda(Montanha4);
        }
        }else if(Px == 4 && Py == 65){
        //Castelo
        if(Boss < 1){
          if(X == 1) DesenharLegenda(Castelo1);
          if(X == 2) DesenharLegenda(Castelo2);
        }else if(Boss == 2 || Boss == 3){
          if(X == 1) DesenharLegenda(Castelo3);
          if(X == 2) DesenharLegenda(Castelo4);
        }else if(Boss == 4){
          if(X == 1) DesenharLegenda(Castelo5);
          if(X == 2) DesenharLegenda(Castelo6);
        }else if(Boss > 4 && Boss < 9){
          if(X == 1) DesenharLegenda(Castelo7);
          if(X == 2) DesenharLegenda(Castelo8);
        }else if(Boss == 9 || Boss == 10){
          if(X == 1) DesenharLegenda(Castelo9);
          if(X == 2) DesenharLegenda(Castelo10);
        }else if(Boss == 11){
          if(X == 1) DesenharLegenda(Castelo11);
          if(X == 2) DesenharLegenda(Castelo12);
        }else{
            if(X == 1) DesenharLegenda(Castelo13);
        }
        }
        if(X == 1) LegendaON  = false;
      if(X == 2) Legenda2ON = false;
  }
  }

  void DesenhaBatalha(int x){
    if(Px == 2 && Py == 1){
    const char STRLEG[] PROGMEM  = {"Aperte o botão de acao para entrar"};
  }
    else{
      const char STRLEG[] PROGMEM  = {"Nada encontrado, continue andando..."};
  }
    //Desenha o mapa
  i=0;
    if(x == 2){
      Serial.print(F(" Em combate contra: "));
    for (k = 0; k < strlen_P(I_Nome); k++){
    myChar = pgm_read_byte_near(I_Nome + k);
    Serial.print(myChar);}
  }else if(x == 4){
    Serial.print(F(" Em combate contra: "));
    for (k = 0; k < strlen_P(I_Nome2); k++){
    myChar = pgm_read_byte_near(I_Nome2 + k);
    Serial.print(myChar);}
  }else if(x == 11){
    Serial.print(F(" Em combate contra: "));
    for (k = 0; k < strlen_P(I_Nome3); k++){
    myChar = pgm_read_byte_near(I_Nome3 + k);
    Serial.print(myChar);}
  }
    Serial.println(F(""));
  Serial.print(F(" Saúde: "));
  if(I_Vida > 0)
    Serial.println(I_Vida);
  else{
      I_Vivo = false;
    Serial.println(F("0"));
  }
    if(x == 2){
      Serial.println(F("                                  ██"));
    Serial.println(F("                               ██████"));
    Serial.println(F("                             █████████"));
    Serial.println(F("                             █▄█████▄█ "));
    Serial.println(F("                             █▼▼▼▼▼▼▼▼ "));
    Serial.println(F("                             █ "));
    Serial.println(F("                             █▲▲▲▲▲▲▲▲ "));
    Serial.println(F("                             █████████ "));
    Serial.println(F("                                ██ ██ "));
  }else if(x == 4){
    Serial.println(F("``````````````````````````$$$$$$```````$$$$$$`````````````````````````"));
    Serial.println(F("```````````````````````$$$$$$$$$$$$$$$$$$$$$$$$$$`````````````````````"));
    Serial.println(F("```````````$`$```````$$$$$$$```$$$$$$$$$$$``$$$$$$````$``$``$`````````"));
    Serial.println(F("`````````$`$`$`$````$$$$$$$$``````$$$$``````$$$$$$$````$$$$$``````````"));
    Serial.println(F("``````````$$$$$`````$$$$$$$$```O`$$$$$``O``$$$$$$$$`$$$$$$$```````````"));
    Serial.println(F("``````````$$$$$$$$``$$$$$$$$$````$$$$$$````$$$$$$$$$$```$$$```````````"));
    Serial.println(F("`````````````$`````$$$`$$$$$$$$$$$$$$$$$$$$$$$$$$``$$`````````````````"));
    Serial.println(F("`````````````````````$$````````$$$$$$$$$$```````$$````````````````````"));
    Serial.println(F("``````````````````````$$$``````$$$````$$$```````$`````````````````````"));
  }else if(x == 11){
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊━━╮╰╮┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊╰╮╰━▂▂▂▂┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊▂╱▔╲▔╱┏┳╮╲┊┊ᶤ.╭╮┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊▂╲▂▂╱╲╲╰┻┛╱▔▔▔▔┃┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊╲▂▂╱╭╯╱▔▔╱▔▔▔▽▽╯┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊╱╱╭╯╱▔▔▔╲▂▂△▂△╮┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊┊┊╱╱╭╯╱┊┊┊┊┊┊┊┊┊▔▔▔▔▔┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
    Serial.println(F("┊┊┊┊┊┊┊┊┊┊┊╱╱╭╯╱┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊"));
  }
    //Desenha Legenda
  for (i=0; i<4; i++)
  {
      j=0;
      for (j=0; j<COL; j++)
    {
        if(i == 0 || i == 3){
        Serial.print(F("-"));
      }
        else if(i == 1 && j == 0){
        LegendaDanoOFF = true;
        if(Turno == 0)
          DesenharLegenda(Batalha0);
        if(Turno == 1){
          if(Acao == 1){
            LegendaDanoOFF = false;
            DesenharLegenda(Batalha3);
          }else if(Acao == 2){
            LegendaDanoOFF = false;
            DesenharLegenda(Batalha4);
          }else if(Acao == 3){
            LegendaDanoOFF = false;
            DesenharLegenda(Batalha5);
          }else if(Acao == 4){
            LegendaDanoOFF = false;
            DesenharLegenda(Batalha6);
          }else if(Acao == 5){
            DesenharLegenda(Batalha2);
          }
          }else if(Turno == 2 && I_Vida > 0){
          if(Boss == 2){
            AuxDano = random(60, 110);
            if(AuxDano <= 70){
              DesenharLegenda(Chomper2);
            }else if(AuxDano > 70 && AuxDano < 95){
              LegendaDanoOFF = false;
              DesenharLegenda(Chomper1);
              P_Vida = P_Vida - AuxDano;
            }else{
              LegendaDanoOFF = false;
              DesenharLegenda(Chomper0);
              P_Vida = P_Vida - AuxDano;
            }
            }else if(Boss == 4){
            AuxDano = random(100, 140);
            if(AuxDano <= 105){
              DesenharLegenda(Espirito2);
            }else if(AuxDano > 105 && AuxDano < 130){
              LegendaDanoOFF = false;
              DesenharLegenda(Espirito1);
              P_Vida = P_Vida - AuxDano;
            }else{
              LegendaDanoOFF = false;
              DesenharLegenda(Espirito0);
              P_Vida = P_Vida - AuxDano;
            }
            }else if(Boss == 11){
            AuxDano = random(120, 180);
            if(AuxDano <= 135){
              DesenharLegenda(Dragao2);
            }else if(AuxDano > 135 && AuxDano < 160){
              LegendaDanoOFF = false;
              DesenharLegenda(Dragao1);
              P_Vida = P_Vida - AuxDano;
            }else{
              LegendaDanoOFF = false;
              DesenharLegenda(Dragao0);
              P_Vida = P_Vida - AuxDano;
            }
            }
            P_Mana = P_Mana + 1;
          if(P_Mana > 4)
            P_Mana = 4;
          SetMana();
        }else if(Turno == 2 && I_Vida <= 0){
          P_Mana = 0;
          Tela = 1;
          Acao = 0;
          LegendaDanoOFF = true;
          DesenharLegenda(Batalha8);
        }
        }
        else if(i == 2 && j == 0){
        if(Turno == 0){
          LegendaDanoOFF = true;
          DesenharLegenda(Batalha1);
        }else if(Turno == 1){
          if(Acao == 10){
            LegendaDanoOFF = false;
            DesenharLegenda(Batalha7);
          }
          }
        }
      }
     Serial.println(F(""));
  }
    acao_aplicada = 0;
}

void DesenhaFim(){
    Serial.println(F("     *'  *     '                 '.       |"));
    Serial.println(F("  ' '        ._   *                           '          .      '"));
    Serial.println(F("   *           * *          * .   .      *"));
    Serial.println(F("*  '        *    `-._                       .         _..:='        *"));
    Serial.println(F("              .  '      *       *    *   .       _.:--'"));
    Serial.println(F("          *           .   Parabéns Heroi   .-'         *"));
    Serial.println(F("   .               '             . '   *           *         ."));
    Serial.println(F("  *       ___.-=--..-._     *                '               '"));
    Serial.println(F("                                  *       *"));
    Serial.println(F("                *        _.'  .'       `.        '  *             *"));
    Serial.println(F("     *              *_.-'   .'            `.               *"));
  //Desenha Legenda
  i = 0;
    for (i=0; i<4; i++)
  {
      j=0;
      for (j=0; j<COL; j++)
    {
        if(i == 0 || i == 3){
        Serial.print(F("-"));
      }
        else if(i == 1 && j == 0){
        DesenharLegenda(FIM1);
      }
        else if(i == 2 && j == 0){
        DesenharLegenda(FIM2);
      }
      }
      Serial.println(F(""));
  }
    acao_aplicada = 2;
}

void DesenhaMorte(){
    Serial.println(F("                            #############"));
    Serial.println(F("                          ##            *##"));
    Serial.println(F("                        #      %%%  %%% ***#"));
    Serial.println(F("                       #        %%%%%    ****#"));
    Serial.println(F("                      #   ###     %     ###***#"));
    Serial.println(F("                      #  # ####       #### #**#"));
    Serial.println(F("                      #  #     #     #     #**#"));
    Serial.println(F("                      #   #####  # #  #####***#"));
    Serial.println(F("                      #         #   #  *******#"));
    Serial.println(F("                       ### #           **# ###"));
  //Desenha Legenda
  i = 0;
    for (i=0; i<4; i++)
  {
      j=0;
      for (j=0; j<COL; j++)
    {
        if(i == 0 || i == 3){
        Serial.print(F("-"));
      }
        else if(i == 1 && j == 0){
        DesenharLegenda(FIM3);
      }
      }
      Serial.println(F(""));
  }
    acao_aplicada = 2;
  morto = 1;

```