DXライブラリ+MMDモデルで3Dゲームを作っているのですが、行き詰っています。
ですが、どこかのソースが動かないとか、表示されないとか、そういうのではありません。
はじめのうちはどんどん機能を追加して行って順調なのですが、
規模が大きくなっていくうちになんだか、自分でもどこに何を書いていたか分からなくなってきて、
最終的には、パッと見で、コードの内容が分からなくなってしまいます。
そのうちモチベーションもだんだん削れてきて……。
とにかく、コード全体をどう設計したら良いのかわらないのです。
なんていうか、こういうのは、ゲームプログラミングの館とかにすでにどこかに書いてあって、
そこを見ろとか言われそうですが、いかんせんどこを見ればいいのか……。
日本語自体怪しい文章ですが、どうか助言していただければ……。
すごい漠然とした質問ですが……
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: すごい漠然とした質問ですが……
ゲームプログラミングの館だと「ゲームプログラミング設計」 が一つの整理の仕方の答えです。
どのモジュールでも、同じ関数を呼び出すだけで処理されるので追いかけやすくなります。
関数名や変数名などなど、気をつけないといけないとは一杯あって、あちこちのコード参照しながら直さないといけないのはメンテ性が非常に低い証拠です。
C言語でも使われるモジュール結合度、モジュール強度を意識して設計しましょう。
「オブジェクト指向とモジュールの凝集度、モジュールの結合度 - だるまのエクセルVBA」
http://members3.jcom.home.ne.jp/daruma_ ... pling.html
【補足】
C言語前提で回答しております。C++の場合はまた代わってオブジェクト指向やらデザインパターンの話になるかと思います。
どのモジュールでも、同じ関数を呼び出すだけで処理されるので追いかけやすくなります。
関数名や変数名などなど、気をつけないといけないとは一杯あって、あちこちのコード参照しながら直さないといけないのはメンテ性が非常に低い証拠です。
C言語でも使われるモジュール結合度、モジュール強度を意識して設計しましょう。
「オブジェクト指向とモジュールの凝集度、モジュールの結合度 - だるまのエクセルVBA」
http://members3.jcom.home.ne.jp/daruma_ ... pling.html
【補足】
C言語前提で回答しております。C++の場合はまた代わってオブジェクト指向やらデザインパターンの話になるかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: すごい漠然とした質問ですが……
回答ありがとうございます。softya(ソフト屋) さんが書きました:ゲームプログラミングの館だと「ゲームプログラミング設計」 が一つの整理の仕方の答えです。
どのモジュールでも、同じ関数を呼び出すだけで処理されるので追いかけやすくなります。
関数名や変数名などなど、気をつけないといけないとは一杯あって、あちこちのコード参照しながら直さないといけないのはメンテ性が非常に低い証拠です。
C言語でも使われるモジュール結合度、モジュール強度を意識して設計しましょう。
「オブジェクト指向とモジュールの凝集度、モジュールの結合度 - だるまのエクセルVBA」
http://members3.jcom.home.ne.jp/daruma_ ... pling.html
【補足】
C言語前提で回答しております。C++の場合はまた代わってオブジェクト指向やらデザインパターンの話になるかと思います。
モジュールの結合度ですか、なかなか難しそうですね……。
一応、C++で開発しています。IDEはvisual studio 2008です。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: すごい漠然とした質問ですが……
>自分でもどこに何を書いていたか分からなくなってきて、最終的には、パッと見で、コードの内容が分からなくなってしまいます。
>一応、C++で開発しています。IDEはvisual studio 2008です。
C++であれば、名前付けの問題から、クラス・オブジェクトのまとめ方、カプセル化が不十分で局所的に問題を考えられない、分かりづらく使いにくい不適切なメンバ関数、適用デザインパターンの選択ミスなどなどが考えられます。
オブジェクト指向を適切に行なっていれば、直す部分を探すこと自体が難しいという問題はすごく少ないはずです。
モジュールの凝集度、モジュールの結合度ももちろん重要です。これらは如何に行き当たりばったりで組んだかを示す尺度ですね。
組むときに後々のことを考えて組んだかとか、随時リファクタリングで整理していたかって事が段々と開発効率として効いてくる訳です。
【補足】
なんで、こんな事を考えないとダメかというとご自身が感じていらっしゃる何故開発が続けて行けないのかとかメンテナンス性がなぜ悪いのかとか解決するための考えだされたものだからです。
>一応、C++で開発しています。IDEはvisual studio 2008です。
C++であれば、名前付けの問題から、クラス・オブジェクトのまとめ方、カプセル化が不十分で局所的に問題を考えられない、分かりづらく使いにくい不適切なメンバ関数、適用デザインパターンの選択ミスなどなどが考えられます。
オブジェクト指向を適切に行なっていれば、直す部分を探すこと自体が難しいという問題はすごく少ないはずです。
モジュールの凝集度、モジュールの結合度ももちろん重要です。これらは如何に行き当たりばったりで組んだかを示す尺度ですね。
組むときに後々のことを考えて組んだかとか、随時リファクタリングで整理していたかって事が段々と開発効率として効いてくる訳です。
【補足】
なんで、こんな事を考えないとダメかというとご自身が感じていらっしゃる何故開発が続けて行けないのかとかメンテナンス性がなぜ悪いのかとか解決するための考えだされたものだからです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: すごい漠然とした質問ですが……
難しい話の前に、まず考え方を180度変える必要があると思います。
例えば3DでFirstPersonShootingを作るとして、プレイヤーキャラと敵の銃弾の当たり判定を考える場合、プレイヤーキャラの処理で敵の銃弾の中から当たっているものを探したり、敵の銃弾の処理でプレイヤーキャラと当たっているかどうかを判定したりするのはアウトです。
どんどん無関係な処理で膨れ上がっていく典型的なパターンです。
プレイヤーキャラと敵の銃弾が当たっているかどうか判定をするのは、どちらにもアクセスできる第三者のオブジェクトです。
プレイヤーキャラも敵の銃弾も、自分がそこにいると教えられた地点を覚えるだけで、どんなところにいるのか知る必要はありません。
プレイヤーキャラは、「ダメージを受けた」と言われたら、そういう演技をするのが仕事です。
どうしてダメージを受けたのかを知る必要はありません。
敵の銃弾は、「消えろ」と言われたら、消えるのみです。
どうしてなのかを知る必要はありません。
自分と関係ないことはしない。
関係を持つものだけを相手にする。
そうすればどこに何を書いたか細かく覚えておく必要はありません。
例えば3DでFirstPersonShootingを作るとして、プレイヤーキャラと敵の銃弾の当たり判定を考える場合、プレイヤーキャラの処理で敵の銃弾の中から当たっているものを探したり、敵の銃弾の処理でプレイヤーキャラと当たっているかどうかを判定したりするのはアウトです。
どんどん無関係な処理で膨れ上がっていく典型的なパターンです。
プレイヤーキャラと敵の銃弾が当たっているかどうか判定をするのは、どちらにもアクセスできる第三者のオブジェクトです。
プレイヤーキャラも敵の銃弾も、自分がそこにいると教えられた地点を覚えるだけで、どんなところにいるのか知る必要はありません。
プレイヤーキャラは、「ダメージを受けた」と言われたら、そういう演技をするのが仕事です。
どうしてダメージを受けたのかを知る必要はありません。
敵の銃弾は、「消えろ」と言われたら、消えるのみです。
どうしてなのかを知る必要はありません。
自分と関係ないことはしない。
関係を持つものだけを相手にする。
そうすればどこに何を書いたか細かく覚えておく必要はありません。
Re: すごい漠然とした質問ですが……
回答ありがとうございます。
そうですね……一つメソッドにいろいろ詰め込みすぎていたように思うので、
とりあえずファイル分割を推し進めてみようと思います。
そうですね……一つメソッドにいろいろ詰め込みすぎていたように思うので、
とりあえずファイル分割を推し進めてみようと思います。