配列変数を使おうの巻
ゲームを作る上で欠かせない、配列変数についていってみよう。
これも初心者の壁だよね。てゆっか、配列変数の使い方がわからなくてこんなプログラム組んだことない?
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 変数名,確保する文字数,個数,...」です。
●配列変数を使うときの注意点
うーむ、これで理解してくれるのか不安だ(^^;。あと多次元配列について触れていないけど、一気にそこまでやると頭がこんがらがると思うから、次の機会にってことで。