ページ 11

ゲームの変数

Posted: 2011年4月16日(土) 11:36
by pkp
これは質問というよりそうだねって言って欲しい話なんですが

一般の市販されているゲームのような本格的ゲームは変数が100を超えるのでしょうか?
ポケモンなんかを見ていると変数が無茶苦茶、用意されている気がします

Re: ゲームの変数

Posted: 2011年4月16日(土) 12:04
by softya(ソフト屋)
ポケモンには詳しくないのと構造体配列が多そうなので単純には言えませんが、たぶん100要素では足りないでしょうね。
ポケモン毎のパラメータや主人公のアイテムなど色々数を勘定すれば分かると思いますよ。
パラメータとして目には見えませんがイベントの変数も必要ですのでそちらも勘定に入れる必要があります。

Re: ゲームの変数

Posted: 2011年4月16日(土) 12:16
by Dixq (管理人)
モンスターの種類が多いゲームは変数が多いわけではなく、パラメータ設定ファイルやスクリプトが多いんだと思います。

モンスターを動かすモジュールはどんな種類の敵に対しても利用できるようにしておけば、
バージョンアップなどで数百種類にモンスターが増えようとも管理が楽になります。

規模が大きくなるほど大きさに比例して変数が多くなり、設定値を全て変数で持っているようなゲームシステムは破綻するのではないでしょうか。

Re: ゲームの変数

Posted: 2011年4月16日(土) 13:47
by やっくん
たとえば、初代ポケモンで使ってるであろう変数を考えてみました。

・時間

<主人公>
・名前
・バッチ[8]
・所持金
・歩数
・アイテムの取得数 × アイテムの種類
・ポケモン図鑑[151](取得or発見or未発見フラグ)
・手持ちのモンスター情報
・パソコンの中のモンスター情報

<ライバル>
・名前
・手持ちモンスター

落ちてるアイテムや岩などが破壊されてるかのフラグ
<イベントフラグ>
・イベントフラグ[?]
・落ちてるアイテムフラグ[?](実際には構造体で細かくあるでしょうが)

モンスターは管理人さんが言うように別ファイルに書き込んでると思うので、以下のような構造体を一つ用意していると思います。
<手持ちor出現モンスターのステータス用>
・No
・Lv
・HP
・状態(毒・麻痺・etc)
・こうげき
・ぼうぎょ
・はやさ
・とくしゅ
・持ち技[4]
・合計EXP

上とは別にモンスターの共通情報を書いたものもあると思います。
(あるモンスターが2匹居て、2匹とも共通するデータのこと)

<モンスター情報>
・EXPテーブル
・LvUP時の上昇値(たいりょく)
・LvUP時の上昇値(こうげき)
・LvUP時の上昇値(ぼうぎょ)
・LvUP時の上昇値(はやさ)
・LvUP時の上昇値(とくしゅ)
・LvUP時に覚える技フラグ
・技マシンを使えるかどうかのフラグ[技マシンの数]

<マップ情報(これも構造体でデータ自体は設定ファイルでしょう)>
・音楽
・マップ情報
・マップ画像
・マップイベントフラグ
・村人
・向き
  ・移動
  ・会話内容
  ・画像
・SHOP
  ・売ってる物[?]

わかりやすい部分で書きましたが、書き続けてもキリが無いのでこの辺で・・・。

Re: ゲームの変数

Posted: 2011年4月16日(土) 15:12
by softya(ソフト屋)
ポケモンに詳しくないことをお断りしておきます。
固定で持てるパラメータもありますが、ユーザーにより可変する要素がある場合はセーブする変数としなければいけません。
ポケモンのモンスターの成長パラメータがランダム要素を含む場合はゲットしてるあるいはどこかに保管しているポケモン全てのパラメータを全て変数にして保存しておかなくてはなりません。

Re: ゲームの変数

Posted: 2011年4月16日(土) 15:35
by たかぎ
このような話をするには、あらかじめ「変数」とは何かを定義しておく必要がありますね。

たとえば、いわゆるグローバル変数に相当するものを、すべてひとつの構造体にまとめてしまった場合、変数は1個なのでしょうか?
セーブするデータ全体を、いったん一つの配列に詰め込んでからファイルに書くのであれば、変数は1個なのでしょうか?
関数の引数は変数ですか?
また、次のようなものでどうでしょうか?

コード:

int* p = new int;
*p;  // ← これは変数?
上のように、ポインタを使った場合、間接参照されるオブジェクトには名前がない場合があります。
それは変数と考えるのでしょうか?
もし仮に変数と考えるとすれば、一時オブジェクトも変数でしょうか?

この辺りの定義を明確にしておかないとまともな議論はできません。
なお、プログラムの規模が大きくなれば、「変数」ではなく「オブジェクト」の数は間違いなく増えます。