quarta-feira, 12 de março de 2014

Pong singleplayer

Após duas aulas, onde foram apresentados a base para a criação do jogo, como movimentação da bola e paddle e como testar a colisão, usando Bounding Boxes, a atividade proposta foi unir os dois e criar um Pong para um jogador.

Foram implementados até o momento:

  • O básico proposto pelos professores;
  • Pontuação e High Score;
  • Aumento da velocidade em 20% a cada 5 rebatidas;
  • Reiniciar o jogo pressionando a tecla 'R';


já que boa parte do código está comentado, acredito que essas observações sejam suficientes


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//-----Variáveis Paddle------
int largPaddle = 15;
int altPaddle = 90;

int posPaddleX = 0;
int posYPaddle = mouseY;

int rebateu = 0;

//-----Variáveis Bola-----
int posBolaX = 760;
int posBolaY = 300;

int diamLargBola = 20;
int diamAltBola = 20;

float dirX = 5;
float dirY = 5;
//----Variáveis de jogo-----
int highScore = 0;
PFont fontePont;
boolean saiu = false;

void setup() {
  size(800, 600);
  fontePont = createFont("Arial", 16, true);
  noCursor();
}//fim setup

void draw() {
  background(0);
  
  fill(#47C714);
  textFont(fontePont,25);                 
  text(rebateu,700, 50);
  
  textFont(fontePont,20);                 
  text("HighScore: " + highScore,600, 580);

  criarPaddle();

  if (!saiu)
    criarBola();
  
}//fimDraw


void criarPaddle() {
  //criação e posicionamento paddle esquerdo
  fill(255); 
  noStroke();
  rect(posPaddleX, mouseY, largPaddle, altPaddle);
}

void criarBola() {
  //criação, posicionamento e colisões da bola
  fill(#47C714);
  noStroke();
  ellipse(posBolaX, posBolaY, diamLargBola, diamAltBola);

  //movimentação bola
  posBolaX+=dirX;
  posBolaY+=dirY;

  //colisão da bola com o lado superior 
  if (posBolaY <= 10) {
    dirY = -dirY;
  }
  //colisão da bola com o lado inferior
  if (posBolaY >= 590) {
    dirY = -dirY;
  }

  //colisão da bola com o lado direito 
  if (posBolaX >= 790) {
    dirX = -dirX;
  } 

  //colisão da bola com o paddle
  if (posBolaX - diamLargBola/2  == posPaddleX + largPaddle ) {     
    if ((posBolaY >= mouseY ) && (posBolaY <= mouseY + altPaddle)) {
      rebateu++;
      println("rebatida", rebateu);
      
      //incrementa a velocidade da bola em 20% a cada 5 colisões com o paddle
      if (rebateu%5==0) { 
        dirX = -dirX*1.2;
        println(dirX);
      }
      else {
        dirX = -dirX;
      }//fim incremento
      //colisão com o lado esquerdo
    }else if (posBolaX<posPaddleX) {
      println("saiu");
      saiu = true;      //variavel saiu recebe valor true, fazendo a função criarBola parar
          if (rebateu > highScore)
              highScore = rebateu;
      
    }
  }
  
}//fimCriarBola

void keyPressed() {//reiniciar o jogo pressionando a tecla R
  println(keyCode);
  if (keyCode==82) {
    saiu = false;
    posBolaX = 760;
    rebateu = 0;
    dirX = 5;
  }
}

Nenhum comentário:

Postar um comentário