2021年11月22日 星期一

天文社社員招募中week09

   

球遊戲


1.讓球掉下來





程式如下:

float x=250,y=0,vx=0,vy=3;
void setup(){
  size(500,600);
}
void draw(){
  background(255);  ///清背景
  ellipse(x,y,50,50);
  y=y+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;
  y2=y2+vy2;
}




3.用for+陣列做很多不同速度的球





程式如下:

float []x={250,150,350,300};
float []y={0,80,50,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,300};
float []y={0,80,50,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];
    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,80,50,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(200,51,10); 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(20,55,200); ellipse(mouseX,mouseY,50,50); ///滑鼠球




6.碰到滑鼠球就會不見






程式如下:


float []x={250,150,350,300};
float []y={0,80,50,100};
float []vy={3,2,2.5,4};
boolean []dead={false,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(200,51,10); 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(20,55,200); ellipse(mouseX,mouseY,50,50);
}





7.練習boolean變數




原始是綠色



按下去變紅色



程式如下:


///true成立,false不成立
boolean down; ///按下去
void setup(){
  size(500,500);
}
void draw(){
  if(mousePressed) down=true; ///按下去
  else down=false;
  print(down);
  if(down)background(255,0,0);  ///紅色
  else background(50,120,60);   ///綠色
}


8.把球變多,位置用亂數決定






程式如下:


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]=random(100,200);
    vy[i]=random(3,4);  ///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(200,51,10); 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(20,55,200); ellipse(mouseX,mouseY,50,50);
}
  


9.用class物件







程式如下:


class Ball{  ///發明class物件
  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();
  }
}



10.加入vx





程式如下:


class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){
    x=random(500);
    y=random(100,200);
    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();
  }
}



11.重力加速度







程式如下:


class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){
    x=random(500);
    y=random(100,200);
    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;
    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();
  }
}



12.碰到紅點變紅色









程式如下:


class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){
    reborn();
  }
  void reborn(){
    x=random(500);
    y=random(100,200);
    vx=random(-4,4);
    vy=random(-4,4);
    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;
    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(0);
  for(int i=0;i<99;i++){
    balls[i].draw();
  }
  if(gameOver)background(255,0,0);
}   



沒有留言:

張貼留言