プログラミングの勉強がてらRTSの製作を進めているんですが、
自軍、敵軍の兵士のデータの管理について悩んでいます。
(以下、「list」はstd::listのことをあらわします。)
14歳から~C++ では、キャラのデータはlistで管理していました。
私が最初にCでSTGを作った時は、全てのデータは配列で管理しましたが、
要素の上限を超えてプログラムの挙動が可笑しくなることが頻繁にありました。
しかし、ある本で、
配列の最大要素を超えると最悪の場合システムメモリが書き換えられてPCに悪い影響が出る可能性がある
と書いてあり、それを読んで以来ずっとlistでデータを管理してきました。
ここで質問なのですが、今までネットでさまざまな情報を調べ、いろいろな本を読んできましたが、
キャラをlistで管理している場合がかなり少なかったです。
(具体的に使っていたのは、ある個人製作のSTGと、14歳シリーズのC++、実例で学ぶ~の経路くらいだったでしょうか)
RTSのように頻繁にキャラが増減するゲームでは、管理にlistを使うことは最も良いと思うのですが・・。
皆さんはどのような方法でデータを管理していますか?
やはり、配列の要素の上限を超えないように気をつけて、通常の配列を使うのが普通なのでしょうか?
データの管理について質問です。
Re:データの管理について質問です。
>皆さんはどのような方法でデータを管理していますか?
私はゲームオブジェクト管理用のシステムの上でほぼ全てを構築するので
std::listではないのですが、似たようなもので管理しています。
それとは別に、ただ一部のオブジェクト(敵のリストとか)を列挙するのであれば
(実体はシステムが持っているので)それへのポインタのリスト std::vector<XXXX *>で
扱うことはあります。
>やはり、配列の要素の上限を超えないように気をつけて、通常の配列を使うのが普通なのでしょうか?
ケースバイケースです。
どっちがいいのかは、仕様や環境、データの持ち方などに左右されますので。
でも今書き込まれている情報だけから判断するなら、配列という選択は
私ならとらないと思います。
Re:データの管理について質問です。
私はSTGを作成していますが、std::listでオブジェクトは大体管理しています。
最初は作り方がわからなくて苦労しました^^;
動的オブジェクトを消したいときには、eraseの前にdeleteをしなければ
いけなかったりと、参考にする資料がすくなかったので少し戸惑いましたが
一度作ってしまえば、あとは派生クラスでもなんでも入れれるので重宝しています。
最初は作り方がわからなくて苦労しました^^;
動的オブジェクトを消したいときには、eraseの前にdeleteをしなければ
いけなかったりと、参考にする資料がすくなかったので少し戸惑いましたが
一度作ってしまえば、あとは派生クラスでもなんでも入れれるので重宝しています。
Re:データの管理について質問です。
配列に関して――
MNSさんが起こしてしまったような致命的なミスを防ぐ意味でも、配列にはしない方がいいと思います。
更に、配列では、キャラの個体数がコンパイル時点で限定されてしまいますね(最近のCでは、大丈夫だったかな・・・)。
よく言われる、”拡張性が無い”のだと思います。
他にも色々と理由があると思います。
恐らく、MNSさんが調べられたというサイトや書籍は、データ構造に関することを主眼とせず、ゲームプログラムに関する話がメインだったのではないでしょうか。
サイトの管理人や著作者様は、「ゲームプログラムの話をしたいのに、余計な話を持ち出されたくないため、理解しやすい配列を用いた」と考えたのだと推測します。
大抵の場合、キャラのデータであれば、Justyさんのように独自で組む(違ってたらすいません)のが良いと思います。
ゲームに必要な機能だけをチョイス出来るからです。
しかし、ゲームの本質とはちょっと逸れた部分ですので、深入りしたくないのならば、listで良いと思います。
キャラの数が膨大になったりとかしなければ、問題ない……と思います(ちょっと自信ないですけど)。
>皆さんはどのような方法でデータを管理していますか?
私はstd::vectorばかり使っています。
ほとんど、お手軽な可変長配列のように扱ってます。
MNSさんが起こしてしまったような致命的なミスを防ぐ意味でも、配列にはしない方がいいと思います。
更に、配列では、キャラの個体数がコンパイル時点で限定されてしまいますね(最近のCでは、大丈夫だったかな・・・)。
よく言われる、”拡張性が無い”のだと思います。
他にも色々と理由があると思います。
恐らく、MNSさんが調べられたというサイトや書籍は、データ構造に関することを主眼とせず、ゲームプログラムに関する話がメインだったのではないでしょうか。
サイトの管理人や著作者様は、「ゲームプログラムの話をしたいのに、余計な話を持ち出されたくないため、理解しやすい配列を用いた」と考えたのだと推測します。
大抵の場合、キャラのデータであれば、Justyさんのように独自で組む(違ってたらすいません)のが良いと思います。
ゲームに必要な機能だけをチョイス出来るからです。
しかし、ゲームの本質とはちょっと逸れた部分ですので、深入りしたくないのならば、listで良いと思います。
キャラの数が膨大になったりとかしなければ、問題ない……と思います(ちょっと自信ないですけど)。
>皆さんはどのような方法でデータを管理していますか?
私はstd::vectorばかり使っています。
ほとんど、お手軽な可変長配列のように扱ってます。
Re:データの管理について質問です。
皆さん、さまざまな意見をありがとうございました。
std::listで管理するのは問題ないようなので、それで管理することにしました。
慣れてきたら、独自のコンテナクラスでも作ってみようと思います。
どうもありがとうございました。
std::listで管理するのは問題ないようなので、それで管理することにしました。
慣れてきたら、独自のコンテナクラスでも作ってみようと思います。
どうもありがとうございました。