6.アイテムメニューを作る



さあメニュー作りに行ってみましょう。
ステータス画面なら第二回第五回で書いたことを駆使すればすぐに作れると思います。
自作メニューでもっとも大変なのはアイテムや特殊技能を表示する部分です。
技術的に難しいということよりも、ただただ面倒臭いのです。

試しに薬草を1つ作ってみましょう。デフォルトメニューならデータベースの「アイテム」で
名前、解説、種別、値段、回復量を設定するだけですぐに使えるようになります。
これを自作するとなると、まず「薬草」という文字を画面上に表示する必要があります。
もし1画面に20個のアイテムを表示するとすれば1個のアイテムを追加するのに
ピクチャーなら画面表示だけで最低でも20箇所は書き換えなければなりません。
それから「薬草」を選択する部分を作ります。誰に使うかを選択する部分を作ります。
使用した人に回復の処理をします。「薬草」を1つ減らします。
「薬草」の数が0になれば画面上から「薬草」の文字を消します。
これらの作業をアイテム一個一個について行うわけです。
装備品なら装備画面も必要でしょう。

そんなわけでまずは自作メニューにすることで自分が表現したいことと作る手間とを
秤にかけてみることをお勧めします。
どうしても自作メニューでなきゃ駄目なんだ!という方は先に進んでください。


目次

アイテムを管理する
 参照型アイテムメニュー
 独立型1・アイテムを個別に記録する
  変数列操作1・全体を1つ前に移動する
  変数列操作2・変数を数の小さいものから順に並び替える
 独立型2・アイテムを種類ごとに記録する

アイテムを表示する
 テキストメニュー
 ピクチャーメニュー

例によってサンプル付きです。合わせてご覧ください。
アイテムメニューサンプル集(25kb)


★アイテムを管理する

アイテムメニューを作るには大きく2つの方法があります。
所持アイテムを参照する方法と完全に変数の中だけで処理する方法です。
以降は前者を「参照型」、後者を「独立型」と呼ぶことにします。
普通にやる分には参照型が簡単でしょう。
倉庫と手持ちのアイテムを分けたい場合とかドラクエのように
パーティメンバー一人一人にアイテムを分散して
持たせたい場合は独立型で作ります。
ちなみにMaRoadでは街の中では参照型、洞窟内では独立型と両方とも使っています。


★参照型アイテムメニュー

所持アイテムを利用する方法です。
アイテムの出し入れにはコマンドの「アイテムの増減」がそのまま使えます。

 メリット
  ・アイテムの管理が簡単

 デメリット
  ・保存場所を分割することができない
  ・各アイテムの所有上限が99個に限定される


アイテムの確認には条件分岐「○○を持っている」を使います。
所持アイテムを順に一個づつ調べて、持っていたらアイテム名を画面に表示します。
2個目以降ははさらにそこから継続して調べて次に持っているアイテムがあったら
位置をずらして表示します。

この処理を作るためには変数を2つ使います。

(所持アイテム検索)
[0001:表示するアイテム]
[0002:アイテム個数]
変数[0001:表示するアイテム]に代入する値は1つ目(ポーション)なら1、
2つ目(ナイフ)なら2、と予め決めておきます。

 ◆条件分岐:変数[0001:表示するアイテム]が0
  ◆条件分岐:ポーションを持っている
   ◆変数の操作:[0001:表示するアイテム]代入,1
   ◆変数の操作:[0002:個数]代入,ポーションの所持数
   ◆イベント処理の中断
   ◆
  :分岐終了
  ◆
 :分岐終了
 ◆条件分岐:変数[0001:表示するアイテム]が1以下
  ◆条件分岐:ナイフを持っている
   ◆変数の操作:[0001:表示するアイテム]代入,2
   ◆変数の操作:[0002:個数]代入,ナイフの所持数
   ◆イベント処理の中断
   ◆
  :分岐終了
  ◆
 :分岐終了
      〜〜〜〜〜〜〜〜〜
      〜〜〜〜〜〜〜〜〜

こうして調べたアイテムの表示方法はまた下の方で説明します。



目次へ


★独立型アイテムメニュー

変数の中にアイテムの種類や個数を記憶させる領域を確保します。
独立型メニューには2つの考え方があります。


★独立型・アイテムを個別に記録する

1つ目は変数番号のある範囲にアイテムを保存する場所を決めておいて
「ポーション」なら1、「ナイフ」なら2とアイテムを数値に置き換えて代入する方法です。
この方法では同じ種類のアイテムが重複して表示され、アイテムの個数が記録されません。
ちょうど「ドラクエ」がこの方式です。

 メリット
  ・個別所有、預かり所などの表現ができる

 デメリット
  ・お店の処理が利用できない
  ・並び替え、検索等の処理が必要
  ・所持できるアイテムの数に上限を設けざるを得ない


