我目前正在使用SDL进行更高级的C编程,并且我在功能和整体程序结构方面遇到了很多麻烦。
我的主要问题是游戏需要大量的功能,大多数功能需要访问和操作。我不想创建一堆全局变量,但我也不想在每次访问函数时传递每个相关变量。
为了解决这个问题,我在程序的顶部创建了一个Game结构。这个结构包含所有需要传递的游戏变量,如纹理和位置。我在main函数的开头声明了该结构的一个实例,初始化了所有变量,然后继续将struct实例传递给不同的函数。
我的问题是:这是一个很好的解决方案吗?也许有更好,更传统的方式来处理这个问题;如果是的话,请解释。
这更像是一个理论问题,并且在我可以向您展示的任何特定代码中都没有基础。
答案 0 :(得分:0)
这有点好......但这是一个观点。首先,它看起来更好。其次,如果您非常聪明,可以将整个游戏结构转储到文件中以便以后加载。 (我不知道怎么做,但我知道可以做到)
此外,您应该在顶层声明结构:
fetch
/* main.c */
typedef struct{
int health;
int xp_level;
} game_t;
game_t GAME;
void takeHit(){
printf("The monster hits you!\n")
GAME.helath--;
}
main(){
GAME.health = 42;
GAME.xp_level = 0;
printf("Health: %d | Level: %d\n",GAME.health,GAME.xp_level);
takeHit();
printf("Health: %d | Level: %d\n",GAME.health,GAME.xp_level);
}
因此,您编写的任何函数都可以访问结构而无需传递它。
你也可以使用Ularn方法:
$ make main
$ ./main
Health: 42 | Level: 0
The monster hits you!
Health: 41 | Level: 0