我还是比较新的编程。我正在使用SDL进行游戏,我发现自己想知道我在哪里使用坏习惯。
例如,我有一个名为titleScreen()的函数,用户可以决定输入哪种游戏模式。
我可以从0-3返回一个值,然后通过if / else / else / else语句处理它,以决定它们选择的模式。
或
我可以返回一个字符串,例如“STORYMODE”,“FREEPLAY”,“TUTORIAL”或“QUIT”,并使用它来决定哪种模式。
我喜欢第二种模式,因为它消除了试图弄清楚选择了哪种模式的初始混淆,但我有一种感觉,在我的脑海中这样做是有问题的。
在我的情况下,返回值的最佳方法是什么?
答案 0 :(得分:8)
在这种情况下,您应该使用列出所有状态的enum
来实现可读性,而不会影响性能。
例如:
enum mode {
STORYMODE,
FREEPLAY,
TUTORIAL,
QUIT
}
答案 1 :(得分:2)
你应该使用枚举,这实际上是int但更具可读性。 所以我会创建:
enum GameMode { STORYMODE, FREEPLAY, TUTORIAL, QUIT };
并且有方法返回类型GameMode。
编辑2:
如果你有每个游戏模式的按钮,只需返回枚举或单击按钮时使用enum参数调用其他方法。就像你现在用字符串一样。
答案 2 :(得分: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());
}