我正在学习C ++,我正在尝试制作2D游戏,我想知道是否有任何方法可以将主要功能分成多个文件,这些文件代表游戏的不同状态(主菜单,游戏)。 。)以保持文件清晰可读。 我不认为我想使用其他函数,因为我想继续访问main函数中的所有变量。 另外,我认为#include不应该以这种方式使用,这就是我要问的原因。
有可能还是我做错了?拆分主要功能是一个坏主意吗?我是否应该使用带指针或引用的函数,即使我想使用许多变量?我真的不知道如何继续。
答案 0 :(得分:4)
我想说的是,你想要在如此大的代码片段中共享许多变量,你觉得代码应该被拆分成单独的源文件。这与在整个应用程序中通过各种函数访问许多全局变量没什么不同 - 这通常也不是一个好主意。
您应该考虑如何将数据组织到对象中,以逻辑方式将相关项组合在一起。
答案 1 :(得分:3)
当然,您可以将程序拆分为多个源文件。 这样做的方法通常是将它分成多个函数/类,然后将它们放在多个文件中。
您明确询问是否可以将main()
拆分为多个文件,问题也是"是"。您有多种选择:
滥用预处理器并将main块放在不同的文件中,然后#include
main()
内的块(虽然这是一个非常糟糕的主意)。
将main()
所做的工作拆分为类和函数,并将它们需要处理的数据传递给它们。如果共享状态的数量很大,您可以将其放入您传递的struct
- 或 - 更好,重新设计您的设计以减少对共享状态的依赖。 (您也可以使用全局变量,但这将是非常糟糕的解决方案)。
只需使用课程/功能并编写您的课程,这样您就不需要大量的共享变量..
答案 2 :(得分: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;
}
这只是一个例子。每个游戏的结构都不同。此外,最好用课程来完成。
底线 - 不要将所有代码保存在一个函数中。将大型函数分解为较小的函数,然后尽可能隔离。使用尽可能少的全局变量。 应该通过值传递简单数据类型(int,double ...)。其他所有内容(类,结构,字符串......)应该通过引用传递(最好是const)。 正如Jesper Juhl所提到的,大量变量应该组合成结构或类。 现在你根本不需要原始指针。只有在必要时才使用它们。有很多API仍然需要指针。