配列変数を使おうの巻


 ゲームを作る上で欠かせない、配列変数についていってみよう。
 これも初心者の壁だよね。てゆっか、配列変数の使い方がわからなくてこんなプログラム組んだことない?

pos 0,0
input TASU1,128,32
pos 0,32
input TASU2,128,32
pos 0,64
input TASU3,128,32
pos 0,96
input TASU4,128,32
pos 0,128
input TASU5,128,32
pos 0,160
button "合計",*GOKEI
*MAIN
stop

*GOKEI
TOTAL=TASU1+TASU2+TASU3+TASU4+TASU5
dialog "合計は "+TOTAL+" じゃ",0,"計算結果"
goto *MAIN

 まあ、これくらいなら問題ないけど、これを修正して100個の数字を足すプログラムを組んでみるとしようよ。

pos 0,0
input TASU1,128,32
pos 0,32
input TASU2,128,32
pos 0,64
input TASU3,128,32
pos 0,96
input TASU4,128,32
pos 0,128
input TASU5,128,32

(中略)

pos 0,3104
input TASU98,128,32
pos 0,3136
input TASU99,128,32
pos 0,3168
input TASU100,128,32
pos 0,3200
button "合計",*GOKEI
*MAIN
stop

*GOKEI
TOTAL=TASU1+TASU2+TASU3+TASU4+TASU5+......+TASU98+TASU99+TASU100
dialog "合計は "+TOTAL+" じゃ",0,"計算結果"
goto *MAIN

 だァーっ!! 面倒臭いんじゃーッ!! いちいちこんなことしてたら日が暮れるし、疲れるって。だから、これよ。

dim TASU,100
A=100

repeat A
pos 0,cnt*32
input TASU.cnt,128,32
loop
pos 0,A*32
button "合計",*GOKEI
*MAIN
stop

*GOKEI
TOTAL=0
repeat A
TOTAL+=TASU.cnt
loop
dialog "合計は "+TOTAL+" じゃ",0,"計算結果"
goto *MAIN

 ね、楽チンでしょ? といってもこれだけじゃまったく意味がわからないので、ようやく説明です。
補足)HSPでオブジェクトを64個以上配置することはできないとか、画面が3200ドットもないとか、そーゆーツッコミは無しね。だってこれは一例なんだもん、いーじゃないか。

 配列変数というのは「仕切りをつけた箱」のようなものです。配列を宣言するというのは、「箱に仕切りをつける」ような意味です。「dim A,10」とした場合、Aという名前の変数を10個に区切ったことになります。こうして区切った変数は、「A.0」「A.1」・・・「A.9」というふうに、変数名のあとにピリオド(小数点)と数値をつけてそれぞれを指定します。もちろん、数値部分は変数を使ってもよいわけです。

●使いみち

 意味がわからない人は、下のスクリプトを見ればよくわかると思います。

Before After
*敵の処理1
TX1=TX1+5
TY1=TY1-2
if TX1>640 : TX1=0
if TY1<0 : TY1=400
(中略)

*敵の処理2
TX2=TX2+5
TY2=TY2-2
if TX2>640 : TX2=0
if TY2<0 : TY2=400
(中略)

*敵の処理2
TX3=TX3+5
TY3=TY3-2
if TX3>640 : TX3=0
if TY3<0 : TY3=400
(中略)
dim TX,3
dim TY,3

*敵の処理
repeat 3
TX.cnt+=5
TY.cnt-=2
if TX.cnt>640 : TX.cnt=0
if TY.cnt< :TY.cnt=400
(中略)
loop
*ハイスコア初期化
HS1=1000
HS2=900
HS3=800
HS4=700
HS5=600
HS6=500
HS7=400
HS8=300
HS9=200
HS10=100

*ハイスコア判定
if SC>HS10 : RANK=10
if SC>HS9 : RANK=9
(中略)
if SC>HS2 : RANK=2
if SC>HS1 : RANK=1
*ハイスコア初期化
dim HS,10
repeat 10
HS.cnt=1000-(cnt*100)
loop

*ハイスコア判定
repeat 10
A=10-cnt
if SC>HS.A : RANK=A
loop

 こんな感じで、プログラムを簡単にまとめてしまうことができます。さて、ここで問題を一つ出します。
問:「dim A,10」とやって「A=20」と代入した場合、どこへ代入されるのでしょう。

●文字列変数の配列変数

 文字列変数にも、もちろん配列はあります。こっちの場合、dimではなくsdimを使います。用途は同じなので省略します(いいのか)。ただし、sdimはパラメータの指定がdimとはちょっと違うので注意しましょう。「sdim 変数名,確保する文字数,個数,...」です。

●配列変数を使うときの注意点

 うーむ、これで理解してくれるのか不安だ(^^;。あと多次元配列について触れていないけど、一気にそこまでやると頭がこんがらがると思うから、次の機会にってことで。


戻る