2021年11月22日 星期一

忘了吃午餐

 今天要做落下的金幣

  • 首先要做出落下的球

    






 

程式碼:

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=y+3;//y++的三倍速度

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

}

 

  • 多了二號球做出落下的速度差別










 

程式碼:

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

float x2=150,y2=0,vx2=0,vy2=3;

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;

}


  • 使用陣列和迴圈來做出任一顆球

    








 

程式碼:

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

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是速度

  }

}

 

  • 碰到地板後回彈&再碰到天花板後會再回彈





程式碼:

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

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];//碰到地板後vy[i]會變成負的

  if(y[i]<0)vy[i]=-vy[i];//再碰到後會再變

  }

}


  • 做出一個碰到可以暫停的球


程式碼 :

//可以有任意組嗎

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

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++){

    fill(#F7E302);

  ellipse(x[i],y[i],50,50); 

  if(dist(mouseX,mouseY,x[i],y[i])<=50){

      continue;

    }

  y[i] = y[i] + vy[i];//vy是速度

  if(y[i]>600)vy[i]=-vy[i];//碰到地板後vy[i]會變成負的

  if(y[i]<0)vy[i]=-vy[i];//再碰到後會再變

  fill(255,0,0);ellipse(mouseX,mouseY,50,50);

  }

}


  • 碰到球就消失 




程式碼:

//可以有任意組嗎
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vy={3,2,2.5,4};
boolean []dead={false,false,false,false};//false 0,true 1
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(#F7E302);ellipse(x[i],y[i],50,50); 
      y[i] = y[i] + vy[i];//vy是速度
      if(y[i]>600)vy[i]=-vy[i];//碰到地板後vy[i]會變成負的
      if(y[i]<0)vy[i]=-vy[i];//再碰到後會再變
    }

  fill(255,0,0);ellipse(mouseX,mouseY,50,50);
  
}


 

  • 增加球數



 程式碼:

//可以有任意組嗎

float []x;

float []y;

float []vy;

boolean []dead;//false 0,true 1

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<10;i++){

    x[i]=random(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(#F7E302);ellipse(x[i],y[i],50,50); 

      y[i] = y[i] + vy[i];//vy是速度

      if(y[i]>600)vy[i]=-vy[i];//碰到地板後vy[i]會變成負的

      if(y[i]<0)vy[i]=-vy[i];//再碰到後會再變

    }

  fill(255,0,0);ellipse(mouseX,mouseY,50,50);

}



  • 使用CLASS ball製作出一大堆的球






 




 

程式碼:

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(){

 ellipse(x,y,50,50);

 if(dist(mouseX,mouseY,x,y)<50){

   dead=true;

 }

 if(dead==true)return;//離開函式

 y=y+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();

  }

}

 


  • 讓球瘋狂亂跑然後滑鼠碰到會消失 



程式碼:

class Ball{

 float x,y,vx,vy;

 boolean dead;

 Ball(){//建構同名的東西

 x= random(500);

 y= random(500);

 vx= random(-4,4);

 vy= 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)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();

  }

}


  • 加入一行 vy+=0.98;//重力加速度

  • 製作出遊戲-碰到球就黑屏




程式碼:

class Ball{
 float x,y,vx,vy;
 boolean dead;
 Ball(){//建構同名的東西
   reborn();
 }
 void reborn(){
 x= random(500);
 y= random(500);
 vx= random(-2,2);
 vy= random(-2,2);
 dead = false;
}
void draw(){
  if (dead==true)return;
  fill(#78C0E5);
  ellipse(x,y,5,5);
 if(dist(mouseX,mouseY,x,y)<5){
   dead=true;
   gameOver=true;
 }
 x= x+vx;
 y=y+vy;

 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(255);
  for(int i=0;i<99;i++){
    balls[i].draw();
    if(gameOver)background(256);
  }
}


======================補充

  • 因為大家都不知道boolean所以有了這個補充
  • if(0)=false;
  • java創始人覺得不合理,覺得if中只能填英文不能填數字
  • 程式碼結果--當按下滑鼠會變色



程式碼:

boolean down=false;
void setup(){

  size(500,500);
}

void draw(){
  if(mousePressed)down=true;

  else down=false;
  if(down) background(255,0,0);

  else background(0,255,0);
}





沒有留言:

張貼留言