Atividade 11
- Marcos André
- 2 de mai. de 2016
- 2 min de leitura
'Apresentar um menu inicial com título (que leva ao jogo quando
a barra de espaços é pressionada) e permitir que o disco voador
faça até três disparos (quantidade restante indicada na tela)'


Utilizando-se de funções já vistas em sala, como as funções key, keyPressed,Não foi difícil implementar o menu.Visando uma melhor visualização do código separei em dois arquivos, em um, o jogo da nave pronto, em outro a função que executa o menu como se pode ver abaixo:


Segue Código completo e comentado:
/////////////////JOGO NAVE////////////////////
int naveAlvoX = 300; int naveAlvoY = 50; int deslocaX = 5; int naveTiroX = 300; int naveTiroY = 550; int tiroX = 300; int tiroY = 550; boolean atirando = false; PImage background; //Imagem de plano de fundo boolean GameOver=false;//Define o fim do jogo boolean Disparado=false; /*Variável que me utilizei para evitar o bug do tiro teleguiado*/ int NTiros=3;//Tiros restantes
void setup(){ background=loadImage("background.png"); size(600, 600); frameRate(60); background(10); } void draw(){ if(menu==true) Menu(); //Função que implementa o menu exigido pela tarefa. else{ blendMode(BLEND); image(background,0,0); blendMode(HARD_LIGHT); moveNaveAlvo(); moveNaveTiro(); fill(200,222,122); textSize(20); text("Tiros:"+NTiros,10,20);//Mostra o número de tiros restantes if (atirando == true) moveTiro();
verificaAcerto(); verificaTiros(); }
} void desenhaNave(int x, int y){ fill(random(80,255),random(80,255),random(80,255)); ellipse(x, y, 100, 40); arc(x, y-5, 50, 50, 3.14, 6.28); line(x-5, y-25, x-15, y-40); line(x+5, y-25, x+15, y-40); } void moveTiro(){ tiroY = tiroY - 10; ellipse(tiroX-10, tiroY-15, 10, 30); } void moveNaveAlvo(){ naveAlvoX = naveAlvoX + deslocaX; if (naveAlvoX >= 611) { naveAlvoX=-9; //Aqui corrijo a movimentação da nave alvo } if (naveAlvoX <= -10) { naveAlvoX=610; } desenhaNave(naveAlvoX, naveAlvoY); }
void moveNaveTiro(){ if(naveTiroX<=mouseX){ naveTiroX = naveTiroX + 5;
} /*Aqui crio o delay do mouse!*/ if(naveTiroX>=mouseX){ naveTiroX = naveTiroX - 5; } if (mousePressed == true){ atirando = true; if(!Disparado){ /*Aqui eu impeço o reposicionamento da bala caso a variável disparado seja verdadeiro*/ tiroX = naveTiroX; Disparado=true; } } desenhaNave(naveTiroX, naveTiroY); }
void verificaAcerto(){ if ((tiroY<=50) && (tiroX > naveAlvoX-50) && (tiroX < naveAlvoX+50)) { textSize(30); text("Você Venceu!",width/2-290,height/2-60); textSize(15); text("Pressione o mouse para continuar ou ENTER para retornar ao Menu!",width/2-290,height/2-30);//Notifica a colisão tiroY=100;/*Aqui eu retiro o tiro da colision box da nave alvo para que o loop possa ser restaurado sem que entre em conflito com qualquer outra condição do jogo.*/ GameOver=true; noLoop(); } if (tiroY<=0){ Disparado=false;/*Aqui é liberado o reposicionamento da bala*/ atirando = false; NTiros=NTiros-1; tiroY = 550; } }
void verificaTiros(){ if(NTiros==0){ textSize(40); text("GAME OVER",width/2-290,height/2-60); textSize(15); text("Pressione o mouse para continuar ou ENTER para retornar ao Menu",width/2-290,height/2-30);//Caso os tiros acabem o jogo acaba. GameOver=true; noLoop(); }
}
void keyPressed(){if(GameOver==true && (keyPressed == true) && (key==ENTER)){ menu=true;/*Variável responsável por direcionar o código para o Menu*/ GameOver=false; loop();//restaura o loop } }
void mousePressed() { if(GameOver){ loop(); GameOver=false; NTiros=3; } }
/////////////////MENU////////////////////
boolean menu=true;
void Menu(){ NTiros=3; PImage back=loadImage("space.jpg"); image(back,0,0); textSize(108); text("Menu", 150, 118); textSize(40); text("Pressione ESPAÇO para iniciar", 11, 368); if ((keyPressed == true) && (key == ' ')) { menu=false; } }
Comments