Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2017
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.52 KB | None | 0 0
  1. package com.paivadeveloper.nervo;
  2.  
  3. import com.badlogic.gdx.ApplicationAdapter;
  4. import com.badlogic.gdx.Audio;
  5. import com.badlogic.gdx.Gdx;
  6. import com.badlogic.gdx.audio.Music;
  7. import com.badlogic.gdx.audio.Sound;
  8. import com.badlogic.gdx.graphics.Color;
  9. import com.badlogic.gdx.graphics.GL20;
  10. import com.badlogic.gdx.graphics.OrthographicCamera;
  11. import com.badlogic.gdx.graphics.Texture;
  12. import com.badlogic.gdx.graphics.g2d.BitmapFont;
  13. import com.badlogic.gdx.graphics.g2d.SpriteBatch;
  14. import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
  15. import com.badlogic.gdx.math.Circle;
  16. import com.badlogic.gdx.math.Intersector;
  17. import com.badlogic.gdx.math.Rectangle;
  18. import com.badlogic.gdx.utils.viewport.FitViewport;
  19. import com.badlogic.gdx.utils.viewport.StretchViewport;
  20. import com.badlogic.gdx.utils.viewport.Viewport;
  21.  
  22. import java.util.Random;
  23.  
  24. public class FlappyNervo extends ApplicationAdapter {
  25.     private SpriteBatch batch;
  26.     private Texture[] passaros;
  27.     private Texture fundo;
  28.     private Texture chao;
  29.     private Texture canoBaixo;
  30.     private Texture canoTopo;
  31.     private Texture gameOver;
  32.     private Random numeroRandomico;
  33.     private BitmapFont fonte;
  34.     private BitmapFont mensagem;
  35.     private Circle passaroCirculo;
  36.     private Rectangle retanguloCanoTopo;
  37.     private Rectangle retanguloCanoBaixo;
  38.     //private ShapeRenderer shape;
  39.  
  40.     //Atributos de configuracao
  41.     private float larguraDispositivo;
  42.     private float alturaDispositivo;
  43.     private int estadoJogo = 0;// 0-> jogo não iniciado 1-> jogo iniciado 2-> Game Over
  44.     private int pontuacao = 0;
  45.  
  46.  
  47.     private Music music;
  48.     private Sound flap;
  49.  
  50.     private float variacao = 0;
  51.     private float velocidadeQueda = 0;
  52.     private float posicaoInicialVertical;
  53.     private float posicaoMovimentoCanoHorizontal;
  54.     private float espacoEntreCanos;
  55.     private float deltaTime;
  56.     private float alturaEntreCanosRandomica;
  57.     private boolean marcouPonto = false;
  58.  
  59.     //Câmera
  60.     private OrthographicCamera camera;
  61.     private Viewport viewport;
  62.     private final float VIRTUAL_WIDTH = 768;
  63.     private final float VIRTUAL_HEIGHT = 1024;
  64.  
  65.  
  66.     @Override
  67.     public void create() {
  68.  
  69.  
  70.         music = Gdx.audio.newMusic(Gdx.files.internal("fundo.wav"));
  71.         music.setLooping(true);
  72.         music.setVolume(0.1f);
  73.         music.play();
  74.         batch = new SpriteBatch();
  75.         numeroRandomico = new Random();
  76.         passaroCirculo = new Circle();
  77.         /*retanguloCanoTopo = new Rectangle();
  78.         retanguloCanoBaixo = new Rectangle();
  79.         shape = new ShapeRenderer();*/
  80.         fonte = new BitmapFont();
  81.         fonte.setColor(Color.WHITE);
  82.         fonte.getData().setScale(6);
  83.  
  84.  
  85.         mensagem = new BitmapFont();
  86.         mensagem.setColor(Color.WHITE);
  87.         mensagem.getData().setScale(3);
  88.  
  89.  
  90.         passaros = new Texture[3];
  91.         passaros[0] = new Texture("passaro2.png");
  92.         passaros[1] = new Texture("passaro2.png");
  93.         passaros[2] = new Texture("passaro3.png");
  94.  
  95.         flap = Gdx.audio.newSound(Gdx.files.internal("nervo04.wav"));
  96.  
  97.         fundo = new Texture("fundo.png");
  98.         canoBaixo = new Texture("cano_baixo.png");
  99.         canoTopo = new Texture("cano_topo.png");
  100.         gameOver = new Texture("game_over.png");
  101.  
  102.         /**********************************************
  103.          * Configuração da câmera
  104.          * */
  105.         camera = new OrthographicCamera();
  106.         camera.position.set(VIRTUAL_WIDTH / 2, VIRTUAL_HEIGHT / 2, 0);
  107.         viewport = new StretchViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, camera);
  108.  
  109.         larguraDispositivo = VIRTUAL_WIDTH;
  110.         alturaDispositivo = VIRTUAL_HEIGHT;
  111.  
  112.         posicaoInicialVertical = alturaDispositivo / 2;
  113.         posicaoMovimentoCanoHorizontal =
  114.                 larguraDispositivo;
  115.         espacoEntreCanos = 500;
  116.  
  117.     }
  118.  
  119.     @Override
  120.     public void render() {
  121.         batch = new SpriteBatch();
  122.  
  123.  
  124.         camera.update();
  125.  
  126.         // Limpar frames anteriores
  127.         Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
  128.  
  129.         deltaTime = Gdx.graphics.getDeltaTime();
  130.         variacao += deltaTime * 10;
  131.         if (variacao > 2) variacao = 0;
  132.  
  133.         if (estadoJogo == 0) {//Não iniciado
  134.  
  135.             if (Gdx.input.justTouched()) {
  136.                 estadoJogo = 1;
  137.  
  138.  
  139.             }
  140.  
  141.         } else {//Iniciado
  142.  
  143.             velocidadeQueda++;
  144.             if (posicaoInicialVertical > 0 || velocidadeQueda < 0)
  145.                 posicaoInicialVertical = posicaoInicialVertical - velocidadeQueda;
  146.  
  147.             if (estadoJogo == 1) {//iniciado
  148.  
  149.                 posicaoMovimentoCanoHorizontal -= deltaTime * 300
  150.                 ;
  151.                
  152.  
  153.  
  154.                 if (Gdx.input.justTouched()) {
  155.                     velocidadeQueda = -15;
  156.                     flap.play();
  157.  
  158.  
  159.                 }
  160.  
  161.                 //Verifica se o cano saiu inteiramente da tela
  162.                 if (posicaoMovimentoCanoHorizontal < -canoTopo.getWidth()) {
  163.                     posicaoMovimentoCanoHorizontal = larguraDispositivo;
  164.                     alturaEntreCanosRandomica = numeroRandomico.nextInt(400) - 200;
  165.                     marcouPonto = false;
  166.                 }
  167.  
  168.                 //Verifica pontuação
  169.                 if (posicaoMovimentoCanoHorizontal < 120) {
  170.                     if (!marcouPonto) {
  171.                         pontuacao++;
  172.                         marcouPonto = true;
  173.                     }
  174.  
  175.  
  176.                 }
  177.  
  178.             } else {// Game Over
  179.                 //Zerar o valores padrões
  180.                 if (Gdx.input.justTouched()) {
  181.                     estadoJogo = 0;
  182.                     velocidadeQueda = 0;
  183.                     pontuacao = 0;
  184.                     posicaoMovimentoCanoHorizontal = larguraDispositivo;
  185.                     posicaoInicialVertical = alturaDispositivo / 2;
  186.  
  187.                 }
  188.  
  189.             }
  190.  
  191.  
  192.         }
  193.  
  194.         //Configurar dados de projeção da câmera
  195.         batch.setProjectionMatrix(camera.combined);
  196.  
  197.         batch.begin();
  198.  
  199.         batch.draw(fundo, 0, 0, larguraDispositivo, alturaDispositivo);
  200.         batch.draw(canoTopo, posicaoMovimentoCanoHorizontal, alturaDispositivo / 2 + espacoEntreCanos / 2 + alturaEntreCanosRandomica);
  201.         batch.draw(canoBaixo, posicaoMovimentoCanoHorizontal, alturaDispositivo / 2 - canoBaixo.getHeight() - espacoEntreCanos / 2 + alturaEntreCanosRandomica);
  202.         batch.draw(passaros[(int) variacao], 120, posicaoInicialVertical);
  203.         fonte.draw(batch, String.valueOf(pontuacao), larguraDispositivo / 2, alturaDispositivo - 50);
  204.  
  205.         if (estadoJogo == 2) {
  206.             mensagem.draw(batch, "Você perdeu amigão", larguraDispositivo / 2 - 230, alturaDispositivo / 2 - gameOver.getHeight());
  207.             batch.draw(gameOver, larguraDispositivo / 2 - gameOver.getWidth() / 2, 200);
  208.         }
  209.  
  210.         batch.end();
  211.  
  212.         passaroCirculo.set(120 + passaros[0].getWidth() / 2, posicaoInicialVertical + passaros[0].getHeight() / 2, passaros[0].getWidth() / 2);
  213.         retanguloCanoBaixo = new Rectangle(
  214.                 posicaoMovimentoCanoHorizontal, alturaDispositivo / 2 - canoBaixo.getHeight() - espacoEntreCanos / 2 + alturaEntreCanosRandomica,
  215.                 canoBaixo.getWidth(), canoBaixo.getHeight()
  216.         );
  217.  
  218.         retanguloCanoTopo = new Rectangle(
  219.                 posicaoMovimentoCanoHorizontal, alturaDispositivo / 2 + espacoEntreCanos / 2 + alturaEntreCanosRandomica,
  220.                 canoTopo.getWidth(), canoTopo.getHeight()
  221.         );
  222.  
  223.         //Desenhar formas
  224.         /*shape.begin( ShapeRenderer.ShapeType.Filled);
  225.         shape.circle(passaroCirculo.x, passaroCirculo.y, passaroCirculo.radius);
  226.         shape.rect(retanguloCanoBaixo.x, retanguloCanoBaixo.y, retanguloCanoBaixo.width, retanguloCanoBaixo.height);
  227.         shape.rect(retanguloCanoTopo.x, retanguloCanoTopo.y, retanguloCanoTopo.width, retanguloCanoTopo.height);
  228.         shape.setColor(Color.RED);
  229.         shape.end();*/
  230.  
  231.         //Teste de colisão
  232.         if (Intersector.overlaps(passaroCirculo, retanguloCanoBaixo) || Intersector.overlaps(passaroCirculo, retanguloCanoTopo)
  233.                 || posicaoInicialVertical <= 0 || posicaoInicialVertical >= alturaDispositivo) {
  234.             //Gdx.app.log("Colisão", "Houve colisão");
  235.             estadoJogo = 2;
  236.  
  237.         }
  238.  
  239.     }
  240.  
  241.     @Override
  242.     public void dispose() {
  243.         music.dispose();
  244.  
  245.         super.dispose();
  246.     }
  247.  
  248.     @Override
  249.     public void resize(int width, int height) {
  250.         viewport.update(width, height);
  251.     }
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement