スクリプト/配列
配列とは
配列とは、順番に並んだデータの列で、
何番目という値を指定して、それに関連付けられたデータの操作を
おこなえるものです。
これだけだと意味がワカリマセンねw
つまり、変数を同時にたくさん用意したい場合に、変数名を a1,a2,a3,a4,a5,…という感じにしておいて、何番にはどのステータスを入れておこう~なんて時があります。
「配列変数」を使うと、同時にたくさんの変数を管理できちゃうのです。
もちろん、変数をまとめて一括で宣言するだけなので、中に入れるのは数値、文字、フラグのどれでもOKです。
では、どう使うのかを見ていきましょー。
配列の作成
Rmakeのスクリプト言語(Arrp)での配列の作成は以下のようにおこないます。
a = createArray()
aというローカル変数に配列が入ります。
配列への参照
配列の何番目の要素に値を設定するには以下のように書きます
a[0] = 3 a[1] = 7
配列の何番目かを表わす値をインデックスと呼び、
Arrpでは0から始まります。インデックスにマイナスの値を指定するとエラーになります。
上の例ではインデックス0に3を設定、
インデックス1に7を設定します。
指定したインデックスの値を取得するにはたとえば次のように書きます。
speak("a[0] = ", a[0])
speak("a[1] = ", a[1])
この例ではインデックス0とインデックス1の値をメッセージウィンドウに表示しています。
配列のインデックスに変数を使う事もできます。
a = createArray() i = 0 while i < 3 a[i] = i i = i + 1 end
この例では a[0]=0, a[1]=1, a[2]=2 の値が入ります。
配列の長さ
配列の長さは以下の関数で取得することができます。
len = getArrayLength(a)
配列の長さはcreateArray()で作られたときは0から始まります。
配列に何か値を代入したときは最大のインデックス+1が配列の長さとなります。
pushArray, popArray, sliceArrayなど配列の長さを変える
効果を持つ関数を呼んだ場合はそれによっても長さが変わります。
使用例
配列の使用例は以下のとおりです。
#配列を作成します
a = createArray()
#配列に適当な値を追加します。
a[0] = 0.5
a[1] = 2.5
a[2] = 4.5
#配列の内容を切り捨ててメッセージウィンドウに表示します。
i = 0
while i < getArrayLength(a)
speak("a[", i, "] = ", floor(a[i]))
i = i + 1
end
#以下のように表示されます。
# a[0] = 0
# a[1] = 2
# a[2] = 4
#pushArray popArray sliceArrayの例です。
speak("push pop slice test")
#配列の末尾に6を追加します。
pushArray(a, 6)
#配列の内容は[0.5, 2.5, 4.5, 6]
#配列の末尾に8を追加します。
pushArray(a, 8)
#配列の内容は[0.5, 2.5, 4.5, 6, 8]
#配列の末尾の値を取得して、配列の末尾の値を消去します。
speak("pop", popArray(a))
#出力は以下の1行
# pop8
#配列の内容は[0.5, 2.5, 4.5, 6]
#配列のインデックスが1の値から2つ切り出して、それを配列の値とします。
a = sliceArray(a, 1, 2)
#配列の内容は[2.5, 4.5]
#配列の内容を表示します。
i = 0
while i < getArrayLength(a)
speak("a[", i, "] = ", a[i])
i = i + 1
end
#以下のように表示されます。
# a[0] = 2.5
# a[1] = 4.5
基本変数の場合
配列の書き方がわかった所で、今度は実戦的な基本変数ではどう書くのか、を見ていきましょー。
配列aと普通の変数b,nがあるとします。
この三つが全てローカル変数の場合と、基本変数の場合の書き方の違いは次のようになります。
#ローカル変数
a = createArray()
a[n] = 9
b = a[ n ] + 3
#基本変数
setVariable( "a", createArray() )
getVariable("a")[ getVariable("n") ] = 9
setVariable( "b", getVariable("a")[ getVariable("n") ] + 3 )
基本変数だと文字数が突然多くなるので一見して謎ですが、特別難しい事はしていません。
注意点としてはやはり2行目の、配列のn番目に代入する場合にもgetと書く事ですね。
setVariable("a", createArray())
getVariable("a")[0] = 0.5
getVariable("a")[1] = 2.5
getVariable("a")[2] = 4.5
i = 0
while i < getArrayLength(getVariable("a"))
speak("a[", i, "] = ", getVariable("a")[i])
i = i + 1
end
二次元配列をつくる事もできます。
setVariable("a", createArray() )
n = 0
while n < 10
getVariable("a")[n] = createArray()
n = n + 1
end
n = 0
while n < 10
m = 0
while m < 10
getVariable("a")[n][m] = n + m * 10
m = m + 1
end
n = n + 1
end
この例では a[0][0]~a[9][9]までの百個に、順に0~99の値が入ります
配列関連の関数
詳しくは以下のリファレンスをご参照ください。
createArray関数
http://rmake.jp/document/function_reference#createArray%E9%96%A2%E6%95%B0
配列への参照
http://rmake.jp/document/function_reference#[]%E9%96%A2%E6%95%B0
配列への参照
http://rmake.jp/document/function_reference#[]%E9%96%A2%E6%95%B0
配列の長さの取得
http://rmake.jp/document/function_reference#getArrayLength%E9%96%A2%E6%95%B0
pushArray関数
http://rmake.jp/document/function_reference#pushArray%E9%96%A2%E6%95%B0
popArray関数
http://rmake.jp/document/function_reference#popArray%E9%96%A2%E6%95%B0
sliceArray関数
http://rmake.jp/document/function_reference#sliceArray%E9%96%A2%E6%95%B0
このWikiの掲示板(すべて読む)
コメント一覧
投稿者:aoihikawa(投稿日:2011/09/22 18:21)
ちょっと間違い。
「0」を含むため
+1である「6、8」が返りますね。
投稿者:aoihikawa(投稿日:2011/09/22 18:19)
タクミ2310号さま>
指定した場所によります。
array[5][7] #最大値 length = getArrayLength(array) #5 length = getArrayLength(array[5]) #7
投稿者:takumi2310(投稿日:2011/09/22 18:02)
getArrayLengthで長さを取得するときに
その配列が二次元になってたりしたらどうなるんですか?
投稿者:rurun9(投稿日:2011/08/01 11:48)
同時にたくさんの変数を使う必要がある場合に、便利かも?という話ですよ。
例えば、RPGでマップ内に宝箱をたくさん設置したい。
それぞれについて開けた開けてないをフラグで管理しようとすると、開始スクリプトで基本変数を宝箱の数だけ用意して中にtrueを入れますよね。
ここで、もし数が50だった場合、配列の方が書くのも管理も簡単になる気がしませんか?
更に後々になって数を80に増やしたい場合でも、配列なら変数の準備は数を書きかえるだけで済みますよね。
投稿者:なとおとき(投稿日:2011/07/30 23:01)
配列自体なんに使うのか全然わかりません(汗;
投稿者:tdakeikaku(投稿日:2011/04/16 23:46)
オフラインのtxtファイルとかじゃなければどこに書いてもいいんですよ。
使いたいところで使いたいように使ってしまえば使えるようになります。
ただ、基本変数を開始スクリプトに記述すると、
ゲームを再開するたびにリセットされちゃうので注意が必要ですけどね。
割と分かりやすく、というか凄くシンプルに書かれていますので、
使用例あたりのスクリプトをコピペ・編集などして、使い方を学んでください。
実際に使ってみることで、よりソースを読んだ時に分かるようになってきますよー。
投稿者:退会したユーザー(投稿日:2011/04/16 22:35)
んーよくわからないです
特に変数の設定みたいなところ
どこに書くんですか?
投稿者:rurun9(投稿日:2010/02/21 18:41)
#基本変数 a を配列宣言します
setVariable("a", createArray() )
i=0 #配列 a に0~4を入れます
while i<5
#配列の要素に代入するときはsetじゃなくてgetで良いからややこしい
getVariable("a")[i]=i
i=i+1
end
speak("a=", getVariable("a") )
これを実行すると
a=0,1,2,3,4
と表示されます。
投稿者:rurun9(投稿日:2010/02/04 13:54)
素早い対応、大変ありがとうございます。
基本変数だと [] をどこに書いたら認識してくれるのか謎だったので、
whileと配列関連関数全部(とコピー配列)を使ってn番目を入れ替える動作をまるっとユーザー定義しちゃった所でした(汗
投稿者:dycoon(投稿日:2010/02/04 13:40)
Rmakeのご利用ありがとうございます。
基本変数を使う場合についても例を書いてみました。
バグがあって以前はこういう書き方ができなかったのですが、
現在は修正しています。
> では、配列a の n 番目の要素に b を代入する際にはどのように表記したら良いのでしょうか?
これについては以下のように書くとよいかと思います。
getVariable("a")[n] = b
よろしくお願いします。
