2012-02-29 8 views
0

私は短いテキストアドベンチャーゲームを書いています。そのゲームは準備が整いましたが、今はメインメニューで何かしたいと思います。ゲーム全体がDOSであることに注意してください。DOSプログラムのメインメニューを作成する

これは私が達成したいものです。

は次のようにメインメニューを作成しますが、しばらく使用してループを切り替えます。スイッチループは

cout << "[1] Play\n"; 
cout << "[2] Credits\n"; 
cout << "[3] Exit\n"; 

すぐ、テキストアドベンチャーゲームがあまりにもある(ループ上にCOUTであろう)は、以下のオプションを持つ場合(ケース1 :,ケース2 :,ケース3 :,など)を含むであろう入れ子のために読むのがますます困難になるので、このループに入れるだけで大​​丈夫です。ゲーム中にもループがありますが、whileとswitchループもあります。私が今したいことは、次のようなものですが、私はこれをどうやって行うのか分かりません。私は擬似コードでそれを書き込みます:

*open file game_name.cpp* 
If player presses 1 
    Insert actual_game.cpp 
    Play game until over or user presses escape 
else if player presses 2 
    Show credits 
    Return to main menu 
else if player presses 3 
    Terminate the session 
else 
    Shows the player that an invalid option has been chosen 

ポイントは、私が代わりに1つのファイル(actual_game.cpp)ですべてのコードを置くの複数の.cppファイルを含めたいということです。これを行う最善の方法は何ですか?

+0

の代わりに " DOS "という言葉は"コンソール "です。 Windows 2000以降では、DOSはWindowsの世界ではもはや存在しません。 – Dialecticus

+0

私はそれを念頭に置いておきます。 :) – DutchLearner

答えて

2

この質問と答えはあなたに非常に似て、見てみましょう:

Link

は何かがそこに不明であるなら、私に教えてください。要点は、コードファイルを挿入しないことです。プログラムをコンパイルした後はコードファイルは存在しません。各条件に応じて関数を呼び出すと、個々の関数が関連するロジックを実行します。各機能がゲーム内の特定の仕事を実行する関数のセットにゲームを編成する必要があります(ゲーム内のさまざまな場所を扱うもっと特殊な関数を呼び出す可能性があります)

例を示します。

// In GameFunctions.h: 
bool StartGame(); 
bool ShowCredits(); 
bool ExitGame(); 

// Add all function definitions here or create multiple header files to hold 
// groups of function definitions. Include these headers files in your CPP files. 

// In GameFunctions.cpp: 
#include <iostream> 
#include "GameFunctions.h" 

using namespace std; 

int main (int argc, const char* argv[]) 
{ 
    int nKeyPress; // this holds the key pressed by the user 
    bool bContinue = true; 

    while (bContinue) 
    { 
     ... // read a key here into nKeyPress 

     switch (nKeyPress) 
     { 
      case 1: 
       bContinue = StartGame(); 
       break; 

      case 2: 
       bContinue = ShowCredits(); 
       break; 

      case 3: 
       bContinue = ExitGame(); 
       break; 
     } 
    } 
} 

... 

bool StartGame() 
{ 
    // initialize your game here 
    InitGame(); 

    // Show the first room of your game and start waiting for 
    // user input (the user making various selections in the game). 
    // You'll invoke other rooms from this function as you respond to 
    // user selections. 
    ShowRoom (1); 

    return (true); 
} 

bool ShowCredits() 
{ 
    ... // show credits here 

    return (true); 
} 

bool ExitGame() 
{ 
    // do cleanup (if you have any to do) here 
    return (false); 
} 

また、論理グループにグループへ.cpp.hファイルを複数にあなたの機能をあなたのゲームのコードを壊すことができます。クラスを使用しなくても、あなたのゲームが非常に短い場合を除いて、すべてのコードを単一の.cppファイルにまとめるのは悪い考えです。したがって、複数の.cppファイルを作成することができます(たとえば、各部屋に1つずつ)。各.cppファイルには、ゲーム内の特定の部屋を処理するコードが格納されます。ヘッダーファイルに関数定義が必要で、使用する特定の.cppファイルにすべてのヘッダーファイルを含める必要があります。 (すべての.cppにすべての.hを含める必要はありませんが、単一の.cppで使用する予定の定義を含むヘッダーが必要です)

最後にゲームはいくつかの.cppファイルと.hファイルで構成され、いくつかの機能を持っています:いくつかはユーザーの入力を読み込み、いくつかは画面にメッセージを表示します。いくつかはユーザーのスコアを記録します。それを入力してください。

標準のCまたはC++ライブラリのヘッダファイルが必要になるでしょう。

+0

これは私にとっては現時点では理解が難しいほど複雑です。私は学習し、あなたがクラス、ボイドなどを使用する方法を知っている後の状態で私を送るリンクを使用します。とにかくおかげで。 :) – DutchLearner

+0

ああ、クラスによって混乱しないでください - 単純な関数を使うだけで同じ効果を得ることができます。私は答えにいくつかの詳細を追加します。クラスは同じことをやるためのより組織的な方法です。 – xxbbcc

+0

申し訳ありません、ありがとうございます。私はすぐに更新された答えを確認します。 :) – DutchLearner

1

C++コンパイラが関数を使用するには、関数全体の関数ではなく関数のシグネチャを知るだけでよい。すべての.cppファイルがコンパイルされた後、リンカは関数全体について知っていなければならず、すべての部分をアプリケーションにリンクすることができます。関数の署名(「関数宣言」とも呼ばれる)は通常ヘッダファイル(example.h)に格納され、実際の関数(関数定義とも呼ばれます)は通常ソースファイル(example.cpp)に格納されます。 1つで。CPPあなたはちょうどあなたがどこその関数の宣言(の#include「example.h」)を探すようにコンパイラに伝える場所の行を含める追加し、別の.cppファイルで定義された関数を呼び出すことができますファイル:

----------------- 
Main project file 
----------------- 
#include "actual_game.h" 
#include "credits.h" 

int main() 
{ 
    for (;;) 
    { 
    PrintMainMenu(); 

    int choice = GetUsersChoice(); 

    if (choice == CHOICE_PLAY_GAME) 
     PlayTheGame(); // This function is found in files actual_game.h and .cpp 
    else if (choice == CHOICE_SHOW_CREDITS) 
     ShowCredits(); // This function is found in files credits.h and .cpp 
    else if (choice == CHOICE_TERMINATE) 
     break; 
    else 
     ShowInvalidOptionMessage(); 
    } 

    return 0; 
} 

------------------ 
File actual_game.h 
------------------ 
void PlayTheGame(); 

-------------------- 
File actual_game.cpp 
-------------------- 
#include "actual_game.h" 

void PlayTheGame() 
{ 
    // The body of the function. If this function is very large and difficult to 
    // read by humans then divide it somehow to several other functions, that can 
    // be put in several files, and so easier to handle and maintain 
} 
関連する問題