int mapSizex=480; //map x >>>
int mapSizey=480; //map y ↓↓↓
int playerx=mapSizex/2, playery=mapSizey/2; //player place at mid
int i=0; //use for
int maxWalkSpeed=2; //move speed
float WalkX=0; //x++ speed
float WalkXtmp=0; //x++ speed tmp
float walkSpeedx=0; //x start speed
float WalkY=0; //y++speed
float WalkYtmp=0; //y++speed temp
float walkSpeedy=0; //y start speed
int MaxRock=100; //max rock how many
float LowRockSpeed=0.1; //rock move low speed
float MaxRockSpeed=1; //rock move fast speed
float[] RockV= new float[MaxRock+1]; // x and y speed
float[] RockX= new float[MaxRock+1]; //x
float[] RockXv= new float[MaxRock+1]; //x speed
float[] RockY= new float[MaxRock+1]; //y
float[] RockYv= new float[MaxRock+1];//y speed
float[] RockBS= new float[MaxRock+1]; // big small
boolean gamestart=false; //pan duan start or not
boolean gameover=false; //pan duan die or not
int score=0; //score
PImage img, imgBG,imgr;
void setup()
{
size(mapSizex, mapSizey+6); //+5 or can't see score
img=loadImage("spaceship.png");
imgBG=loadImage("starworld.jpg"); //picture
imgr=loadImage("1.png");
imgBG.resize(mapSizex, mapSizey+6); //+5 or can't see score
imageMode(CENTER);
playerx=floor(mapSizex/2); //player place reset
playery=floor(mapSizey/2); //same
for (i=1;i<=MaxRock;i++)
{
switch(floor(random(1,5))) // random come out ball
{
case 1: //<< x place -10 y random place
RockX[i]=-10;
RockY[i]=random(-10, mapSizey+10);
break;
case 2: //↑↑ y place -10 x random place
RockX[i]=random(-10, mapSizex+10);
RockY[i]=-10;
break;
case 3: //>> x place +10 y random place
RockX[i]=mapSizex+10;
RockY[i]=random(-10, mapSizey+10);
break;
case 4://↓↓ y place +10 x random place
RockX[i]=random(-10, mapSizex+10);
RockY[i]=mapSizey+10;
break;
}
RockV[i]=random(LowRockSpeed,MaxRockSpeed); //rock speed
RockXv[i]=RockV[i]*((playerx-RockX[i])/sqrt(sq(RockX[i]-playerx)+sq(RockY[i]-playery))); //x function
RockYv[i]=RockV[i]*((playery-RockY[i])/sqrt(sq(RockX[i]-playerx)+sq(RockY[i]-playery))); //y function
RockBS[i]=5;//ball big small
}
}
void draw()
{
background(imgBG);
image (img, playerx, playery, 15,15); // mid picture
if (gamestart)
{
update();
setConnon();
scoreShow();
}
else
{
textSize(40); //big small
fill(255,255,255); //colour
text("PRESS HERE TO START", 30,100); //title
}
}
void keyPressed() //keyboard up down left right
{
switch(keyCode)
{
case LEFT: //<<
WalkX=-0.2; //speed
WalkXtmp=0; //ship start 0 everytime then -0.2
break;
case RIGHT: //>>
WalkX=0.2;
WalkXtmp=0;
break;
case UP: //^^
WalkY=-0.2;
WalkYtmp=0;
break;
case DOWN: //↓↓
WalkY=0.2;
WalkYtmp=0;
break;
}
}
void keyReleased() //put out
{
switch(keyCode)
{
case LEFT:
WalkXtmp=WalkX; //orginal speed switch
WalkX=0; //restar 0
break;
case RIGHT:
WalkXtmp=WalkX;
WalkX=0;
break;
case UP:
WalkYtmp=WalkY;
WalkY=0;
break;
case DOWN:
WalkYtmp=WalkY;
WalkY=0;
break;
case ' ': //space bar
if (gameover==true)
{
score=0;
gameover=false;
frameCount=0;
WalkYtmp=0;
setup();
//redraw();
}
break;
}
}
void mouseClicked()
{
if (gameover==true)
{
score=0;
gameover=false;
frameCount=0;
setup();
//redraw();
}
if (gamestart==false)
{
gamestart=true;
}
}
void update()
{
if (playery>=10 && playery<=mapSizey-10) //renew y place
{
playery+=walkSpeedy;
if (WalkY!=0)
{
if (abs(walkSpeedy)<maxWalkSpeed)
{
walkSpeedy+=WalkY;
}
else
{
if (walkSpeedy>0)
{
walkSpeedy=maxWalkSpeed;
}
else
{
walkSpeedy=-maxWalkSpeed;
}
}
}
else //player up down
{
if (walkSpeedy>0.2)
{
walkSpeedy-=WalkYtmp;
}
else
{
walkSpeedy=0;
WalkYtmp=0;
}
}
}
else
{
if (playery<10)
{
walkSpeedy=0;
playery=10;
WalkY=0;
}
if (playery>mapSizey-10)
{
walkSpeedy=0;
playery=mapSizey-10;
WalkY=0;
}
}
if (playerx>=10&&playerx<=mapSizex-10)
{
playerx+=walkSpeedx;
if (WalkX!=0)
{
if (abs(walkSpeedx)<maxWalkSpeed)
{
walkSpeedx+=WalkX;
}
else
{
if (walkSpeedx>0)
{
walkSpeedx=maxWalkSpeed;
}
else
{
walkSpeedx=-maxWalkSpeed;
}
}
}
else
{
if (abs(walkSpeedx)>0.2)
{
walkSpeedx-=WalkXtmp;
}
else {
walkSpeedx=0;
WalkXtmp=0;
}
}
}
else
{
if (playerx<10) //dun give aloplant go outside
{
walkSpeedx=0;
playerx=10;
WalkX=0;
}
if (playerx>mapSizex-10)
{
walkSpeedx=0;
playerx=mapSizex-10;
WalkX=0;
}
}
noStroke();
fill(255,255,0,1);
image(img,playerx, playery, 15, 15); //mid xiao dian
}
void setConnon()
{
for (i=1;i<=MaxRock;i++) // use for to keep like rock
{
if (abs(RockX[i]-playerx)<RockBS[i]&&abs(RockY[i]-playery)<RockBS[i]) {
gameover=true;
}
else
{
if ((RockX[i]>mapSizex+10)||(RockX[i]<-10)||(RockY[i]<-10)||(RockY[i]>mapSizey+10)||gameover)
{
switch(floor(random(1,5))) //if rock fly out then renew one more rock then score+1
{
case 1: //<<
RockX[i]=-10;
RockY[i]=random(-10, mapSizey+10);
break;
case 2: //^^
RockX[i]=random(-10, mapSizex+10);
RockY[i]=-10;
break;
case 3: //>>
RockX[i]=mapSizex+10;
RockY[i]=random(-10, mapSizey+10);
break;
case 4: //↓↓
RockX[i]=random(-10, mapSizex+10);
RockY[i]=mapSizey+10;
break;
}
RockV[i]=random(LowRockSpeed,MaxRockSpeed);
RockXv[i]=RockV[i]*((playerx-RockX[i])/sqrt(sq(RockX[i]-playerx)+sq(RockY[i]-playery))); //function
RockYv[i]=RockV[i]*((playery-RockY[i])/sqrt(sq(RockX[i]-playerx)+sq(RockY[i]-playery))); //function
if (!gameover)
{
score+=1;
if(score>=10)
{
MaxRockSpeed+=0.01;
}
}
}
else // if rock at screen inside then continue fly
{
RockX[i]+=RockXv[i];
RockY[i]+=RockYv[i];
image(imgr ,RockX[i], RockY[i], RockBS[i], RockBS[i]);
}
}
}
}
void scoreShow() //show score
{
if (gameover)
{
textSize(15);
fill(255, 255, 255);
text("Game Over\nYour Score: "+score+"\nPress space bar to continue", floor(mapSizex/4), floor(mapSizey/2));
MaxRockSpeed=1;
}
else
{
textSize(10);
fill(255, 255, 255);
text("Your Score: "+score, 10, mapSizey+5); //left botton score
}
}
沒有留言:
張貼留言