// Game name: Rocket Designer: Zhuosheng Luo
// Move your spaceship to keep away from falling stone
// Press "A" to move left, press"D"to move right
// You will lose the game if the length of blood equal to zero
int playerX = 200;
int playerY = 350;
int playerspeed=3;
int ballX =0;
int ballY =0;
int ballx =0;
int bally =0;
int balla=0;
int ballb=0;
int ballYspeed = 8;
int ballyspeed = 8;
int ballbspeed = 8;
int bloodX=200;
float smokewidth=0.3;
float smoke=2;
boolean hit = false;
boolean right=false;
boolean left=false;
void setup(){ //set up basic environment
size(400,400);
rectMode(CENTER);
frameRate(60);
}
void draw(){ //bakcground and game content
background(0);
gameplay();
}
void gameplay(){ // if blood is greater than zero, game start, if it equals to zero, game over
if(bloodX>0){
stars();
spaceship();
update();
ballA();
ballB();
ballC();
blood();
} else if(bloodX==0)
{ gameover();
}
}
void stars(){ // draw stars, random numbers will make it look like moving
noStroke();
fill(random(200,255));
ellipse(random(50,350),random(50,350),random(2,5),random(2,5));
}
void spaceship(){ // draw spaceship
noStroke();
fill(255,0,0);
triangle(playerX,playerY,playerX-10,playerY+10,playerX+10,playerY+10);
fill(235);
rect(playerX,playerY+20,20,20);
fill(99,221,255);
ellipse(playerX,playerY+20,10,10);
fill(random(200,255));
rect(playerX-13,playerY+40,smoke,25);
rect(playerX+13,playerY+40,smoke,25);
smoke=smoke+smokewidth;
if(smoke>7){
smoke=2;
}
fill(255,0,0);
triangle(playerX-20,playerY+30,playerX-10,playerY+30,playerX-10,playerY+20);
triangle(playerX+20,playerY+30,playerX+10,playerY+30,playerX+10,playerY+20);
}
void keyPressed(){ //player movement
if (key == 'A' || key == 'a'){
left=true;
}
else if (key == 'D' || key == 'd'){
right=true;
}
}
void keyReleased() {
if(key=='A' ||key =='a'){
left=false;
}
else if(key=='D' ||key =='d'){
right=false;
}
}
void update(){
if (left==true){
playerX =playerX-playerspeed;
}
if(right==true){
playerX =playerX+playerspeed;
}
if (playerX<=15){
playerX=15;
}
if(playerX>=385){
playerX=385;
}
}
void ballA(){ //falling stone (left)
ballY = ballY+ ballYspeed;
if(ballY>random(430,470)){
ballY=0;
ballX=int(random(50,200));
}
noStroke();
fill(255,230,120);
triangle(ballX,ballY-random(40,50),ballX-14,ballY,ballX+14,ballY);
fill(255,0,0);
triangle(ballX,ballY-random(20,30),ballX-10,ballY-10,ballX+10,ballY-10);
fill(120);
ellipse(ballX,ballY,30,30);
}
void ballB(){ // falling stone (right)
bally = bally+ ballyspeed;
if((bally>random(430,470))&& bally!=ballY){
bally=0;
ballx=int(random(210,385));
}
noStroke();
fill(255,230,120);
triangle(ballx,bally-random(40,50),ballx-14,bally,ballx+14,bally);
fill(255,0,0);
triangle(ballx,bally-random(20,30),ballx-10,bally-10,ballx+10,bally-10);
fill(120);
ellipse(ballx,bally,30,30);
}
void ballC(){ // falling stone (mid)
ballb = ballb+ ballbspeed;
if((ballb>random(430,470))&& ballb!=ballY && ballb!=bally){
ballb=0;
balla=int(random(150,250));
}
noStroke();
fill(255,230,120);
triangle(balla,ballb-random(40,50),balla-14,ballb,balla+14,ballb);
fill(255,0,0);
triangle(balla,ballb-random(20,30),balla-10,ballb-10,balla+10,ballb-10);
fill(120);
ellipse(balla,ballb,30,30);
}
void blood(){ // if falling stone's positions touch the spaceship, the length of blood reduces 20, and the x-axis position of falling stone will back to zero.
fill(255,0,0);
quad(0,0,0,20,bloodX,20,bloodX,0);
if(ballX>playerX-20 && ballX<playerX+20 && ballY>350) {
hit = true;
ballY = 0;
}
if(ballx>playerX-20 && ballx<playerX+20 && bally>350) {
hit = true;
bally = 0;
}
if(balla>playerX-20 && balla<playerX+20 && ballb>350) {
hit = true;
ballb = 0;
}
if(hit==true){
bloodX= bloodX-20;
hit=false;
}
}
void gameover(){ // show up new game scene if blood equals to zero, and click "again" button can restart the game
fill(70);
rect(width/2,height/2,width,height);
fill(0,255,0);
ellipse(width/2,height/2,100,100);
fill(255);
textSize(25);
stroke(2);
text("again",width/2-33,height/2+8);
if(mousePressed && mouseX>width/2-50 && mouseX<width/2+50&&mouseY<height/2+50&&
mouseY>height/2-50){
bloodX=200;
}
}