仮に変数101〜110番に所持アイテムの情報を記録するとして、
ポーションを入手したら101番に1を代入、次にナイフを入手したら102番に2を代入、
次にまたポーションを入手したら103番に1を代入としていきます。
これを実現するには変数101番以降で数値が0のところに新たな数値を代入する処理を作ります。

(アイテム記録)
変数
[0003:入手したアイテム]
[0004:調べる変数位置]
[0005:変数4の位置の数値]

 ◆変数の操作:[0004:調べる変数位置]代入,101
 ◆繰り返し処理
  ◆変数の操作:[0005:変数4の位置の数値]代入,変数[V[0004]]の値
  ◆条件分岐:変数[0005:変数4の位置の数値]が0
   ◆変数の操作:[V[0004]]代入,変数[0003]の値
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆変数の操作:[0004:調べる変数位置]加算,1
  ◆条件分岐:変数[0004:調べる変数位置]が111
   ◆文章:これ以上持ちきれない。
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆
 :以上繰り返し


すでに数値になっているので所持アイテムを取り出すのはいたって簡単です。
例えば101番のアイテムを取り出すなら、
 ◆変数の操作:[0004:調べる変数位置]代入,101
 ◆変数の操作:[0001:表示するアイテム]代入,変数[V[0004]]の値
とやるだけで確認できます。

(所持アイテム検索)
 ◆条件分岐:変数[0004:調べる変数位置]が110以下
  ◆変数の操作:[0001:表示するアイテム]代入,変数[V[0004]]の値
  ◆変数の操作:[0004:調べる変数位置]加算,1
 :分岐終了


ところでこの方法ではアイテムを使ったときに位置を前に詰めたり
並び替えたりする処理が新たに必要になります。
ここで少し寄り道をして変数列を操作するテクニックを紹介します。


★変数列操作・全体を1つ前に移動する

仮に変数101番に記録したアイテムを使ったとして
変数102番以降を一個づつ前に詰めることを想定してやってみましょう。
簡単なものなら2つの変数でできます。

 ◆変数の操作:[0001:作業用1]代入,101
 ◆変数の操作:[0002:作業用2]代入,102
 ◆繰り返し処理
  ◆変数の操作:[V[0001]]代入,変数[V[0002]]の値
  ◆変数の操作:[0001〜0002]加算,1
  ◆条件分岐:変数[0002:作業用1]が111
   ◆変数の操作:[V[0001]]代入,0
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆
 :以上繰り返し


★変数列操作・変数を数の小さいものから順に並び替える

サンプルを「変数並び替えパッケージ」に収録しています。
さてこの中にはバブルソート、挿入法、シェルソート、ヒープソート…
いろいろとありますがひとまず一番簡単なバブルソートについて説明します。

まず並び替えたい範囲の1番目の変数と2番目の変数を比較します。
そして1番目の数が2番目の数より大きい場合はこの2つの変数を入れ替えます。
次に2番目の変数と3番目の変数を比較して前者が大きければ入れ替えます。
こうやって範囲の最後まで順番に調べていけば一番後ろに最大の数が来るはずです。
そうしたら範囲を1個狭めてまた範囲の最初から調べます。
これを繰り返すと最後には範囲の最初と最後が1つになって並び替えが終了というわけです。

 6 3 2 7 4
   ↓
 [6 3] 2 7 4
   ↓(入れ替え)
 3 [6 2] 7 4
   ↓(入れ替え)
 3 2 [6 7] 4
   ↓
 3 2 6 [7 4]
   ↓(入れ替え)
 [3 2] 6 4 / 7
   ↓(入れ替え)
 2 [3 6] 4 / 7
   ↓
 2 3 [6 4] / 7
   ↓(入れ替え)
 [2 3] 4 / 6 7
   ↓
 2 [3 4] / 6 7
   ↓
 [2 3] / 4 6 7
   ↓
 2 / 3 4 6 7
   ↓
 2 3 4 6 7

試しに変数101番から110番までを小さい順に並び替えます。

 ◆変数の操作:[0001:作業用1]代入,101
 ◆変数の操作:[0002:作業用2]代入,102
 ◆変数の操作:[0005:範囲の最後]代入,110
 ◆繰り返し処理
  ◆変数の操作:[0003:変数1の位置の数値]代入,変数[V[0001]]の値
  ◆変数の操作:[0004:変数2の位置の数値]代入,変数[V[0002]]の値
  ◆条件分岐:変数[0003:変数1の位置の数値]がV[0004]より大きい
   ◆変数の操作:[V[0001]]代入,変数[0004]の値
   ◆変数の操作:[V[0002]]代入,変数[0003]の値
   ◆
  :分岐終了
  ◆変数の操作:[0001〜0002]加算,1
  ◆条件分岐:変数[0002:作業用1]が変数[0005]
   ◆変数の操作:[0005:範囲の最後]減算,1
   ◆条件分岐:変数[0005:範囲の最後]が101
    ◆繰り返し処理の中断
    ◆
   :分岐終了
   ◆変数の操作:[0001:作業用1]代入,101
   ◆変数の操作:[0002:作業用2]代入,102
  :分岐終了
  ◆
 :以上繰り返し

