一.
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);///如果遊戲結束成立,畫面呈現全紅
}
沒有留言:
張貼留言