import processing.core.*; 
import processing.data.*; 
import processing.event.*; 
import processing.opengl.*; 

import processing.sound.*; 

import java.util.HashMap; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 

public class namethisgame3 extends PApplet {

// MAMI
// Josu\u00e9

public void setup() {
  
  noStroke();
  textSize(40);
  carregarImagens();
}

public void draw() {
  controlador();
  
  cenario();
  
  mergulhador();
  tubarao();
  polvo();
  lancha();
  tintaPolvo();
  
  painel();
}
public void atirarArpao(){
  if(tiroArpao){
    if(yArpao == yMergu - 20){
      tiro.play();
      tiro.amp(0.25f);
    }
    noTint();
    yArpao -= vArpao;
    
    if(yArpao < height/5)
      tiroArpao = false;
    
    image(arpao, xArpao, yArpao, 10, 40, wDArpao, 0, wEArpao, arpao.height);
  }
}

SoundFile intro, gameover, nivel, oxi, tent, tiro, tubarao, faltaoxi;

//Vari\u00e1veis de Controle
PImage menu, fundo, mar1, mar2, tesouro1, tesouro2, tesouro3;
int tempAnim, temp, vidas, ponto, recorde, tempTiro, tempMang = 0, tempTuba, tempPolvoDor;
float widthBarra, oxigenio, dificuldade;
boolean inicioJogo = true, game = true, red = false, vitoria = false;
String txt;

//Vari\u00e1veis Mergulhador
PImage mergulhador1, mergulhador2, mergulhador3, mergulhadorTiro1, mergulhadorTiro2, mergulhadorTiro3, mergulhadorTiro4, mergulhadorTiro5, vitoriaMergu;
int xMergu, yMergu, vMergu, wDMergu, wEMergu;
boolean  atirando, merguDireita, mergulhadorDevorado;

//Vari\u00e1veis Arp\u00e3o
PImage arpao;
int xArpao, yArpao, vArpao, wDArpao, wEArpao;
boolean tiroArpao = false;

//Vari\u00e1veis Lancha
PImage barco, barco01, barco02, barco03, barco04, barco05, barco06, barco07, barco08, barco09, barco10, mangueira;
int xBarco, yBarco, vBarco, wDBarco, wEBarco, xMang;
boolean  barcoDireita, LanceMangueira, fundoMangueira;

//Vari\u00e1veis Tubar\u00e3o
PImage tuba1, tuba2, tuba3, tubaMergu1, tubaMergu2, tubaMergu3, tubaMergu4;
int xTuba, yTuba, vTuba, wDTuba, wETuba;
boolean  tubaDireita, devorado;

//Vari\u00e1veis Polvo
PImage polvo1, polvo2, polvo3, polvo4, pontaTentaculo, tentaculo, tentaculoCompleto, fumaca;
int quantTentaculos = 8, tamanhoTentaculos = 13, tintaFundo = 160, novoTentaculoTemp, pv = 0;
int[] initPosiPolvo = { 100, 170, 250, 330, 475, 550, 630, 700};
int[][] tentaculos = new int[tamanhoTentaculos * quantTentaculos][6];
// -- tentaculos[][ x, y, movimento, vivo, lider, movimentoAnterior ]
boolean polvoDor, toqueFundo;;
       
public void carregarImagens(){
  imageMode(CENTER);
  
  mergulhador1 = loadImage("codigo/namethisgame3/img/mergulhador1.png");
  mergulhador2 = loadImage("codigo/namethisgame3/img/mergulhador2.png");
  mergulhador3 = loadImage("codigo/namethisgame3/img/mergulhador3.png");
  
  mergulhadorTiro1 = loadImage("codigo/namethisgame3/img/mergulhadorTiro1.png");
  mergulhadorTiro2 = loadImage("codigo/namethisgame3/img/mergulhadorTiro2.png");
  mergulhadorTiro3 = loadImage("codigo/namethisgame3/img/mergulhadorTiro3.png");
  mergulhadorTiro4 = loadImage("codigo/namethisgame3/img/mergulhadorTiro4.png");
  mergulhadorTiro5 = loadImage("codigo/namethisgame3/img/mergulhadorTiro5.png");
  
  vitoriaMergu = loadImage("codigo/namethisgame3/img/vitoria.png");
  
  arpao = loadImage("codigo/namethisgame3/img/arpao.png");
  
  barco = loadImage("codigo/namethisgame3/img/barco01.png");
  barco01 = loadImage("codigo/namethisgame3/img/barco02.png");
  barco02 = loadImage("codigo/namethisgame3/img/barco03.png");
  barco03 = loadImage("codigo/namethisgame3/img/barco04.png");
  barco04 = loadImage("codigo/namethisgame3/img/barco05.png");
  barco05 = loadImage("codigo/namethisgame3/img/barco06.png");
  barco06 = loadImage("codigo/namethisgame3/img/barco07.png");
  barco07 = loadImage("codigo/namethisgame3/img/barco08.png");
  barco08 = loadImage("codigo/namethisgame3/img/barco09.png");
  barco09 = loadImage("codigo/namethisgame3/img/barco10.png");
  barco10 = loadImage("codigo/namethisgame3/img/barco11.png");
  
  mangueira = loadImage("codigo/namethisgame3/img/mangueira.png");
  
  tuba1 = loadImage("codigo/namethisgame3/img/tuba1.png");
  tuba2 = loadImage("codigo/namethisgame3/img/tuba2.png");
  tuba3 = loadImage("codigo/namethisgame3/img/tuba3.png");
  
  tubaMergu1 = loadImage("codigo/namethisgame3/img/tubaMergu1.png");
  tubaMergu2 = loadImage("codigo/namethisgame3/img/tubaMergu2.png");
  tubaMergu3 = loadImage("codigo/namethisgame3/img/tubaMergu3.png");
  tubaMergu4 = loadImage("codigo/namethisgame3/img/tubaMergu4.png");
  
  polvo1 = loadImage("codigo/namethisgame3/img/polvo1.png");
  polvo2 = loadImage("codigo/namethisgame3/img/polvo2.png");
  polvo3 = loadImage("codigo/namethisgame3/img/polvo3.png");
  polvo4 = loadImage("codigo/namethisgame3/img/polvo4.png");
  
  pontaTentaculo = loadImage("codigo/namethisgame3/img/pontaTentaculo.png");
  tentaculo = loadImage("codigo/namethisgame3/img/tentaculo.png");
  tentaculoCompleto = loadImage("codigo/namethisgame3/img/tentaculoCompleto.png");
  
  fumaca = loadImage("codigo/namethisgame3/img/fumaca.png");
  
  tesouro1 = loadImage("codigo/namethisgame3/img/tesouro1.png");
  tesouro2 = loadImage("codigo/namethisgame3/img/tesouro2.png");
  tesouro3 = loadImage("codigo/namethisgame3/img/tesouro3.png");
  
  menu = loadImage("codigo/namethisgame3/img/menu.png");
  fundo = loadImage("codigo/namethisgame3/img/fundo.png");
  
  mar1 = loadImage("codigo/namethisgame3/img/mar1.png");
  mar2 = loadImage("codigo/namethisgame3/img/mar2.png");
  
  intro = new SoundFile(this, "introducao.mp3");
  tiro = new SoundFile(this, "tiro.mp3");
  oxi = new SoundFile(this, "oxigenio.mp3");
  tubarao = new SoundFile(this, "tubaraomorto.mp3");
  tent = new SoundFile(this, "tentaculo.mp3");
  gameover = new SoundFile(this, "gameover.mp3");
  nivel = new SoundFile(this, "nivel.mp3");
  faltaoxi = new SoundFile(this, "faltaoxigenio.mp3");
}
public void cenario(){
  if(inicioJogo){
    noTint();
    image(menu, width/2, height/2, 800, 700);
    
    //Letreiro
    fill(255);
    textSize(40);
    text(txt, width/2 - textWidth(txt) / 2, height/2);
    
    //Letreiro Sombra Titulo Azul
    fill(0, 0, 255);
    textSize(80);
    text("SeteL\u00e9guas", width/2 - textWidth("SeteL\u00e9guas") / 2, height*1/5);
    
    //Letreiro Titulo Branco
    fill(255);
    textSize(80);
    text("SeteL\u00e9guas", width/2 - textWidth("SeteL\u00e9guas") / 2, height*1/5 +3);
  }else{
    noTint();
    image(fundo, width/2, height/2 - 50, 800, 600);
    
    if (temp % 40 > 20)
      image(mar1, width/2, height*1/6 + 10, 800, 48);
    else
      image(mar2, width/2, height*1/6 + 10, 800, 48);
    
    if(!vitoria){
      switch (vidas){
        case 0:
          image(tesouro1, width/2, height*8/10 - 5, 180/2, 180/2);
          break;
        case 1:
        case 2:
          image(tesouro2, width/2, height*8/10 - 5, 180/2, 180/2);
          break;
        case 3:
          image(tesouro3, width/2, height*8/10 - 5, 180/2, 180/2);
          break;
      }
    }
  }
}

public void painel(){
  if(!inicioJogo){
    //Fundo do Mar
    fill(35, 228, 235);
    rect(0, height * 6/7, width, height);
    
    float barraDif = widthBarra * dificuldade/100;
    
    if(red)
     fill(255, 0, 0);
    else    
      fill(0, 225, 42);
    rect(width/2 - barraDif / 2, height * 13/15, barraDif, 10);
    
    if(oxigenio > 0){
      float barraOxi = widthBarra * oxigenio/100;
      fill(239, 195, 42);
      rect(width/2 - barraOxi / 2, height * 14/16+7 , barraOxi, 15);
    }else{
      if((oxigenio < -1 && oxigenio > -1.5f) || (oxigenio < -2.5f && oxigenio > -3)){
        if(temp % 20==0){
          faltaoxi.play();
          faltaoxi.amp(0.25f);
        }
        
        fill(239, 195, 42);
        rect(width/2 - widthBarra / 2, height * 14/16+7 , widthBarra, 15);
      }else if(oxigenio < -4){
        morteMergulhador();
      }
    }
    
    //Letreiro
    fill(255);
    textSize(40);
    text(txt, width/2 - textWidth(txt) / 2, height * 24/25);
    
    textSize(20);
    text("Recorde : " + recorde, width/15, height - 5);
    
    if(!game){
      textSize(60);
      text("GAME OVER", width/2 - textWidth("GAME OVER") / 2, height/2);
    }
    if(vitoria){
      textSize(40);
      text("Parab\u00e9ns Conquistador dos Mares!!", width/2 - textWidth("Parabens Conquistador dos Mares!!") / 2, height/2);
    }
  }
}
public void controlador(){
  if(inicioJogo){
    game = true;
    if(tempAnim == 0){
      xMergu = width + 100;
      yMergu = height * 7/10;
      
      xTuba = width + 1500;
      yTuba = yMergu;
    }
    
    tempAnim ++;
    xMergu -= 5;
    xTuba -= 10;
    
    if(tempAnim == 1 || tempAnim == 180){
      intro.play();
      intro.amp(0.25f);
    }
    
    if(tempAnim < 60)
      txt = "JS.2018 produ\u00e7\u00f5es";
    else if(tempAnim < 120)
      txt = "NAME THIS GAME -- REMAKE";
    else if(tempAnim < 180)
      txt = "Desenvolvedor Josu\u00e9.Santos";
    else if(tempAnim < 240)
      txt = "Arte Gr\u00e1fica Jonas.Santos";
    else if(tempAnim < 300)
      txt = "UFC - SMD";
    else{
      txt = "Pressione SPACE para iniciar";
      if(keyPressed){
        tempAnim = 0;
        inicioJogo = false;
        
        reiniciar();
      }
    }
  }else{
    temp++;
    txt = ponto+"";
    
    //Atualizar Recorde
    if(recorde < ponto){
      recorde = ponto;
    }
    
    //Letreiro Game Over
    if(vitoria && pv > 700){
      inicioJogo = true;
    }else if(vidas <= 0){
      gameover.play();
      gameover.amp(0.25f);
      
      game = false;
      toqueFundo = true;
      txt = "Sua pontua\u00e7\u00e3o foi " + ponto;
    }else{
      if (temp % 10 == 0){
        oxigenio -= 0.2f;
        dificuldade -= 0.1f;
      }
      
      if(dificuldade <= 0){
        ponto += 1000;
        oxigenio = 100;
        dificuldade = 100;
        
        novoTentaculoTemp -= 5;
        vTuba += 3;
        
        if(red){
          nivel.play();
          nivel.amp(0.25f);
          
          vitoria = true;
        }else{
          red = true;
          
          //nivel.play();
          //nivel.amp(0.25);
        }
      }
    }
  }
}

public void reiniciar(){
  //Inicializar Vari\u00e1veis de Controle
  widthBarra = width * 0.95f;
  vidas = 3;
  ponto = 0;
  pv = 0;
  vitoria = false;
  
  xBarco = width - barco.width/2;
  yBarco = height*1/8;
  vBarco = 4;
  
  mergulhadorSurgir();
}
public void lancha(){
  if(!inicioJogo){
    noTint();
    if(vitoria){
      image(barco01, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
    }else{
      if (temp > 0 && vidas > 0 && temp % (tempMang + 400) == 0){
        LanceMangueira = true;
        tempMang = temp;
        
        if(barcoDireita){
          xMang = xBarco - 11;
        }else{
          xMang = xBarco + 11;
        }
      }
      
      if(LanceMangueira){
        if (temp < tempMang + 10)
          image(barco01, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 20)
          image(barco02, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 30)
          image(barco03, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 40)
          image(barco04, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 50)
          image(barco05, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 60)
          image(barco06, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 70)
          image(barco07, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 80)
          image(barco08, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
        else if (temp < tempMang + 90){
          image(barco09, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
          image(mangueira, xMang, yBarco + 220, 4, 400);
          fundoMangueira = true;
        }else if (temp > tempMang + 300){
          LanceMangueira = false;
          fundoMangueira = false;
          tempMang = temp;
        }else{
          image(barco10, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
          image(mangueira, xMang, yBarco + 220, 4, 400);
        }
        
      }else{
        if(xBarco >= width - 50){
          barcoDireita = false;
        }else if(xBarco <= 50){
          barcoDireita = true;
        }
        
        if(barcoDireita){
          xBarco += vBarco;
          
          wDBarco = barco.width;
          wEBarco = 0;
        }else{
          xBarco -= vBarco;
          
          wDBarco = 0;
          wEBarco = barco.width;
        }
          
        image(barco, xBarco, yBarco, 300/2, 200/2, wDBarco, 0, wEBarco, barco.height);
      }
    }
  }
}
public void mergulhador(){
  if(inicioJogo){
    if (tempAnim % 30 < 10)
      image(mergulhador1, xMergu, yMergu, 180*2, 120*2);
    else if (tempAnim % 30 < 20)
      image(mergulhador2, xMergu, yMergu, 180*2, 120*2);
    else
      image(mergulhador3, xMergu, yMergu, 180*2, 120*2);
  }else{
    noTint();
    if(vitoria){
      image(vitoriaMergu, width/2, yMergu - (pv/5), vitoriaMergu.width/2, vitoriaMergu.height/2);
    }else if(vidas > 0 && !mergulhadorDevorado){
      
      // Movimento Mergulhador
      if(keyPressed){
        switch(keyCode){
          case RIGHT:
            merguDireita = true;
            if(xMergu < width - mergulhador1.height/2)
              xMergu += vMergu;
            break;
          case LEFT:
            merguDireita = false;
            if(xMergu > mergulhador1.height/2)
              xMergu -= vMergu;
            break;
          case 0:
            // arp\u00e3o
            if(!atirando && !tiroArpao){
              tempTiro = temp;
              atirando = true;
            }
            break;
        }
      }
        
      if(merguDireita){
        wDMergu = mergulhador1.width;
        wEMergu = 0;
      }else{
        wDMergu = 0;
        wEMergu = mergulhador1.width;
      }
      
      if(atirando){
        if (temp < tempTiro + 3)
          image(mergulhadorTiro1, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
        else if (temp < tempTiro + 6)
          image(mergulhadorTiro2, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
        else if (temp < tempTiro + 9){
          image(mergulhadorTiro3, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
          
          if(merguDireita){
            xArpao = xMergu + 35;
            wDArpao = arpao.width;
            wEArpao = 0;
          }else{
            xArpao = xMergu - 35;
            wDArpao = 0;
            wEArpao = arpao.width;
          }
          
          yArpao = yMergu - 20;
          tiroArpao = true;
          
        }else if (temp < tempTiro + 12)
          image(mergulhadorTiro4, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
        else if (temp < tempTiro + 15){
          image(mergulhadorTiro5, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
          
          atirando = false;
        }
      }else{
        if (temp % 21 < 7)
          image(mergulhador1, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
        else if (temp % 30 < 14)
          image(mergulhador2, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
        else
          image(mergulhador3, xMergu, yMergu, 180/2, 120/2, wDMergu, 0, wEMergu, mergulhador1.height);
      }
      atirarArpao();
      
      if(fundoMangueira && xMang > (xMergu-180/4) && xMang < (xMergu+180/4)){
        oxi.play();
        oxi.amp(0.01f);
        
        ponto += 1;
        oxigenio += 0.15f;
        if(oxigenio > 100) oxigenio = 100;
      }
    }
  }
}

public void mergulhadorSurgir(){
  xMergu = width/2;
  yMergu = height * 7/10;
  
  vMergu = 2;
  vArpao = 8;
  
  toqueFundo = false;
  tentaculos = new int[tamanhoTentaculos * quantTentaculos][6];
  novoTentaculoTemp = 30;
  
  tubaraoReinicio();
  oxigenio = 100;
  dificuldade = 100;
  red = false;
}

public void morteMergulhador(){
  vidas --;
  mergulhadorSurgir();
}
public void polvo(){
  if(!inicioJogo){
    if(red) tint(255, 0, 0);
    
    image(tentaculoCompleto, width/2 - 10 + pv, height*1/3 - 10, 700, 160);
    
    if(polvoDor){
      image(polvo4, width/2 + pv, height*1/3, 180, 180);
      if(temp % (tempPolvoDor + 60) == 0)
        polvoDor = false;
    }else if (temp % 240 < 10)
      image(polvo2, width/2 + pv, height*1/3, 180, 180);
    else if (temp % 240 < 20)
      image(polvo3, width/2 + pv, height*1/3, 180, 180);
    else
      image(polvo1, width/2 + pv, height*1/3, 180, 180);
    
    if(!vitoria && !devorado && temp % novoTentaculoTemp == 0){
      criarNovoTen();
    }
    
    if(temp % 20 == 0){
      movimentoTen();
    }
    
    desenhaTent();
    if(vitoria){
      pv ++;
    }
  }
}

public void tintaPolvo(){
  if(toqueFundo){
    if(tintaFundo > 0){
      tintaFundo --;
    }else{
      tintaFundo = 160;
      if(vidas > 0)
        morteMergulhador();
      else{
        inicioJogo = true;
        toqueFundo = false;
      }
    }
    
    image(fumaca, width/2, height * 6/9 + tintaFundo, width+100, height/2);
  }
}

public void polvoAtingido(){
  polvoDor = true;
  tempPolvoDor = temp;
}

public void criarNovoTen(){
  int novoTentaculo = (int) random(0, quantTentaculos);
  int primeiroT = novoTentaculo * tamanhoTentaculos;
  
  for(int i = 0; i < tamanhoTentaculos; i++){
    int x = i + primeiroT;
    
    if(tentaculos[x][3] != 1){
      tentaculos[x][3] = 1;
      
      if(x == primeiroT){
        tentaculos[x][0] = initPosiPolvo[ novoTentaculo ];
        tentaculos[x][1] = height * 2/5 + 15 + 10;
        tentaculos[x][4] = 1;
      }else{
        tentaculos[x][0] = tentaculos[x-1][0];
        tentaculos[x][1] = height * 2/5 + 15 + 15 * i + 10;
        tentaculos[x-1][4] = 0;
        tentaculos[x][4] = 1;
        
        if(i == tamanhoTentaculos - 1 && vidas > 0){
          toqueFundo = true;
          
          faltaoxi.play();
          faltaoxi.amp(0.25f);
        }
      }
      break;
    }
  }
}

public void movimentoTen(){
  for(int j = 0; j < quantTentaculos; j++){
    int primeiroT = j * tamanhoTentaculos;
    
    if(tentaculos[ primeiroT ][3] == 1){
      int movimento = (int) random(1,5);
      
      if(tentaculos[ primeiroT ][0] < initPosiPolvo[0]) movimento = 1;
      if(tentaculos[ primeiroT ][0] > initPosiPolvo[7]) movimento = 4;
      
      tentaculos[ primeiroT ][2] = tentaculos[ primeiroT ][0];
      switch(movimento){
        case 1:
        case 2:
          tentaculos[ primeiroT ][0] += 10;
          break;
        default:
          tentaculos[ primeiroT ][0] += -10;
          break;
      }
      
      for(int i = 0; i < tamanhoTentaculos; i++){
        int x = i + primeiroT;
        
        if(
          tiroArpao && 
          (tentaculos[x][0] - 15) < (xArpao + 7) && (tentaculos[x][0] + 15) > (xArpao - 7) &&
          (tentaculos[x][1] - 15) < (yArpao + 40) && (tentaculos[x][1] + 15) > (yArpao - 40)
        ){
          tent.play();
          tent.amp(0.25f);
          
          morteTentaculo(j);
        }
        
        if(tentaculos[x][3] == 1){
          if(i < tamanhoTentaculos - 1){
            if(tentaculos[ x + 1 ][3] == 1){
              tentaculos[ x + 1 ][2] = tentaculos[ x + 1 ][0];
              tentaculos[ x + 1 ][0] = tentaculos[ x ][2];
            }
          }
        }
      }
    }
  }
}

public void morteTentaculo(int i){
  polvoAtingido();
  
  int primeiro = i * tamanhoTentaculos;
  for(int j = 0; j < tamanhoTentaculos; j++){
    int x = j + primeiro;
    
    tentaculos[x][3] = 0;
    tentaculos[x][4] = 0;
  }
  ponto += 50;
  tiroArpao = false;
}

public void desenhaTent(){
  for(int i = 0; i < tamanhoTentaculos * quantTentaculos; i++){
    if(tentaculos[i][3] == 1){
      if(tentaculos[i][4] == 1){
        image(pontaTentaculo, tentaculos[i][0] + pv, tentaculos[i][1]+5, 30, 30);
      }else{
        image(tentaculo, tentaculos[i][0] + pv, tentaculos[i][1], 25, 25);
      }
    }
  }
}
public void tubarao(){
  if(inicioJogo){
    if (tempAnim % 100 < 3)
      image(tubaMergu1, xTuba, yTuba, 180*2, 120*2);
    else if (tempAnim % 100 < 6)
      image(tubaMergu2, xTuba, yTuba, 180*2, 120*2);
    else if (tempAnim % 100 < 9)
      image(tubaMergu3, xTuba, yTuba, 180*2, 120*2);
    else if (tempAnim % 9 < 3)
      image(tuba1, xTuba, yTuba, 180*2, 120*2);
    else if (tempAnim % 9 < 6)
      image(tuba2, xTuba, yTuba, 180*2, 120*2);
    else
      image(tuba3, xTuba, yTuba, 180*2, 120*2);
  }else{
    if(red) tint(255, 0, 0);
    
    if(xTuba >= width - tuba1.width/4 && !vitoria){
      tubaDireita = false;
      toqueLateral();
    }else if(xTuba <= tuba1.width/4 && !vitoria){
      tubaDireita = true;
      toqueLateral();
    }
    
    if(tubaDireita){
      xTuba += vTuba;
      
      wDTuba = tuba1.width;
      wETuba = 0;
    }else{
      xTuba -= vTuba;
      
      wDTuba = 0;
      wETuba = tuba1.width;
    }
    
    if(devorado){
      if (temp < tempTuba + 10)
        image(tubaMergu1, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      else if (temp < tempTuba + 20)
        image(tubaMergu2, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      else if (temp < tempTuba + 30){
        image(tubaMergu3, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
        mergulhadorDevorado = true;
        faltaoxi.play();
        faltaoxi.amp(0.25f);
      }else
        image(tubaMergu4, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
    
    }else{
      if (temp % 240 < 10)
        image(tubaMergu1, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      else if (temp % 240 < 20)
        image(tubaMergu2, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      else if (temp % 240 < 30)
        image(tubaMergu3, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      else if (temp % 30 < 10)
        image(tuba1, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      else if (temp % 30 < 20)
        image(tuba2, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      else
        image(tuba3, xTuba, yTuba, 180/2, 120/2, wDTuba, 0, wETuba, tuba1.height);
      
      colisaoTuba();
    }
  }
}

public void tubaraoReinicio(){
  xTuba = width - tuba1.width/4;
  yTuba = height*1/5;
  vTuba = 3;
}

public void colisaoTuba(){
  if(
    tiroArpao && 
    (xTuba - tuba1.width/4 + 5) < (xArpao + 7) && (xTuba + tuba1.width/4 - 5) > (xArpao - 7) &&
    (yTuba - tuba1.height/4 + 5) < (yArpao) && (yTuba + tuba1.height/4 - 5) > (yArpao - 20)
  ){
    tubarao.play();
    tubarao.amp(0.25f);
    
    tubaraoReinicio();
    ponto += 100;
    tiroArpao = false;
  }
  if(xTuba > (xMergu - mergulhador1.width/4 - 30) && xTuba < (xMergu + mergulhador1.width/4 + 30) && yTuba == yMergu && !vitoria){
    devorado = true;
    tempTuba = temp;
    vTuba = 1;
  }
}

public void toqueLateral(){
  if(devorado){
    devorado = false;
    mergulhadorDevorado = false;
    tubaraoReinicio();
    if(!toqueFundo)
      morteMergulhador();
  }else{
    if(vitoria){
    }else{
      vTuba += 2;
      
      if(yTuba > yMergu - mergulhador1.height/3 && vidas > 0)
        yTuba = yMergu;
      else
        yTuba += tuba1.height/5;
    }
  }
}
  public void settings() {  size(800, 700); }
  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "namethisgame3" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}
