2

我对编程还是比较陌生。我正在使用 SDL 开发游戏,我发现自己想知道我在哪里使用了坏习惯。

例如,我有一个名为 titleScreen() 的函数,用户可以在其中决定进入哪种游戏模式。

我可以返回一个 0-3 的值,然后通过 if/else/else/else 语句对其进行处理,以决定他们选择的模式。

或者

我可以返回一个字符串,例如“STORYMODE”、“FREEPLAY”、“TUTORIAL”或“QUIT”,并使用它来决定哪种模式。

我喜欢第二种模式,因为它消除了试图弄清楚选择哪种模式时的最初困惑,但我有一种感觉,这样做会有问题。

在我的情况下,返回值的最佳方法是什么?

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:

如果每个游戏模式都有按钮,只需在单击按钮时返回 enum 或使用 enum 参数调用其他方法。与您现在使用字符串的方式相同。

于 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 回答