■配列変数とは
配列変数とは、添え字によって管理される一連の変数の集まりのことです。
同じ番号の変数で、添え字によって複数の値が保持できるのです。
普通の変数に例えて言うと、数字変数0番が0から9の添え字を持っていたら、「数字変数0番の0」「数字変数0番の1」「数字変数0番の2」……というように、一つの変数で10個の値を持てるようになります。これが配列変数の考え方です。
このように添え字を一つ持つ配列変数は、
「一次元配列」と言います。
さらに、添え字を複数を持つ配列変数もあります。そうなると、「数字変数0番の0の0」のようにさらに多くの値を持てるようになります。
添え字が二つになると、二次元の配列変数です。添え字が増えるということは次元が増えるということです。
配列変数は例えるならば、マス目を持った表と考えることもできます。
?0[0][0]
|
?0[0][1]
|
?0[0][2]
|
?0[0][3]
|
?0[1][0]
|
?0[1][1]
|
?0[1][2]
|
?0[1][3]
|
?0[2][0]
|
?0[2][1]
|
?0[2][2]
|
?0[2][3]
|
これは、一つ目の添え字が0〜2の3個、二つ目の添え字が0〜3の4個ある二次元配列変数を表した表です。添え字の数である3×4の12個の値を保持することができるのがわかるでしょうか。
配列変数は、頭に
「?」を付けた書き方になります。数字変数や文字変数の「%」や「$」と同じようなものです。そしてやはり普通の変数と同じく、数字で管理します。
(そう考えてみると、そもそもNScripterの変数というものは、一つの添え字によって管理される配列変数だということがわかります)
そして添え字を[ ]で囲み、後ろに繋げていきます。
NScripterの配列変数では200の添え字、20次元まで扱うことができます。
また、配列変数に入れることができる値は
数字のみです。
数字変数と同じような扱い方ができます。
■配列変数の現状
配列変数は、普通の数字変数と同じように扱うことができます。
しかし、まだ追加されたばかりの機能なので、完全ではありません。
現時点の変数を操作する命令では、
代入(mov)しか行えません。
■宣言
それでは、実際の配列変数の扱い方を見ていきましょう。
配列変数では、数字変数や文字変数と違い
「宣言」というものが必要になります。
これは、その配列変数が何次元で、それぞれ何個の添え字を持っているかを定義するものです。
よって、宣言は定義ブロックで行います。
*define
dim ?0[9]
dim ?1[2][3]
game
*start
|
配列変数の宣言には、
「dim」命令を使います。
「dim」に続き、使いたい配列変数で一番大きい添え字で配列変数を書きます。
この場合、配列変数0番は0〜9の10個の添え字を持つ一次元の配列変数となります。宣言した以上の数の添え字や次元は、使うことは出来ません。
配列変数1番は、一次元目が0〜2の3個、二次元目が0〜3の4個になります。
このように、0から数え始めるため、宣言した添え字よりも一つ多い数が使えることになるので注意してください。
■代入
配列変数は、数字変数と同じように使うことができます。ただし、さっきも述べたようにmov命令による代入しか行えません。
mov ?0[3],10
配列変数0番の添え字3は、?0[3]です。\
|
?0[3]に、10を代入しています。
テキスト中にも、数字変数と同じように書くことができます。
それ以外では、配列変数用に
「movl」という命令が用意されています。
これは、配列変数に一度に値を代入するために使います。
下のスクリプトを見てください。
*define
dim ?0[4]
game
*start
mov ?0[0],34
mov ?0[1],27
mov ?0[2],52
mov ?0[3],18
mov ?0[4],23
movl ?0,34,27,52,18,23
|
定義ブロックでは、?0[4]を宣言しました。
movが五つ並んでいるところでは、それぞれの配列に値を代入しています。
そしてその下、「movl」に注目してください。
ここでは、?0の配列に添え字0から順番に値を代入していっています。
つまり、上のmov五つと下の「movl」は全く同じことをしています。これがmovlです。
次に、二次元の場合を見てみましょう。
*define
dim ?0[3][2]
game
*start
mov ?0[0][0],5
mov ?0[0][1],18
mov ?0[0][2],72
movl ?0[0],5,18,72
|
ここでも、上のmovと下の「movl」は全く同じことをしています。
■配列変数に名前を付ける
配列変数でも「numalias」命令を使うことで、「
変数に名前を付ける」と同じことをすることができます。
これは、添え字に対しても同じで、添え字に名前を付けても何の差し障りもありません。添え字も数字だからです。
添え字は数字なのですから、添え字に数字変数を使うこともできます。
さらに言ってしまえば、配列変数番号にも数字変数を使うことができます。
*define
dim ?0[3][2]
dim ?1[5][10]
numalias koukando,1
numalias kyara_a,2
numalias kyara_b,3
game
*start
mov %8,1
?0[2][1]@
?0[3][1]@
?0[1][2]@
?1[5][7]@
これらの配列変数は、次のように表すこともできます。\
?0[kyara_a][koukando]
?0[kyara_b][koukando]
?0[%8][2]
?%8[5][7]\
|
上の配列変数は、どれも正しい表現です。
■その他
上記から考えると、普通の変数でも同じような考え方をすることができます。
つまり、「%%0」や「$%3」などの書き方をしても良いということです。
これは、まだ配列変数がNScripter無かった時に、配列が必要な場合に代わりに利用するため使っていました(その辺りのことは「NScr暫定命令表.txt」に書かれています)。
配列変数がある今でも、工夫しだいでは効果的な使い方になるかも知れません。