はじめてのRmakeスクリプト / 第04回 配列変数をマスターしよう
投稿者: aoihikawa 投稿日:2012/06/11 05:33
はじめてのRmakeスクリプト
第04回 配列変数をマスターしよう
こんにちは 簸川 葵(ひかわ あおい)と申します
こんにちは 剣 芽優(つるぎ めゆ)です
この連載ではスクリプトの基礎を、じっくりとお話していきます
分からないところがあったら、過去の記事をチェックですよ
04-01 変数と配列
前回では変数とフラグについてお話しました
今回は、『配列』についてお話します
『配列』って何ですか?
「変数」は、中身が変わる「箱」のようなものでしたね
この「箱」に名前の他に「番号」をつけることで
同じ名前の変数を複数使えるようにしたものを『配列』といいます
同じ名前で増やす意味があるの?
例えばRPGのキャラクターのステータスは、
味方の数が増えても攻撃力とか防御力といった名前は同じですね
そっか 味方の数だけ番号を増やしてあげれば、変数を増やさなくてもよくなるのね
RmakeではcreateArray関数を使うことで、変数に配列のベースを用意することができます
#「x」という名前の変数に、配列を用意する x = createArray() #「x」という名前の配列変数の0番目に、数値「3」を入れる x[0] = 3 #「x」という名前の配列変数の1番目に、数値「4」を入れる x[1] = 4 #「x」という名前の配列変数の2番目に、数値「5」を入れる x[2] = 5 #「x」という名前の配列変数の1番目を表示する speak(x[1])
変数「x」の後に「[番号]」がつくようになるのね
これが配列の番号です 番号は0以上の、整数のみ使用できます
なお、番号は必ず「[ ]」で囲む必要があります
変数を配列にした後、0番目と2番目だけに値をいれたら1番目はどうなるの?
1番目には値が存在しないという意味の「NULL」が入ります
空っていう内容にも、名前がついているのね
04-02 変数と二次元配列
配列の中にさらに配列をつくることもでき、これを『二次元配列』といいます
配列の中に配列?
実際にスクリプトをみてみましょう
#「x」という名前の変数に、配列を用意する x = createArray() #「x」という名前の配列変数の0番目に、配列を用意する x[0] = createArray() #「x」という名前の配列変数の1番目に、配列を用意する x[1] = createArray() #「x」という名前の配列変数の0番目の0番目に、数値「3」を入れる x[0][0] = 3 #「x」という名前の配列変数の0番目の1番目に、数値「6」を入れる x[0][1] = 6 #「x」という名前の配列変数の0番目の2番目に、数値「9」を入れる x[0][2] = 9 #「x」という名前の配列変数の1番目の0番目に、数値「4」を入れる x[1][0] = 4 #「x」という名前の配列変数の1番目の1番目に、数値「7」を入れる x[1][1] = 7 #「x」という名前の配列変数の1番目の2番目に、数値「10」を入れる x[1][2] = 10 #「x」という名前の配列変数の0番目の1番目を表示する speak(x[0][1])
配列にした変数「x」のそれぞれの番号の中身を、さらに配列にしているのね
後は配列にした数だけ「[番号]」が続くようになります
そういえば、二次元って平面という意味よね・・・
そうですね 配列を横方向へ増やした列として考えると
二次元配列はその配列をさらに縦方向へ増やした列と考えられ
横と縦、つまり平面のように広げた配列になるからです
ということは、どんどん配列をつくっていけば
「三次元配列」とか、「四次元配列」とかになったり?
そのようになりますが、大抵の場合
「二次元配列」以降は『多次元配列』と呼ぶようになります
04-03 配列とループ処理
配列は確かに便利だけど、たくさん増えてくると使うのも大変ね・・・
そういった場合、ループ処理が役に立ちます
ループ処理・・・ while文だったっけ
そうですね 配列の番号は変数を使うこともできます
配列に使う変数をループ処理と組み合わせることで
配列を番号順に指定する仕組みにするわけです
#「x」という名前の変数に、配列を用意する x = createArray() #「i」という名前の変数に、数値「0」を入れる i = 0 #変数「i」の内容を元に分岐する while i < 5 #変数「i」が「5」より小さい場合 #配列変数「x」の変数「i」番目に、配列を用意する x[i] = createArray() #配列変数「x」の変数「i」番目の0番目に、数値「0」を入れる x[i][0] = 0 #配列変数「x」の変数「i」番目の1番目に、数値「1」を入れる x[i][1] = 1 #配列変数「x」の変数「i」番目の2番目に、数値「2」を入れる x[i][2] = 2 #変数「i」に、変数「i」と数値「1」を足した結果を上書きする i = i + 1 end #配列変数「x」の2番目の1番目を表示する speak(x[2][1])
まずwhile文の始めでは変数「i」は「0」だから・・・
配列変数「x」の0番目に一通りの処理が実行されます
そしてendの手前で変数「i」が1増えた後、while文の始めに戻ります
なるほど 変数「i」が5より小さい間、二次元配列がつくられていくわけね
このような二次元配列の準備だけでなく、
配列の内容を全て参照したい場合にも、ループ処理が役に立ちます
配列とループ処理って、仲が良いのね
04-04 第04回 まとめ問題集
それでは、今回のまとめ問題です
よーっし がんばるよ
なお、回答は記載しておりません
スクリプトをコピーして、実際に動作させることでチェックしてください
問題01
次のスクリプトに変数「x」を使用して実行結果が「3」と表示されるよう、1行を追加してください
x = createArray() x[0] = 1 x[1] = 2 x[2] = 3 #ここに追加する speak(y)
問題02
次のスクリプトに変数「x」を使用して実行結果が「5」と表示されるよう、2行を追加してください
x = createArray() #ここに追加する speak(x[0][0])
問題03
次のスクリプトに変数「x」を使用して実行結果が「6」と表示されるよう、2行を追加してください
x = createArray() i = 0 while i < 3 #ここに追加する i = i + 1 end speak(x[2][1])
できた! でも慣れるまで、ちょっとかかりそうかな
なお、理解したかどうかの確認なので、コメントに回答を書かないでください
<連載一覧>
第01回 変数と数値をマスターしよう
第02回 変数と文字列をマスターしよう
第03回 変数とフラグをマスターしよう
第04回 配列変数をマスターしよう
第05回 通常変数をマスターしよう
第06回 数値の応用をマスターしよう
第07回 時間の動作をマスターしよう
第08回 ユーザ定義関数をマスターしよう
第09回 スクリプト用語のまとめ
コメントする
コメントするには、ログインする必要があります。
コメント一覧
池ちゃん(翡翠ヶ池)(投稿日:2012/06/12 18:50,
履歴)
これで僕も配列が使える^^
退会したユーザー(投稿日:2012/06/12 18:38,
履歴)
だーめだぁー
やっぱり配列になると何がなんだかワカランくなる。。。
やっぱり配列になると何がなんだかワカランくなる。。。
有意義な解説記事をありがとうございます。
ちょっと
「変数を配列にすることができます 」
というあたり気になりましたので
説明させていただきたいと思います。
createArrayは変数を配列にする処理ではなく、
配列を作ってその実体の参照を返す関数です。
変数は実体への参照を保存します。
たとえば次のようなコードは
以下のような出力をします。
よろしくお願いします。
ちょっと
「変数を配列にすることができます 」
というあたり気になりましたので
説明させていただきたいと思います。
createArrayは変数を配列にする処理ではなく、
配列を作ってその実体の参照を返す関数です。
変数は実体への参照を保存します。
たとえば次のようなコードは
a = createArray() b = a b[0] = 3 a[0] = 2 speak("a[0] = ", a[0]) speak("b[0] = ", b[0])
以下のような出力をします。
a[0] = 2 b[0] = 2
よろしくお願いします。
退会したユーザー(投稿日:2012/06/11 18:19,
履歴)
前回から24時間経ってない(w
この辺りから混乱する人は多いですよね。
この辺りから混乱する人は多いですよね。