2017年10月16日 星期一

Week05 是賴小沫的

✎會跟著滑鼠移動的大眼睛(xeyes)

void setup(){
  size(800,800);
}
void draw(){
  background(128);
  strokeWeight(20);
  ellipse(100,200,180,360);
  ellipse(300,200,180,360);
 
  float angle1=atan2((mouseY-200)/2,mouseX-300);  //反過來的tangent,用來計算角度
  float newX1=300+100*cos(angle1)/2;
  float newY1=200+200*sin(angle1)/2;
  ellipse(newX1,newY1,10,10);
  float angle2=atan2((mouseY-200)/2,mouseX-100);  //反過來的tangent,用來計算角度
  float newX2=100+100*cos(angle2)/2;
  float newY2=200+200*sin(angle2)/2;
  ellipse(newX2,newY2,10,10);
}

按下左上角的三角形Ctrl+R,即可執行看結果


✎泡泡消消樂

👀可以發射出球

void setup(){
  size(400,800);
}
float ballX=200,ballY=600;
float ballVX=0,ballVY=0;
float angle=0;
void draw(){
  background(0,128,0);
  fill(#FFBE81);
  ellipse(200,600,100,100);
  line(mouseX,mouseY,200,600);
  fill(#FFFB81);
  ellipse(ballX,ballY,30,30);
  angle=atan2(mouseY-600,mouseX-200);
 
  ballX+=ballVX;
  ballY+=ballVY;
}
void mouseMoved(){ //滑鼠移動
  ballX=200+50*cos(angle);
  ballY=600+50*sin(angle);
}
void mousePressed(){
  ballVX=cos(angle);
  ballVY=sin(angle);
}

按下左上角的三角形Ctrl+R,即可執行看結果


👀利用陣列存角度、位置、速度(此版本第10顆子彈會當掉)

void setup(){
  size(400,800);
}
float []ballX=new float [10];
float []ballY=new float [10];
float []ballVX=new float [10];
float []ballVY=new float [10];
float []angle=new float [10];
int now=0;
void draw(){
  background(0,128,0);
  fill(#FFBE81);
  ellipse(200,600,100,100);
  for(int i=0;i<10;i++){
    fill(#FFFB81);
    ellipse(ballX[i],ballY[i],30,30);
    ballX[i]+=ballVX[i];
    ballY[i]+=ballVY[i];
  }
  angle[now]=atan2(mouseY-600,mouseX-200); //反過來的tangent,用來計算角度
}
void mouseMoved(){
  ballX[now]=200+50*cos(angle[now]);
  ballY[now]=600+50*sin(angle[now]);
}
void mousePressed(){
  ballVX[now]=cos(angle[now]);
  ballVY[now]=sin(angle[now]);
  now++;
}

按下左上角的三角形Ctrl+R,即可執行看結果

👀加上目標以及第10顆不會當機

void setup(){
  size(400,800);
  for(int i=0;i<20;i++){
    badDead[i]=false;
    badX[i]=random(0-300,400+300);
    badY[i]=random(-2000,0);
    badVX[i]=-(badX[i]-200)/300;
    badVY[i]=-(badY[i]-600)/300;
  }
}
float []ballX=new float [10];
float []ballY=new float [10];
float []ballVX=new float [10];
float []ballVY=new float [10];
float []angle=new float [10];
float []badX=new float [20];
float []badY=new float [20];
float []badVX=new float [20];
float []badVY=new float [20];
boolean []badDead=new boolean[20];
int now=0;
boolean bGameover=false;
void draw(){
  //顯示文字
  if(bGameover){
    text("Game Over",200,500);
    return;
  }
  background(0,128,0);
  fill(#FFBE81);
  ellipse(200,600,100,100);
  for(int i=0;i<10;i++){
    fill(#FFFB81);
    ellipse(ballX[i],ballY[i],30,30);
    ballX[i]+=ballVX[i];
    ballY[i]+=ballVY[i];
    for(int j=0;j<20;j++){
      if(badDead[j]==false && dist(ballX[i],ballY[i],badX[j],badY[j])<30){
        badDead[j]=true;
      }
    }
  }
  for(int i=0;i<20;i++){
    if(badDead[i]==false){
      fill(255,0,0);
      ellipse(badX[i],badY[i],30,30);
      badX[i]+=badVX[i];
      badY[i]+=badVY[i];
      if(dist(badX[i],badY[i],200,600)<65) bGameover=true;
    }
  }
  angle[now]=atan2(mouseY-600,mouseX-200);
}
void mouseMoved(){
  ballX[now]=200+50*cos(angle[now]);
  ballY[now]=600+50*sin(angle[now]);
  ballVX[now]=0;ballVY[now]=0;
}
void mousePressed(){
  ballVX[now]=cos(angle[now]);
  ballVY[now]=sin(angle[now]);
  now++;
  if(now>=10) now=0;
}

按下左上角的三角形Ctrl+R,即可執行看結果


沒有留言:

張貼留言