- ベストアンサー
C言語ゲーム製作4 ソース公開 勉強中 ファイル分割
- C言語ゲーム製作4のソースコードを公開!ファイル分割を施し、迷路の移動処理を修正しました。
- 関数定義のstaticの使い方やヘッダーの取り込みの仕方について疑問があります。具体的な意見をお待ちしています。
- C言語ゲーム製作4のソースコードをダウンロードできます。ファイルサイズは1.0Mです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ソースを分けたので、だいぶすっきりしましたね。 >・関数定義のstaticの使い方 ファイル内の関数から呼ばれるだけの関数はstaticを使います。 staticにする関数はヘッダから外して.cppの始めの方に記述します。 >・ヘッダーの取り込みの仕方がわからないコードの上で >(#include "..\\include\\player.h")と記述している > メニューから設定するか、環境変数設定のようなのですが… 通常は.cppと.hは同じ場所(フォルダ)に置きます。 同じ場所に置けば、 #include "player.h" で済みますから。 ソースを見て気になったことを何点か。 ・WinMainとInitFuncやEndFuncはソースを分けないほうが良いと思います。後々、面倒じゃないでしょうか。 ・変数のextern宣言が.cpp側にあるのが変。.hに書きましょう! extern int MapData[ MAP_HEIGHT ][ MAP_WIDTH ]; とかはmap.hにあるべきです。 ・m_countをexternで参照しているのが私の趣味からすると気持ち悪いですね。私ならm_countの値を返す関数を作ります。理由は外部参照可能にしておくと思わぬ場所で更新してしまうバグを作る可能性が有るからです。 if( m_count = 1 ) とか書いちゃったらm_countを更新する上に、自分は条件を書いたつもりだからバグがなかなか発見できません。 ・player.cに移動処理が複雑すぎですね。上下左右を1つの関数で処理するアルゴリズムに変更しないと必ずバグを作るでしょう。変更も手間がかかりすぎます。テーブルとかで処理を単純化できますよ(キー入力の方向値を添え字として、x,yの移動データを得られる配列を作りましょう) 壁や相手との当たり処理を自キャラと敵キャラで共通化する必要もあると思います。 ・壁に引っかかったときの補正処理で、壁を越えられるときは良いですが、補正によっては通路に戻されてしまいます。 これは、仮の移動という概念を取り入れずに必ずプレーヤーの座標を動かしてしまっているのが原因だと思われます。仮に移動させて、その方向に問題があればその座標を捨てるのが良いでしょう。px,pyをローカル変数にコピーして使います。
お礼
回答有難うございます。 >staticは.cppの始めの方に記述します。 なるほど。わかりわかりやすいです。 >通常は.cppと.hは同じ場所(フォルダ)に置きます。 わかるのですがフォルダをまとめて整理をしたいのです。 そして、調べたらメニューのツール>オプションでインクルードできて短縮できそうです メニューのツール>オプションでインクルードできて短縮できそうです >・WinMainとInitFuncやEndFuncをわける これに関しては、なんとなく納得するのですが他の人の意見も 聞きたいです。自分で考え、次の質問で結論を出す方向で >・変数のextern宣言が.cpp側にあるのが変。.hに書きましょう! 修正の方向で検討します >私ならm_countの値を返す関数を作ります。 今はグローバルの扱い方を確認しているのでしばらくはそのままの方向で 最終的にはグローバル変数を使わないのがいいと思っています >テーブルとかで処理を単純化できますよ そんなやり方があるのですか?もう少し勉強して対応していきます。 できれば効率のいい形でまとめたいです。 >壁に引っかかったときの補正処理で、壁を越えられるときは良いですが、 >補正によっては通路に戻されてしまいます。 通路のカドに入ろうとしたら自動で通路に入ろうとするしくみのこと でしょうか?今後何か支障があれば修正しますが現時点では仕様なので未定です >px,pyをローカル変数にコピーして この方法は使えそうです 今後の反省点として、沢山対応すると大変なので 質問を基本的に一つに絞ったほうがいいと思いました。 ^^ 引き続きゲーム作成を通してC言語を勉強していきたいと思います 又、何かありましたら宜しく願います。 <(_ _)>