rakka2

先ほどの落下ゲームProcessing:落下ゲームを改良しました。
クラスを用いて、20個のボールがランダムな位置から落下するようにしました。
スコアも表示するようにしました。
カラフルにもしました。
 
クラスで使用する変数(落下位置などに関係するもの)はクラス内で宣言しないと、プログラムが混乱してしまうことを学びました。
 差し支えないものだけが関数の外のグローバル変数として宣言するのですね。
 
Maru[] maruhairetu; int score=0; void setup(){ size(500,500); maruhairetu=new Maru[20]; for(int i=0; i<maruhairetu.length; i++){ Maru maruhensu = new Maru(random(width),random(-300)-30, random(255),random(255),random(255)); maruhairetu[i]=maruhensu; } } void draw(){ background(255); fill(100); text("Score:"+score,10,10); for(Maru maruhensu:maruhairetu){ maruhensu.draw(); } } class Maru{ float xi,yi; float c1,c2,c3; float life=60; final float GRAVITY=9.8; float speed=0; int good=0; float goodx=0; float goody=0; Maru(float x, float y, float c1, float c2, float c3){ xi=x; yi=y; this.c1=c1; this.c2=c2; this.c3=c3; } void draw(){ speed+=9.8/60; yi+=speed; smooth(); noStroke(); fill(c1,c2,c3,100); ellipse(xi,yi,50,50); if(yi>500-25){ speed=-speed*0.5; yi=500-25; life-=2.5; } if(mouseX>xi-25 && mouseX<xi+25 && mouseY>yi-25 && mouseY<yi+25){ good=60; goodx=mouseX; goody=mouseY; reset(); score+=10; } if(good>0){ fill(100); text("good!",goodx,goody); good-=1; } if(life<0){ reset(); } } void reset(){ yi=-50; xi=random(500); life=30+random(30); } }