2021年11月22日 星期一

week07

 一.

1.

程式碼:
float x=250,y=250,vx=0,vy=3;
void setup(){
   size(500,600); 
}
void draw(){
   background(255);
   ellipse(x,y,50,50);
   y=y+vy;///vy代表y軸方向速度

}


vy的值越大,白球下降速度越快

2.新增一顆球,讓兩顆球速度不同
程式碼:
float x=250,y=0,vx=0,vy=3;
float x2=150,y2=0,vx2=0,vy2=2;
void setup(){
   size(500,600); 
}
void draw(){
   background(255);
   ellipse(x,y,50,50);
   ellipse(x2,y2,50,50);
   y=y+vy;
   y2=y2+vy2;
}

x球與y球的速度不同


3.使用陣列跟for迴圈做出多顆球掉落
程式碼:
float []x={150,250,300,350};
float []y={0,0,0,0};
float []vx={0,0,0,0};
float []vy={4,2,3,6};///使用陣列一次宣稱x座標、y座標、x軸速度、y軸速度並給予多個數值
void setup(){
   size(500,600); 
}
void draw(){
   background(255);
   for(int i=0;i<4;i++){///使用for迴圈讀取對應的值
     ellipse(x[i],y[i],50,50);
     y[i]=y[i]+vy[i];
   }
}

使用陣列製作多顆球並給不同的球對應不同的位置與速度

4.撞到上下方即回彈
程式碼:
float []x={150,250,300,350};
float []y={0,0,0,0};
float []vx={0,0,0,0};
float []vy={4,2,3,6};
void setup(){
   size(500,600); 
}
void draw(){
   background(255);
   for(int i=0;i<4;i++){
     ellipse(x[i],y[i],50,50);
     y[i]=y[i]+vy[i];
     if(y[i]>600)vy[i]=-vy[i];///位置達底部,速度的方向改變
     if(y[i]<0)vy[i]=-vy[i];///位置達頂部,速度的方向改變
   }
}

位置撞到牆即回彈

二.
程式碼:
float []x={150,250,300,350};
float []y={0,0,0,0};
float []vx={0,0,0,0};
float []vy={4,2,3,6};
void setup(){
   size(500,600); 
}
void draw(){
   background(255);
   for(int i=0;i<4;i++){
     fill(255,255,0);ellipse(x[i],y[i],50,50);
     if(dist(mouseX,mouseY,x[i],y[i])<=50){
        continue; 
     }
     y[i]=y[i]+vy[i];
     if(y[i]>600)vy[i]=-vy[i];
     if(y[i]<0)vy[i]=-vy[i];
   }
   fill(255,0,0);ellipse(mouseX,mouseY,50,50);
}
紅球碰到黃球會使黃球停住


2.
程式碼:
float []x={150,250,300,350};
float []y={0,0,0,0};
float []vx={0,0,0,0};
float []vy={4,2,3,6};
boolean []dead={false,false,false,false};///false:0 true:0
void setup(){
   size(500,600); 
}
void draw(){
   background(255);
   for(int i=0;i<4;i++){
     if(dist(mouseX,mouseY,x[i],y[i])<=50){
        dead[i]=true;///碰到就死掉
     }
     if(dead[i]==true)continue;///如果死掉,continue換下一個
     fill(255,255,0);ellipse(x[i],y[i],50,50);
     y[i]=y[i]+vy[i];
     if(y[i]>600)vy[i]=-vy[i];
     if(y[i]<0)vy[i]=-vy[i];
   }
   fill(255,0,0);ellipse(mouseX,mouseY,50,50);
}

紅球碰到黃球會使黃球消失

額外練習:介紹布林變數
boolean down;
void setup(){
   size(500,300); 
}
void draw(){
   if(mousePressed)down=true;
   else down=false;
   print(down);
   if(down)background(255,0,0);
   else background(0,255,0);
}


