コンテンツにスキップ

連射機能のついたシューティング

基本の型

void setup(){
size(600, 400);
}
void draw(){
background(0);
}

弾を1つ画面の下の方に表示して上に飛ばす

// Bullet(銃弾)のx、yで「bx」「by」
float bx01 = 300;
float by01 = 300;
void setup(){
size(600, 400);
}
void draw(){
background(0);
// 弾1つ目
by01 = by01 - 1;
rect(bx01, by01, 10, 10);
}

球を2つにする

float bx01 = 300;
float by01 = 300;
float bx02 = 300;
float by02 = 320;
void setup(){
size(600, 400);
}
void draw(){
background(0);
// 弾1つ目
by01 = by01 - 1;
rect(bx01, by01, 10, 10);
// 弾2つ目
by02 = by02 - 1;
rect(bx02, by02, 10, 10);
}

弾を3つにする

float bx01 = 300;
float by01 = 300;
float bx02 = 300;
float by02 = 320;
float bx03 = 300;
float by03 = 340;
void setup(){
size(600, 400);
}
void draw(){
background(0);
// 弾1つ目
by01 = by01 - 1;
rect(bx01, by01, 10, 10);
// 弾2つ目
by02 = by02 - 1;
rect(bx02, by02, 10, 10);
// 弾3つ目
by03 = by03 - 1;
rect(bx03, by03, 10, 10);
}

弾を4つ

めんどくさいよね、わかります。

配列を使おう

配列を使うと、1つの変数の中に複数の情報を入れることができるぞ

// この例では5個の情報が入っている
float[] bx = new float[5];
float[] by = new float[5];

float[] 変数名 = new float[個数]

これが配列の定義方法だ。

定義された配列は、

bx[0] = 100;
bx[1] = 200;
bx[2] = 300;
bx[3] = 400;
bx[4] = 500;

という具合に、0〜4の番号を[]の中に指定してあげることで、通常の変数と同じように扱えるぞ。

配列を使って、1個目の球だけ発射

float[] bx = new float[5];
float[] by = new float[5];
void setup(){
size(600, 400);
// 弾1つ目の最初の位置
bx[0] = 300;
by[0] = 300;
}
void draw(){
background(0);
by[0] = by[0] - 1;
rect(bx[0], by[0], 10, 10);
}

1つ目なので番号は「0」であることに注目してくれ。

配列を使って、3つの球を発射

// Bullet(銃弾)のx、yで「bx」「by」
float[] bx = new float[5];
float[] by = new float[5];
void setup(){
size(600, 400);
// 弾1つ目の最初の位置
bx[0] = 300;
by[0] = 300;
bx[1] = 300;
by[1] = 320;
bx[2] = 300;
by[2] = 340;
}
void draw(){
background(0);
by[0] = by[0] - 1;
rect(bx[0], by[0], 10, 10);
by[1] = by[1] - 1;
rect(bx[1], by[1], 10, 10);
by[2] = by[2] - 1;
rect(bx[2], by[2], 10, 10);
}

「0〜2」の3つの番号を使ったぞ。

配列を使って、5つ全ての球を発射

はい、まだめんどくさいよね。わかります。

繰り返し処理を使おう

繰り返し処理forはわかるかな。

void draw(){
background(0);
for(int i=0; i<5; i++){
println(i);
}
}

for(int i=0; i<5; i++){

}

これは「{}」ブロックの中を5回繰り返すという意味だ。 そして、ブロックの中では変数「i」が使え、「0」からはじまり、1つ繰り返すたびに「1」増えるんだ。

この性質を使って、配列と組み合わせよう。

繰り返し処理を使って弾全てを動かそう

float[] bx = new float[5];
float[] by = new float[5];
void setup(){
size(600, 400);
// 弾の初期位置を乱数で
for(int i=0; i<5; i++){
bx[i] = random(400);
by[i] = random(400);
}
}
void draw(){
background(0);
for(int i=0; i<5; i++){
by[i] = by[i] - 1;
rect(bx[i], by[i], 10, 10);
}
}

だいぶすっきりしたね。

連射しよう

// 100個にした
float[] bx = new float[100];
float[] by = new float[100];
void setup(){
size(600, 400);
}
void draw(){
background(0);
for(int i=0; i<100; i++){
by[i] = by[i] - 1;
rect(bx[i], by[i], 10, 10);
}
}
// マウスがクリックされた時
void mousePressed(){
for(int i=0; i<100; i++){
// 0以下の番号を探す
if(by[i] <= 0){
// 番号をみつけたら、マウスの座標を与える
bx[i] = mouseX;
by[i] = mouseY;
// breakして、繰り返し処理を終了させる。
break;
}
}
}

やってみよう

宇宙空間を作ろう。 100個の星屑が、右に流れるように。