2016-05-15 10 views
0

私はC++を学習しています.2Dゲームを作ろうとしていますが、メイン関数を複数のファイルに分割する方法があるかどうかを知りたいと思います。ゲーム(メインメニュー、ゲーム..)を使用して、ファイルをクリアで読みやすい状態に保ちます。 main関数のすべての変数へのアクセスを維持したいので、私は他の関数を使いたいとは思いません。 また、#includeをこのように使用しないでください。これが私が求めている理由です。メイン関数を複数のファイルに分割するC++

私は間違っている可能性がありますか?主な機能を分割するのは悪い考えですか?私は多くの変数を使用したい場合でも、ポインタや参照で関数を使うべきですか?私は進める方法を本当に知らない。

+0

#関数内から別のファイルを#includeできますが、#includeできません。 – xaxxon

+1

メイン関数を別々のファイルに分割することはできません。それ以上に、それは悪い考えです。 main()はアプリケーションのエントリーポイントです。そしてアプリケーションは複数のものを持つことはできません。しかし、あなたが正しいと思うやり方は正しいです。オブジェクト指向のアプローチとそのすべての財宝が必要です。 – YTerle

答えて

4

私は、間違っているのは、コードを別々のソースファイルに分割しなければならないと感じるほどの大きなコードを共有したいということです。これは、アプリケーション全体でさまざまな関数によってアクセスされる多くのグローバル変数を持つことと変わりありません。これも一般的には良い考えではありません。

データをオブジェクトに整理し、関連するアイテムを論理的にグループ化する方法について考える必要があります。

3

もちろん、プログラムを多数のソースファイルに分割することができます。 それを行う方法は、通常、複数の関数/クラスに分割し、それらを複数のファイルに入れることです。

具体的には、main()を複数のファイルに分割することができますか?その質問も「はい」です。あなたは、複数のオプションがあります。

  • は(これはしかし、本当に悪い考えです)main()内部チャンクをプリプロセッサを虐待し、異なるファイルにメインの塊を入れ、#include

  • main()が行う作業をクラスと関数に分割し、作業に必要なデータを渡します。共有状態の量が大きい場合は、それを渡すことができるstructに入れることができます。つまり、共有状態にあまり依存しないようにデザインを修正します。 (グローバル変数を使用することもできますが、それはが本当に悪いソリューションです)。

はちょうど私があなたはそれが単純かつ容易に見える可能性があるため、1つの関数にすべてのものを維持したい理解

+0

構造体はC++で有用であるか、クラスによって置換/改良されていますか? – MaxV37

+0

'struct'と' class'のデフォルトアクセスが異なるだけです。 'class'はデフォルトではプライベートです。 'struct'はデフォルトでpublicです。それ以外は同じです。 –

1

..クラス/関数を使用して、共有変数のトンを必要としないので、あなたのプログラムを構成します理解する。ただし、コードを追加すると、関数が管理不能になります。そして、既存のコードを修正するよりも、すべてをゼロから書き直すほうが簡単だと分かります。我々はすべてそこにいた。 提案として、関数とクラスの仕組みを学ぶ必要があります。実際、彼らはここでプログラムの作成と理解を容易にしています。

main()については、この機能を可能な限り短く保つことは良い習慣です。あなたのプログラムの概要を読むべきです。あなたが呼んでいる他の機能へのすべての詳細。次のようなもの:

int main(int argc, char* argv[]) 
{ 
    parse_arguments (argc, argv); 
    initialize_display (...); 
    initialize_user_input (...); 
    initialize_game_engine (...); 

    run_game_engine (...); // <-- here is your eternal loop with a timer 

    cleanup_game_engine(); 
    release_user_input(); 
    release_display(); 
    return 0; 
} 

これは単なるイラストです。構造は各ゲームごとに異なってくるだろう。また、クラスでうまくやっています。

最終行 - すべてのコードを1つの関数に入れないでください。大きな関数を小さな関数に分割し、できるだけ孤立した状態にしておきます。できるだけグローバル変数を使用しないでください。 単純なデータ型(int、double ...)は値で渡す必要があります。他のすべて(クラス、構造体、文字列..)は、参照(好適なconst)によって渡されるべきです。 Jesper Juhlは、多数の変数が構造体またはクラスに結合されるべきであると述べました。 今日、生のポインタはまったく必要ないはずです。あなたがする必要がある場合にのみそれらを使用してください。ポインタを必要とする多くのAPIがあります。

関連する問題