配列使ってゲーム制作を効率化する備忘録
こんにちは、今日もツクールMVでここね制作中です!
プログラミングの知識がほとんどないので
いろいろな方の記事を読んで試行錯誤しています (´ヘ`;)
変数をいくつも指定して表示する情報を決めるのですが、
今回はようやく配列を使えるようになってきたので
それを備忘録としてまとめておきます。
これはとても便利!しかもエディターのスクリプト機能でできます。
①変数1 に 変数2,変数3,変数4 を格納
$gameVariables.setValue(変数名,要素値1,要素値2,要素値3);
スクリプト:$gameVariables.setValue(1, [$gameVariables.value(2),$gameVariables.value(3),$gameVariables.value(4)]);
文章の表示:\V[1]
実験のために「変数2 = 5 , 変数3 = 10 , 変数4 = 20 , 変数6 = 'A'」と
変数に数値を入れておいてください。
配列というのはデータの塊。
つまり変数1の中には変数2~変数4という要素が連なって記憶されている。
この状態で変数1を出力すると「5 10 20」と連番表示される。
※文章の表示で出力できます。
もちろん「$gameVariables.setValue(1,[5,10,20]);」と書いても出力結果は同じ。
②変数1 の 配列の頭から1番目の数値 を 変数5 で 取得する
$gameVariables.setValue(変数名,$gameVariables.value(変数名)[要素番号]);
スクリプト:$gameVariables.setValue(5,$gameVariables.value(1)[0]);
文章の表示:\V[5]
現在、変数1には配列「5 10 20」が格納されています。
配列には頭から「0,1,2~」と番号が振られています。
※「0」からなので注意
なので今回は「変数1 の 0番号」(つまり先頭)の数値を変数5に代入します。
この状態で変数5を出力すると配列の頭から1番目の数値「5」が表示される。
これによって配列に格納された要素の値を確認できる。
③変数1 の 配列の頭から2番目に 変数6 を追加する
$gameVariables.value(変数名).splice(要素番号, 0, 要素値);
スクリプト:$gameVariables.value(1).splice(1, 0, $gameVariables.value(6));
文章の表示:\V[1]
配列に要素を追加します。
配列には頭から「0,1,2~」と番号が振られているので
今回は頭から数えて2番目に追加します。
割り込みで追加しているので後ろの要素は自動的に後ろにずれます。
「5 A 10 20」と出力されれば成功。
ちなみに「$gameVariables.value(1).splice(1, 0, 'A', 'B');」のように
追加する要素を複数指定することで
一気に複数の要素を割り込み追加することもできる。
この場合「5 A B 10 20」と出力されれば成功。
「splice」を「unshift」に書き換えて
「$gameVariables.value(1).unshift('A');」にすると
配列の先頭に追加となります。
この場合「A 5 10 20」となる。
「splice」を「push」に書き換えて
「$gameVariables.value(1).push('B');」にすると
配列の末尾に追加となります。
この場合「5 10 20 B」となる。
「(要素番号, 0, 要素値);」の真ん中にある「0」を弄ると次のようになる↓
④変数1 の 配列の頭から3番目の要素 を削除する
$gameVariables.value(変数名).splice(要素番号, 削除する要素数);
スクリプト:$gameVariables.value(1).splice(2, 1);
文章の表示:\V[1]
配列の指定要素を削除します。
今回は頭から数えて3番目の要素を削除します。
後ろの要素は自動的に前にずれます。
「5 A 20」と出力されれば成功。
ちなみに「$gameVariables.value(1).splice(2, 2);」のように
削除する要素数を変更することで複数の要素を一気に削除することもできる。
この場合「5 A」と出力されれば成功。
⑤変数1 の 配列の要素の数 を 変数7 で取得する
$gameVariables.setValue(変数名,$gameVariables.value(変数名).length)
スクリプト:$gameVariables.setValue(7,$gameVariables.value(1).length)
文章の表示:\V[7]
さて、今配列の中にはいくつの要素があるでしょう?
追加や削除を繰り返しているとわからなくなります。
そうなった時は配列の要素数を取得します。
今回は「変数1 の 要素数」の数値を変数7に代入します。
この状態で変数7を出力すると要素数である「3」が表示される。
これによって配列に格納された要素の量がわかるので便利。
⑥変数1 の 配列の要素 から要素値を照合し、条件分岐する
$gameVariables.value(変数名).contains(要素値)
条件分岐(スクリプト):$gameVariables.value(1).contains('A')
最後に配列を使って条件分岐させます。
配列の要素の中に「A」の文字が含まれているかどうかで分岐します。
これを利用するとアイテムポーチのようなことができるので、
①配列 アイテムポーチ「"指輪" "ピアス" "聖杯"」を用意
②条件分岐 "鍵" が必要 & ポーチ内アイテム3つ以内 → false
③プレイヤーが"鍵"を入手する
配列に"鍵"を追加「"指輪" "ピアス" "聖杯" "鍵"」
④条件分岐 "鍵" が必要 & ポーチ内アイテム3つ以内 → false
⑤プレイヤーがポーチから"ピアス"を捨てる
配列から"ピアス"を削除「"指輪" "聖杯" "鍵"」
⑥条件分岐 "鍵" が必要 & ポーチ内アイテム3つ以内 → True
とかいうゲームの流れが作れます。
もちろんデフォルトのアイテム機能でもできることです。
ですが、メインアイテムとは別でポーチ機能を実装したい時もあります。
メインアイテム内にはあるけど、
アイテムポーチに入れておかないとダメ、みたいな。
まだ知識を得ただけで活かしきれてはいないですが
今後のゲーム作りの効率化に使っていきたい。
間違ってたらごめんなさい。
よーし、どんどん作っていくぞー!٩( ╹▿╹ )۶