quarta-feira, 4 de maio de 2016

Aula 11 - Navezinha




int naveAlvoX = 300;
int naveAlvoY = 50;
int deslocaX = 5;
int naveTiroX = 300;
int naveTiroY = 550;
boolean atirando = false;
int tiroX = 300;
int tiroY = 550;
int tiros = 3;
int estado = 0;

void setup() {
  size(600, 600);
}

void draw() {
  if (estado == 0) {
    menu();
  }
  if (estado == 1) {
    rainbowRoad();
    moveNaveAlvo();
    moveNaveTiro();
    if (atirando) {
      moveTiro();
    }
    verificaAcerto();
  }
}

void moveNaveAlvo() {
  naveAlvoX += deslocaX;
  if (naveAlvoX >= 650) {
    naveAlvoX = -50;
  }
  desenhaNave(naveAlvoX, naveAlvoY);
}

void moveNaveTiro() {
  naveTiroX = mouseX;
  if (mousePressed && !atirando && tiros > 0) {
    atirando = true;
    tiroX = naveTiroX;
    tiros--;
  }
  desenhaNave(naveTiroX, naveTiroY);
  fill(0);
  textSize(10);
  text(tiros, naveTiroX, naveTiroY);
}

void moveTiro() {
  noStroke();
  colorMode(HSB, height);
  tiroY -= 10;
  fill(tiroY, height, height);
  rect(tiroX-5, tiroY-15, 10, 30);
  colorMode(RGB, 255);
}

void desenhaNave(int x, int y) {
  stroke(0, 255, 0);
  fill(127);
  ellipse(x, y, 100, 40);
  fill(0, 127, 255);
  arc(x, y-5, 50, 50, PI, TAU);
  line(x-5, y-25, x-15, y-40);
  line(x+5, y-25, x+15, y-40);
}

void verificaAcerto() {
  if (tiroY<=50 && tiroY>=10 && tiroX>naveAlvoX-50 && tiroX<naveAlvoX+50) {
    stop();
  }
  if (tiroY<=-15) {
    atirando = false;
    tiroY = 550;
  }
}

void rainbowRoad() {
  colorMode(HSB, 2);
  strokeWeight(2);
  for (int i = 0; i<=height; i++) {
    stroke(-(sin(radians(frameCount+i))-1), 2, 2);
    line(0, i, width, i);
  }
  colorMode(RGB, 255);
}

void menu() {
  colorMode(HSB, 2);
  background(0);
  fill((sin(radians(frameCount))+1), 2, 2);
  textSize(50);
  text("Press Space to play", 55, 300);
  colorMode(RGB, 255);
  if (keyPressed && key == ' ') {
    estado = 1;
  }
}

Algo (tipo o uso de < e >) trava o código aqui, mas funciona normalmente no processing

Nenhum comentário:

Postar um comentário

Pode falar, eu não mordo... Pelo menos não através da internet