我目前正在使用SDL进行一些更高级的C编程,并且我在函数和总体程序结构方面遇到了很多麻烦。使用Structs在C游戏中保存所有变量?
我的主要问题是游戏需要大量功能需要访问和操作的变量。我不想创建一堆全局变量,但我也不想在每次访问函数时传递每个相关变量。
为了解决这个问题,我在程序的顶部创建了一个Game结构体。这个结构保存了所有需要像纹理和位置一样传递的游戏变量。我在main函数的开头声明了该结构的一个实例,初始化其中的所有变量,然后继续将结构实例传递给不同的函数。
我的问题是:这是一个很好的解决方案吗?也许有更好,更传统的方法来处理这个问题;如果是这样,请解释。
这更多的是一个理论问题,并没有任何特定的代码,我可以告诉你的基础。
也许这可能是最好的softwareengineering.stackexchange.com问,如果没有代码来显示。 – GrandMasterFlush
它比所有变量都是全局的要好 - 现在例如你可以在同一个过程中运行两个游戏! - 但不是太多。你基本上从没有真正的程序结构过渡到[God object anti-pattern](https://en.wikipedia.org/wiki/God_object)。 你正在做的观察是一个好的开始。你有的基本问题是可见性;如果你的所有代码都可以随时触及你所有的状态,那么你就会陷入一片混乱。确保你的代码可以访问它需要的东西,而仅仅这些是一个相当困难的工程挑战。 – Cubic
这是一个合理的方法。根据具体情况,主要选择是管理相关游戏资源集的函数集,您可以调用这些集来查找或更改值。它的优点在于,如果更改其中一个较低级别的依赖模块,则需要重新编译的代码更少。问题的严重程度取决于您直接嵌入主游戏结构中的信息量,以及隐藏在结构中不透明指针背后的多少信息。这在某种程度上控制了您必须重新编译所有内容的次数,而不是仅更改的部分。 –