2021年11月22日 星期一

橘貓(互動技術筆記_week07)

Processing-陣列,for迴圈,boolean

本日程式碼重點:

1.boolean:具有『真』(true) 與『偽』(false) 兩種值,用來表示是非對錯的概念。
boolean[] dead={false,false,false,false};//宣告一個布林陣列
boolean[] dead;//宣告一個空的布林陣列
2.random();//會隨機生成數字在()範圍內
x = random(500);//X為一個0~500的隨機數
3.class物件導向
class ball{}

第一節課金幣下墜

1.一個球版本

程式碼:

float x=250,y=0,vx=0,vy=3;// (座標x,y)

void setup(){

  size(500,600);

}

void draw(){

  background(255);

  ellipse(x,y,50,50);

  //y++; //(有兩行省略)速度 1,2,3,...

  //y=y+3; //3是速度

  y=y+vy; //vy是速度

}

2.兩個球版本

程式碼:

float x=250,y=0,vx=0,vy=3;

float x2=150,y2=50,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; //vy是速度

  y2=y2+vy2; //vy2是速度

}

3.使用陣列與for迴圈讓超多球球一起下降


程式碼:

float []x={250,150,350,350};

float []y={0,50,80,100};

float []vx={0,0,0,0};

float []vy={3,2,2.5,4};

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];

  }

}

4.加上邊界讓很多球球一起搖滾(碰到邊界會反彈)

程式碼:

float []x={250,150,350,350};

float []y={0,50,80,100};

float []vx={0,0,0,0};

float []vy={3,2,2.5,4};

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];//vy是速度

    if(y[i]>600)vy[i]=-vy[i];//撞到下方

    if(y[i]<0)vy[i]=-vy[i];//撞到上方

  }

}

5.黃球碰到紅球(滑鼠控制)會停下來

程式碼:

float[] x={250,150,350,300};
float[] y={0,150,80,100};
float[] vx={0,0,0,0};
float[] vy={3,2,2.5,4};
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]; //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);
}
6.黃球碰到紅球(滑鼠控制)會被消掉

1.四顆球

2.兩顆球

3.消光光了!













程式碼:
float[] x={250,150,350,300};
float[] y={0,150,80,100};
float[] vx={0,0,0,0};
float[] vy={3,2,2.5,4};
boolean[] dead={false,false,false,false};
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; //如果死了,換下一個
    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);
}
7.紅球消黃球增量版
球變多了
程式碼:
float[] x;
float[] y;
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]=100;
    vy[i]=random(2,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);
}
8.class物件導向,隨機生成球球
不會縮成一團
程式碼:
class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){
    x = random(500);//X為一個0~500的隨機數
    y = random(500);//Y為一個0~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;
    if(y>500||y<0) vy = -vy;
    if(x>500||x<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();
  }
}
9.有重力加速度的球
上下跳動更加明顯的球球
程式碼:
class 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) 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();
  }
}
10.撞到小紅點就死亡(畫面變藍色)
1.沒撞到:)


2.撞到了:(
程式碼:
//發射子彈,玩家碰到子彈就結束遊戲(變成藍色的畫面)
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];
  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(100,180,180);//變色
}

沒有留言:

張貼留言