レッスン 21

配列を使ってみよう

配列を理解するために、複数の図形を個別に動作させるアニメーションをつくります。

チャプター1このレッスンのゴール

このレッスンで完成させるものを確認しよう

チャプター2配列を使わずに3つの丸を制御しよう

2. 1 このレッスンの目標

このレッスンでは、配列について学びます。配列は変数をまとめて扱うことができます。 難しく感じるかもしれませんが、慣れると複数の図形を自由に制御できるようになります。ゲームづくりには欠かせない技術になるので、完全に習得できることを目指しましょう。

2. 2 配列を使う理由

多くのゲームは多数の図形が同時に動きます。動く図形ごとに変数を用意するのは、おすすめできません。例えばボール10個を別々のスピードで動かしたいとき、スピードの変数を10個宣言して、ランダムな値を代入するには、

var v1 = random(5);
var v2 = random(5);
var v3 = random(5);
...
...

var v10 = random(5);

としなければいけません。ボールが100個になったら…気の遠くなる作業ですね。配列を使うと、

var v = [];
for(i=0;i<10;i++){
    v[i] = random(5);
}

と書きます。100個の変数が必要であっても、i<10の部分をi<100と書き換えるだけです。それでは、実際にプログラムを作りながら、その便利さをつかみましょう。

2. 3 このレッスンですること

まず、円の拡大縮小のアニメーションをつくります。配列を使わずに処理を書くと、少し面倒です。が、今までの復習をかねて取り組みましょう。

次に配列を使って四角を拡大縮小させるアニメーションをつくります。配列を使えば、かなり簡単になることを感じられればOKです。

2. 4 写してみよう

//円と四角の最小サイズと最大サイズ
var minSize = 30;
var maxSize = 60

//円の変数
var e1Size;
var e2Size;
var e3Size;
var sp1=1;
var sp2=2;
var sp3=3;

function setup() {
  createCanvas(400, 400);
  rectMode(CENTER);
  
  //円の初期サイズ
  e1Size = minSize;
  e2Size = minSize;
  e3Size = minSize;

}

function draw() {
  background(220);
  
  //左上
  ellipse(100,100,e1Size,e1Size);
  e1Size += sp1
  if(e1Size >= maxSize || e1Size <= minSize){
    sp1 = -sp1
  }
  //左中
  ellipse(100,200,e2Size,e2Size);
  e2Size += sp2
  if(e2Size >= maxSize || e2Size <= minSize){
    sp2 = -sp2
  }
  //左下
  ellipse(100,300,e3Size,e3Size);
  e3Size += sp3
  if(e3Size >= maxSize || e3Size <= minSize){
    sp3 = -sp3
  }
  
}

コードが書けたら実行してみましょう。次のように3つの円が異なるタイミングで拡大縮小していればOKです。

2. 5 コードの解説

3つの円に共通する円の最大サイズと最小サイズ、3つの円で異なる位置と拡大縮小のスピードに関する変数を設定しています。この動きを実現するために変数が、8個必要になっています。

拡大縮小の処理はif文で、最大または最小になった場合にスピードにマイナス1をかけていること、rSize += spとしていることで実現されています。

チャプター3配列を使って3つの四角を制御しよう

配列を使うと、変数の数を種類ごとにまとめて管理することができます。今は3個で試していますが、配列を使うと100個にすることも簡単です。

3. 1 変更しよう

四角のサイズをeSize、拡大縮小のスピードをspという変数でまとめましょう。円のときは変数が6個であったことに対して、2個になります。

+ //四角
+ var rSize = [];
+ var rsp = [1,2,3];

function setup() {
  createCanvas(400, 400);
  rectMode(CENTER);
  
  //円の初期サイズ
  e1Size = minSize;
  e2Size = minSize;
  e3Size = minSize;

+  //四角の初期サイズ
+  for(i=0;i<3;i++){
+    rSize[i] = minSize;
+  }
}

  //左下
  ellipse(100,300,e3Size,e3Size);
  e3Size += sp3
  if(e3Size >= maxSize || e3Size <= minSize){
    sp3 = -sp3
  }
  

 + //四角
 + for(i=0;i<3;i++){
 +   rSize[i] += rsp[i];
 +   rect(300,100 + 100 * i, rSize[i], rSize[i]);
 +   if(rSize[i] >= maxSize || rSize[i] <= minSize){
 +     rsp[i] = -rsp[i];
 +   }
 + }
 
 }

コードが変更できたら実行してみよう。次のようになっていればOKだよ。

3. 2 コードの解説

配列を使って四角で同じ円と同じような動きを実現しています。配列を用いているため、rSizerspに四角の大きさ、スピードの情報をまとめることができました。 変数をまとめて扱える便利な道具であることが大切です。配列について、以下にて説明します。

配列の書き方

配列は複数の変数をまとめる役割を持っています。
配列は[]と角かっこで書きます。値(変数)はカンマ区切りで書くことができます。

var 配列の名前 = [値1,値2,値3,...]

次に、配列に値を代入します。3つの値をfor文を使って代入します。この方法を使えば100個になっても面倒ではありませんね。

配列とfor文

配列には、複数の値をまとめておくことができます。数が多くなっても、for文を使えば簡単に代入することができます。

for(i=0;i<配列に代入したい回数;i++){
配列[i] = 代入したい値
}

ここまでの処理で、各配列は次のようになっています。

rSize = [minSize, minSize, minSize];
rsp = [1,2,3];

これらを使って、次のように処理することが目標です。

右上にmiSize[1]描いて、rsp[1]で拡大縮小
右中にmiSize[2]描いて、rsp[2]で拡大縮小
右下にmiSize[3]描いて、rsp[3]で拡大縮小

for文を使って次のように書くことができます。

ここまで、変更ができたら実行してみましょう。四角形が3つ右に並んで拡大縮小していればOKです。

配列とfor文

配列には、複数の値をまとめておくことができます。数が多くなっても、for文を使えば簡単に代入することができます。

for(i=0;i<配列に代入したい回数;i++){
配列[i] = 代入したい値
}

次のレッスンでは、実際に大量の図形を動かすことに挑戦します。

チャプターを全部クリアしよう!