私は勉強のためにVC++とDirectXでRPGを制作しています。
今回は技術的な質問ではなく、ゲームの構造をどう設計しようか悩んでいます。
例えば敵1、敵2、敵3が存在し、基本的なステータス情報(HP、AP etc...)は持っていますが、プレイヤーへの追跡の仕方や攻撃の仕方が違うとします。
その場合は、enemy01.cpp、enemy02.cpp、enemy03.cppのように別々にファイルを分けて書いたほうが良いのか、
それとも、enemy.cppのように一つのファイルにまとめて書いたほうが良いのか悩んでいます。
現在は、敵の構造体に基本的なステータスと種類情報を入れ、一つのファイルで種類情報をもとに管理しています。
動作としては問題ないのですが、やや見にくい感じはしています。
実際にゲーム開発されている方はどうしていますか?
経験談をお伺いたいです。
宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/08/10 00:45
回答6件
0
ベストアンサー
こんにちは。ゲーム畑ではありませんが、VC++歴だけは無駄に長いので参考になれば。
その場合は、enemy01.cpp、enemy02.cpp、enemy03.cppのように別々にファイルを分けて書いたほうが良いのか、それとも、enemy.cppのように一つのファイルにまとめて書いたほうが良いのか悩んでいます。
悩んでいるのであれば、「どちらもやってみて検証してみては?」と思いました。
プログラムを書いていると正解が見つからない事も多く、ネットや他人の情報を参考にする事もあるかと思いますしそれ自体を否定することはありませんが、人によって正解/不正解の基準が変わる事が多いため、とりあえずやってみるしかないのではないかと思います。
(悩んでいる理由やポイントも外野はわからんのです。)
質問者さんの質問の意図を無視すると、構造体を使うのをやめて、Enemyクラスでも作って、動作が違う「追跡」や「攻撃」に当たる関数を仮想関数化して派生クラス側でオーバーライドしてポリモーフィズムするのがおすすめです。
ファイルはクラス単位で別けます。
投稿2019/08/05 07:36
総合スコア8356
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/05 08:16 編集
2019/08/05 08:21
退会済みユーザー
2019/08/05 11:22
2019/08/09 06:34
退会済みユーザー
2019/08/10 00:38
2019/08/10 00:55
2019/08/10 01:05
0
行動パターンも攻撃の仕方もクラス化してDIした方が共通機能がまとめられて便利かと思う
(攻撃の仕方は違うが行動パターンは一緒とか)
リリースを前提に開発しているのでなければ(勉強のためにやっている)
オブジェクト指向やデザインパターンについて調べ、一旦遠回りしてみてもいいのではないかと思います
投稿2019/08/05 06:17
編集2019/08/05 06:59総合スコア5036
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/08/10 00:35
0
ファイルを分けることで「見やすさ」を何とかしたいという話みたいですから,今現在「見にくい」と感じる具体的な要因を考えて,それを軽減する方向を模索してみれば良いのではないでしょうか.
その形は
enemy01.cpp、enemy02.cpp、enemy03.cpp
という敵の種類という観点とは異なるかもしれません.
- あれとこれとは並んで書いてある方が見やすい
という要素があるならば,そこは分割しない方が良いのでしょうし,
- 何かあれを見るためにいつもめっちゃスクロールして探してる
みたいなことがあるなら,そこは分割してみるとか.
あるいは単にファイル内での順序を変えるだけでも改善するのかもしれません.
投稿2019/08/06 04:45
総合スコア11654
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/08/10 00:45
0
敵の種類が少ないのであれば、一つのファイルにまとめても良いと思います。
ですが、RPGということですので、敵は数十種類は登場するのではないかと思います。
この場合、一つのファイルにすべての敵の処理を書いてしまうと、かなり煩雑になってしまうので、各敵でファイルを分割した方が良いでしょう。
EnemyBase のような基底クラスを用意し、敵の基本的な処理はここに書いておきます。
各敵は EnemyBase の派生クラスとして定義して、個別の処理のみを書くようにすれば、一つのファイルが大きくならず、全体を把握しやくなるのではと思います。
また、さらに種類が多くなったり処理が複雑になる場合は、外部スクリプトファイル(Lua や Squirrel など)に書く場合もあります。
投稿2019/08/05 10:11
総合スコア6500
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/08/10 00:43
0
その場合は、enemy01.cpp、enemy02.cpp、enemy03.cppのように別々にファイルを分けて書いたほうが良いのか、
それとも、enemy.cppのように一つのファイルにまとめて書いたほうが良いのか悩んでいます。
書く量、敵の種類数にもよりますが、分けた方がいいでしょう。
.cppはコメント行を省いて、100行(長くても500行以内)に収めるのが一番スッキリして読みやすいです。
現在は、敵の構造体に基本的なステータスと種類情報を入れ、一つのファイルで種類情報をもとに管理しています。
動作としては問題ないのですが、やや見にくい感じはしています。
敵の情報を持ったcsvファイルなどを作成するとその辺が解消されますよ。
投稿2019/08/05 09:07
総合スコア3307
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/08/10 00:41
0
例えば敵1、敵2、敵3が存在し、基本的なステータス情報(HP、AP etc...)は持っていますが、プレイヤーへの追跡の仕方や攻撃の仕方が違うとします。
昔、ゲーム作った時には、この「プレイヤーの追跡の仕方(行動パターン)」や「攻撃の仕方(兵装の種類)」といった情報も基本的なステータス情報として持って、場合によっては付け替えられるようにして、それぞれファイル別に定義していました。
情報といっても「数値」や「文字列」で持っているのではなく、関数ポインタで持つ感じですかね?
ゲーム関連のライブラリについては詳しくないですが、ドキュメントを読むなりサンプルを調べてみたりするなりすると何かしらヒントでもあるのではないでしょうか?
投稿2019/08/05 05:37
総合スコア1305
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/08/10 00:33
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。