2017年11月6日 星期一

17/11/06 德宇的筆記Week08

目標一:製作雪球大戰


製作進度預覽:

















程式碼:

PImage imgBG;
import processing.sound.*;

SoundFile sound;
SoundFile sound1;
SoundFile sound2;
PVector[]enemy=new PVector[5];
PVector[]enemyV=new PVector[5];
int now =0;
int stage=0;
void reborn(int i)
{
  enemy[i]=new PVector(random(500), random(500));
  float angle=random(2*PI);
  enemyV[i]=new PVector(3*cos(angle), 3*sin(angle));
}    
void setup()
{
  imgBG=loadImage("1.jpg");
  fill(0, 0, 0);
  size(500, 500);
  for (int i=0; i<5; i++)
  {
    reborn(i);
  }
  sound = new SoundFile(this,"Battle Theme.mp3");
  sound.play();
}
int kidsize=30;
float kidX=250, kidY=250, dir=0;
float [] ballX=new float[5];
float [] ballY=new float[5];
float [] ballVX=new float[5];
float [] ballVY=new float[5];
boolean ballFly=false;
float [] kid= new float[5];
float [] ball= new float[5];
int score=0;
int heart=5;
void draw()
{
  if (stage==0) 
  {
    fill(255, 0, 0);
    textSize(60);
    text("Click to Start", 20, 100);
  } 
  else if (stage==1) 
  {  
    background(imgBG);
    textSize(30);
    fill(0);
    text("Score:" + score + "   Heart:" + heart, 30, 30);
    for (int i=0; i<5; i++)
    {
      fill(255, 220, 40);
      enemy[i].x +=enemyV[i].x;
      enemyV[i].y+=enemyV[i].y;
      ellipse(enemy[i].x, enemy[i].y, 30, 30);
      if (enemy[i].x<0||enemy[i].x>500
        ||enemy[i].y<30||enemy[i].y>500) reborn(i);
      fill(255, 40, 40);
      ellipse(kidX, kidY, 50, 50);
      beginShape(POLYGON);
      vertex(kidX+kidsize*cos(radians(dir+80)), kidY+kidsize*sin(radians(dir+80)));
      vertex(kidX+kidsize*cos(radians(dir+100)), kidY+kidsize*sin(radians(dir+100)));
      vertex(kidX+kidsize*cos(radians(dir-100)), kidY+kidsize*sin(radians(dir-100)));
      vertex(kidX+kidsize*cos(radians(dir-80)), kidY+kidsize*sin(radians(dir-80)));
      endShape();
      if (ballFly)
      {
        fill(255);
        ellipse(ballX[now], ballY[now], 10, 10);
        ballX[now]+=ballVX[now];
        ballY[now]+=ballVY[now];
        now++;
        if (now>=5)now=0;
      } 
      if(dist (enemy[i].x,enemy[i].y,ballX[now],ballY[now])<40) 
       {
       score+=10;
       reborn(i);
       if(score>=100)stage=3;
       }
       if(dist(enemy[i].x,enemy[i].x,kidX,kidY)<1)
       {
       heart--;
       if(heart<=0)stage=2;
       reborn(i);
       }
    }
  } else if (stage==2) {
    background(0, 0, 0);
    fill(255);
    textSize(80);
    text("You lose =(", 30, 250);
    sound2 = new SoundFile(this, "Game Over.mp3");
  } else if (stage==3) {

    background(255, 255, 255);
    fill(0);
    textSize(80);
    text("You win!!", 80, 250);
    sound1 = new SoundFile(this, "Victory.mp3");
  }
}
void keyPressed()
{
  if (keyCode==RIGHT) dir+=20;
  if (keyCode==LEFT) dir-=20;
  if (keyCode==UP)
  { 
    kidX += 10*cos(radians(dir));
    kidY += 10*sin(radians(dir));
  }
  if (keyCode==DOWN)
  {
    kidX -= 10*cos(radians(dir));
    kidY -= 10*sin(radians(dir));
  }
  if (key==' ')
  {
    ballX[now]=kidX; 
    ballY[now]=kidY; 
    ballVX[now]=10*cos(radians(dir)); 
    ballVY[now]=10*sin(radians(dir)); 
    ballFly=true;
  }

void mousePressed() {
  if (stage==0) {
    stage=1;
  }
  if (stage==2||stage==3) {
    stage=0;
    heart=5;
    score=0;
  }
}

沒有留言:

張貼留言