2

私はまだプログラミングに比較的慣れていません。私は SDL を使用してゲームに取り組んでいますが、どこで悪い習慣を使用しているのか疑問に思っています。

たとえば、ユーザーがゲームのどのモードに入るかを決定する titleScreen() という関数があります。

0 から 3 の値を返し、それを if/else/else/else ステートメントで処理して、選択したモードを決定できます。

また

「STORYMODE」、「FREEPLAY」、「TUTORIAL」、「QUIT」などの文字列を返し、それを使用してモードを決定できます。

どのモードが選択されたかを理解しようとする最初の混乱をなくすため、2番目のモードが好きですが、頭の後ろでそれを行うには問題があると感じています。

私の状況では、値を返す最良の方法は何ですか?

4

3 に答える 3

8

この場合、enumすべての状態を一覧表示して、パフォーマンスに影響を与えずに読みやすくする必要があります。例えば:

enum  mode {
    STORYMODE,
    FREEPLAY,
    TUTORIAL,
    QUIT
}
于 2013-04-20T06:54:26.223 に答える
2

そのためには列挙型を使用する必要があります。これは実際には int ですが、読みやすいだけです。だから私は作成します:

enum GameMode { STORYMODE, FREEPLAY, TUTORIAL, QUIT };

メソッドの戻り値の型を GameMode にします。

編集2:

すべてのゲームモードにボタンがある場合は、ボタンがクリックされたときに列挙型を返すか、列挙型パラメーターを使用して他のメソッドを呼び出すだけです。文字列で現在行っているのと同じ方法です。

于 2013-04-20T06:57:46.233 に答える
0

ゲームオブジェクトへの共有ポインタを返すのはどうですか? 以下は、開始するための疑似コードと、返されたオブジェクトで呼び出すtitleScreen必要のある呼び出しです。operator()

class GameI {
public:
    virtual ~GameI() {};
    void operator() = 0;
}

typedef std::shared_ptr<GameI> SharedGame;

class GameStory {
public:
    void operator();
}

void GameStory::operator()
{
    ...
}

SharedGame titleScreen()
{
    ...
    return SharedGame(new GameStory());
}
于 2013-04-20T11:05:31.443 に答える