2016年6月26日日曜日

Scratchで二次元配列を使う方法

多くのプログラミング言語では当然のように利用することが出来る「二次元配列」ですが、Scratchでは利用できません。少なくても現在は。
Scratchで利用できる変数は次の2種類。

  • 「データ」→「変数を作る」の単体の変数
  • 「データ」→「リストを作る」の一次元配列
「リスト」と名称が付けられているところから推測すると、恐らく「変数をリスト形式に保管する場所」という認識なのでしょう。
ま、やれることは一次元配列(動的)と同じなので、細かいことは気にしません。

二次元配列を利用するには


さて、肝心のScratchで二次元配列を利用する方法は次の通りです。


まず、二次元配列として利用するリストを作成。
リストには、二次元配列の全要素数分だけ項目を作成しておきます。
つまり、3×3の二次元配列であれば9つの項目を作成します。
そして、二次元配列から取り出した値を受け取るための変数を1つ作成しておきます。


二次元配列は、1回しか使わないといった事はありえません。プログラムの中で繰り返し値を入れたり出したりするはずです。ですので、二次元配列を利用する部分は「定義」として作成しておきます。

考え方は、至って簡単です。思いついてしまえば小学生でも理解できる計算式です。
つまり、二次元配列を二次元ではなく一次元に並べ直したと考えようと言うわけです。

3×5の配列であれば、

1−1,1−2,1−3
2−1,2−2,2−3
3−1,3−2,3−3
4−1,4−2,4−3
5−1,5−2,5−3

が二次元の並び。これを一次元に並べ直すと、

1−1,1−2,1−3,2−1,2−2,2−3,3−1,3−2,3−3……

となるわけです。この場合、X列の数分をひとくくりとして連続で並ぶので、「(Y−1)×X列数」がY列1行目の位置になります。そこからX分だけ進めた所が目的の位置になるというわけです。

Scratchの定義では、引数は利用できますが、戻り値は利用できないので、戻り値を格納するための変数も必要になります。

いかがでしたか?文章で説明するとややこしい感じもしますが、実際のブロックを見てもらえば意外と単純な方法です。
値を得るときに、定義を実行してから戻り値用の変数を読みに行く、という2度手間が発生するのが難点ですが、それさえガマンすれば十分にプログラムの中で利用することが出来ます。

この二次元配列を利用したサンプルプログラムがコチラです。

サンプルプロジェクト→「二次元配列を使ってみる