三.
1.程式碼:
float []x;
float []y;
float []vx;
float []vy;///宣告
boolean []dead;
int N=20;
void setup(){
   size(500,600); 
   x=new float[N];
   y=new float[N];
   vy=new float[N];
   dead=new boolean[N];///陣列大小
   for(int i=0;i<N;i++){
      x[i]=random(500);///500以內隨機亂數
      y[i]=random(100,200);///100到200的隨機亂數
      vy[i]=random(3,4);///3到4的隨機亂數
      dead[i]=false;
   }
}
void draw(){
   background(255);
   for(int i=0;i<N;i++){
     if(dist(mouseX,mouseY,x[i],y[i])<=50){
        dead[i]=true; 
     }
     if(dead[i]==true)continue;
     fill(255,255,0);ellipse(x[i],y[i],50,50);
     y[i]=y[i]+vy[i];
     if(y[i]>600)vy[i]=-vy[i];
     if(y[i]<0)vy[i]=-vy[i];
   }
   fill(255,0,0);ellipse(mouseX,mouseY,50,50);
}
產生多顆球,並且讓位置與速度皆以亂數產生

2.
程式碼:
class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){
  x=random(500);
  y=random(100,200);
  vy=random(3,4);
  dead=false;
  }
  void draw(){
  if(dead==true) return;
  ellipse(x,y,50,50);
  if(dist(mouseX,mouseY,x,y)<50){
    dead=true;
  }
  y=y+vy;
  if(y>500) vy=-vy;
  if(y<0) vy=-vy;
  }
}
Ball []balls;
void setup(){
  size(500,500);
  balls=new Ball[20];
  for(int i=0;i<20;i++){
    balls[i]=new Ball();
  }
}
void draw(){
  background(255);
  for(int i=0;i<20;i++){
    balls[i].draw();
  }
}


2.
程式碼:
class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){/
    x=random(500);
    y=random(500);
    vy=random(-4,4);
    vx=random(-4,4);///-4到4之間的隨機亂數
    dead=false;
  }
  void draw(){
  if(dead==true) return;
  ellipse(x,y,50,50);
  if(dist(mouseX,mouseY,x,y)<50){
    dead=true;
  }
  x=x+vx;
  y=y+vy;
  if(y>500||y<0) vy=-vy;///y>500或y<0都會讓球回彈
  if(x>500||x<0) vx=-vx;///x>500或x<0都會讓球回彈
  }
}
Ball []balls;
void setup(){
  size(500,500);
  balls=new Ball[20];
  for(int i=0;i<20;i++){
    balls[i]=new Ball();
  }
}
void draw(){
  background(255);
  for(int i=0;i<20;i++){
    balls[i].draw();
  }
}

增加x軸的隨機速度,讓球除了y軸連x軸都有速度

3.
程式碼:
class Ball{//發明Ball物件
  float x,y,vx,vy;
  boolean dead;
  Ball(){//建構同名
    x=random(500);
    y=random(500);
    vy=random(-4,4);
    vx=random(-4,4);
    dead=false;
  }
  void draw(){
  if(dead==true) return;
  ellipse(x,y,50,50);
  if(dist(mouseX,mouseY,x,y)<50){
    dead=true;
  }
  x=x+vx;
  y=y+vy;
  vy+=0.98;///重力加速度
  if(y>500||y<0) vy=-vy;
  if(x>500||x<0) vx=-vx;
  }
}
Ball []balls;
void setup(){
  size(500,500);
  balls=new Ball[20];
  for(int i=0;i<20;i++){
    balls[i]=new Ball();
  }
}
void draw(){
  background(255);
  for(int i=0;i<20;i++){
    balls[i].draw();
  }
}
加上重力加速度的值 球看起來有彈跳的感覺

3.特訓99
程式碼:
class Ball{//發明Ball物件
  float x,y,vx,vy;
  boolean dead;
  Ball(){
    reborn();
  }
  void reborn(){
    x=random(500);
    y=random(500);
    vy=random(-2,2);
    vx=random(-2,2);
    dead=false;
  }
  void draw(){
  if(dead==true) return;
  fill(255,0,0);ellipse(x,y,5,5);
  if(dist(mouseX,mouseY,x,y)<5){
    dead=true;
    gameOver=true;
  }
  x=x+vx*1;///距離等於速度乘以時間
  y=y+vy*1;
  if(y>500||y<0) reborn();
  if(x>500||x<0) reborn();
  }
}
Ball []balls;
void setup(){
  size(500,500);
  balls=new Ball[99];///陣列值改成99
  for(int i=0;i<99;i++){
    balls[i]=new Ball();
  }
}
boolean gameOver=false;///宣告遊戲結束的變數
void draw(){
  background(0);
  for(int i=0;i<99;i++){
    balls[i].draw();
  }
  if(gameOver)background(255,0,0);///如果遊戲結束成立,畫面呈現全紅
}

遊戲畫面
遊戲結束畫面


















沒有留言:

張貼留言