Processingについて
操作する円が触れたら変色する旗のマトリクスを表示し,赤い円を避けながら,全ての旗にタッチするゲームを作成したいのですが、 ランダムで赤い円を縦横無尽に動かして、マウスカーソルについてくる黒い円が赤い円に当たると背景が黄色になってゲームオーバーというところまでできました。
あとは旗を描画して黒い円が旗に触れたら旗が変色するというプログラムを作りたいです。教えていただけるとありがたいです。
下に「ランダムで赤い円を縦横無尽に動かして、マウスカーソルについてくる黒い円が赤い円に当たると背景が黄色になってゲームオーバー」のコードを書いておきます。
また完成した時の画像も貼っておきます。
float [][] pos;
float [] mc = new float[2];
int num = 100;
float [][] vec;
boolean flag = false;
void setup() {
size(800,500);
pos = new float[num][2];
for(int i = 0; i < num; i++){
pos[i][0] = random(800);
pos[i][1] = random(500);
}
mc[0] = 400;
mc[1] = 250;
vec = new float[num][2];
for(int i = 0; i < num; i++){
vec[i][0] = random(-1,1);
vec[i][1] = random(-1,1);
}
}
void draw() {
if(flag == true) {
background(255,255,0);
flag = false;
} else {
background(255,255,255);
}
if(mc[0] < mouseX) {
mc[0] += 2;
} else {
mc[0] -= 2;
}
if(mc[1] < mouseY) {
mc[1] += 2;
} else {
mc[1] -= 2;
}
fill(0);
ellipse(mc[0],mc[1],20,20);
fill(255,0,0);
for(int i = 0; i < num; i++) {
if(crash(pos[i][0],pos[i][1],mc[0],mc[1])) {
flag = true;
}
ellipse(pos[i][0],pos[i][1],20,20); pos[i][0] = pos[i][0] + vec[i][0]; pos[i][1] = pos[i][1] + vec[i][1];
if(pos[i][0] < 0) {
pos[i][0] = 800;
} else if(pos[i][0] > 800) {
pos[i][0] = 0;
}
if(pos[i][1] < 0) {
pos[i][1] = 500;
}
else if(pos[i][1] > 500) {
pos[i][1] = 0;
}
}
}
boolean crash(float pX, float pY , float mX, float mY) {
float dist = sqrt((pX-mX)(pX- mX)+(pY-mY)(pY-mY));
if (dist <= 20) {
return true;
}
return false;
}