ここで「◆条件分岐:変数[0003:変数1の位置の数値]がV[0004]より大きい」を
「〜より小さい」にすると逆に大きい数から順に並びます。

その他の方法は…興味がある方はプログラム系サイトを訪ねてみてください。
私が説明するよりも良い解説が得られると思います(^^;



目次へ


★独立型・アイテムを種類ごとに記録する

2つ目は変数の番号1つ1つにアイテムの種類を割り当てておいて
その個数を記録する方法です。
例えば変数の201番にはポーションの個数、変数の202番にはナイフの個数
というふうに記録していきます。

 メリット
  ・個別所有、預かり所などの表現ができる
  ・各アイテムの所有上限が無制限

 デメリット
  ・お店の処理が利用できない
  ・個数を記録する変数領域がアイテムの種類数だけ必要になる


(所持アイテム検索)
使う変数
[0001:表示するアイテム]
[0002:アイテムの個数]
[0004:調べる変数位置]
[0005:変数4の位置の数値]

 ◆変数の操作:[0004:調べる変数位置]代入,201
      〜〜〜〜〜〜〜〜〜

 ◆繰り返し処理
  ◆変数の操作:[0005:変数4の位置の数値]代入,変数[V[0004]]の値
  ◆条件分岐:変数[0005:変数4の位置の数値]が1以上
   ◆変数の操作:[0001:表示するアイテム]代入,変数[0004]の値
   ◆変数の操作:[0001:表示するアイテム]減算,200
   ◆変数の操作:[0002:アイテムの個数]代入,変数[0005]の値
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆変数の操作:[0004:調べる変数位置]加算,1
  ◆条件分岐:変数[0004:調べる変数位置]が211
   ◆変数の操作:[0001〜0002]代入,0
   ◆繰り返し処理の中断
   ◆
 :分岐終了
  ◆
:以上繰り返し



目次へ


★アイテムを表示する

選択肢を利用したテキストメニューとピクチャーで表示する方法を紹介します。
マップチップを利用する方法も考えられますが、これはまだ未調査です。


★テキストメニュー

まずアイテム名と同じ名前の「主人公」を用意します。
選択肢にはその主人公の名前をアイテム名として表示するわけです。
 ◆選択肢の表示:次の項目/\N[\V[0011]]/\N[\V[0012]]/\N[\V[0013]]
[0001:表示するアイテム]には対応する主人公番号を代入すると管理が楽です。

ちなみに\N[\V[n]]が使えるのはRPGツクールVer1.50以降のバージョンだけです。
それ以前のバージョンでも「主人公の名前変更」で名前を書き換える処理を
作ることで対応できます。

変数11〜13番をアイテム名表示用、14〜16番を個数表示用とします。
それからアイテムの99番目はアイテムの空の時の表示用とします。
(所持アイテム検索)には参照型独立型1独立型2の何れかが入ります。

 ◆変数の操作:[0001:表示するアイテム]代入,0
 ◆ラベルの設定:1番
 ◆イベントの呼び出し:(所持アイテム検索)
 ◆条件分岐:変数[0002:アイテムの個数]が1以上
  ◆変数の操作:[0011:アイテム名1]代入,変数[0001]の値
  ◆変数の操作:[0014:アイテム個数1]代入,変数[0002]の値
  ◆
 :それ以外の場合
  ◆変数の操作:[0011:アイテム名1]代入,99
  ◆変数の操作:[0014:アイテム個数1]代入,0
  ◆
 :分岐終了
 ◆変数の操作:[0002:アイテムの個数]代入,0
 ◆イベントの呼び出し:(所持アイテム検索)
 ◆条件分岐:変数[0002:アイテムの個数]が1以上
  ◆変数の操作:[0012:アイテム名2]代入,変数[0001]の値
  ◆変数の操作:[0015:アイテム個数2]代入,変数[0002]の値
  ◆
 :それ以外の場合
  ◆変数の操作:[0012:アイテム名2]代入,99
  ◆変数の操作:[0015:アイテム個数2]代入,0
  ◆
 :分岐終了
 ◆変数の操作:[0002:アイテムの個数]代入,0
 ◆イベントの呼び出し:(所持アイテム検索)
 ◆条件分岐:変数[0002:アイテムの個数]が1以上
  ◆変数の操作:[0013:アイテム名3]代入,変数[0001]の値
  ◆変数の操作:[0016:アイテム個数3]代入,変数[0002]の値
  ◆
 :それ以外の場合
  ◆変数の操作:[0013:アイテム名3]代入,99
  ◆変数の操作:[0016:アイテム個数3]代入,0
  ◆
 :分岐終了
 ◆選択肢の表示:次の項目/\N[\V[0011]] \V[14]個/\N[\V[0012]] \V[15]個/\N[\V[0013]] \V[16]個
 :[次の項目]の場合
  ◆ラベルへ飛ぶ:1番
  ◆
 :[\N[\V[0011]] \V[14]個]の場合
  ◆変数の操作:[0010:使用したアイテム]代入,変数[0011]の値
  ◆
 :[\N[\V[0012]] \V[15]個]の場合
  ◆変数の操作:[0010:使用したアイテム]代入,変数[0012]の値
  ◆
 :[\N[\V[0013]] \V[16]個]の場合
  ◆変数の操作:[0010:使用したアイテム]代入,変数[0013]の値
  ◆
 :分岐終了

これであとは変数[0010:使用したアイテム]に代入した値を使って
アイテムの使用処理を作れば完成です。



目次へ


★ピクチャーメニュー

変数[0001:表示するアイテム]の値に合わせてアイテム名を描いた
ピクチャーを表示します。
ピクチャー番号は変数で指定できないので一度に表示する
項目の数だけイベントを作る必要があります。

イベント:ピクチャー番号1のアイテム名表示
 ◆条件分岐:変数[0001:表示するアイテム]が1
  ◆ピクチャーの表示:1,アイテム1, (X,Y)
  ◆
 :分岐終了
 ◆条件分岐:変数[0001:表示するアイテム]が2
  ◆ピクチャーの表示:1,アイテム2, (X,Y)
  ◆
 :分岐終了
      〜〜〜〜〜〜〜〜〜
      〜〜〜〜〜〜〜〜〜

個数表示の方は前回解説した数字表示法を参照してください。


[0001:表示するアイテム]
[0002:アイテムの個数]
仮に画面上に10個まで表示できるとして、
変数の21〜30番を現在画面上にどのアイテムが表示されているかを
調べる変数とします。
(所持アイテム検索)には参照型独立型1独立型2の何れかが入ります。


 ◆変数の操作:[0001:表示するアイテム]代入,0
 ◆イベントの呼び出し:(所持アイテム検索)
 ◆条件分岐:変数[0002:アイテムの個数]が1以上
  ◆変数の操作:[0021:1個目のアイテム]代入,変数[0001]の値
  ◆イベントの呼び出し:ピクチャー番号1のアイテム名表示
  ◆イベントの呼び出し:ピクチャー番号11の個数表示
  ◆
 :分岐終了
 ◆変数の操作:[0002:アイテムの個数]代入,0
 ◆イベントの呼び出し:(所持アイテム検索)
 ◆条件分岐:変数[0002:アイテムの個数]が1以上
  ◆変数の操作:[0022:2個目のアイテム]代入,変数[0001]の値
  ◆イベントの呼び出し:ピクチャー番号2のアイテム名表示
  ◆イベントの呼び出し:ピクチャー番号12の個数表示
  ◆
 :分岐終了
      〜〜〜〜〜〜〜〜〜
      〜〜〜〜〜〜〜〜〜

 ◆変数の操作:[0002:アイテムの個数]代入,0
 ◆イベントの呼び出し:(所持アイテム検索)
 ◆条件分岐:変数[0002:アイテムの個数]が1以上
  ◆変数の操作:[0030:10個目のアイテム]代入,変数[0001]の値
  ◆イベントの呼び出し:ピクチャー番号10のアイテム名表示
  ◆イベントの呼び出し:ピクチャー番号20の個数表示
  ◆
 :分岐終了

表示が終わったらカーソル移動処理等を使って項目選択部を作れば完成です。






以上だいぶ簡略化して書きましたので実際にはこれだけではすまないかもしれません。
ご利用は計画的に…





基礎講座
第一回:RPGツクールでハローワールド(04' 4/10)
第二回:トラブル対処法(04' 4/17)
第三回:オープニングを作ろう(04' 4/24)

自作システム講座
第一回:マップイベントとコモンイベント(04' 1/10)
第二回:カーソル移動あれこれ(04' 1/10)
第三回:RPG式自作戦闘の下準備(スイッチ・変数の管理)(03' 6/15)
第四回:RPG式自作戦闘(行動順の決め方)(03' 6/15)
第五回:変数の値を画面上に表現(03' 7/6)
第六回:アイテムメニューを作る(04' 1/10)
講座一覧へ戻る
トップへ戻る



公開日時:04' 1/10 10:00
更新日時:04' 1/10 10:00
管理人:すっぴぃ ◆ADGYPSYxII