You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C语言遵循Betty风格开发贪吃蛇游戏,如何避免全局变量?

解决Betty规范下贪吃蛇的全局变量替代方案
  • 用结构体封装所有游戏状态
    把原来分散的全局变量(蛇的坐标、长度、食物位置、游戏运行状态等)打包成一个结构体,统一管理:
typedef struct {
    int snake_x[100];
    int snake_y[100];
    int snake_length;
    int food_x;
    int food_y;
    int game_running;
    // 其他游戏相关变量
} GameState;

之后所有需要操作游戏状态的函数,都通过传递这个结构体的指针来访问数据,比如:

void move_snake(GameState *state, int dir) {
    // 修改state中的蛇位置、长度等数据
}

这样既符合Betty的规范,又避免了零散传递多个参数的繁琐。

  • 替换头文件中的全局变量声明
    之前在头文件里声明全局变量的做法直接废弃,改成在公共头文件(比如game.h)里定义GameState结构体。各个源文件包含这个头文件后,在主函数中初始化一个GameState实例,再将其指针传递给各个模块的函数,实现状态共享。

  • 别被“传参数是不良实践”误导
    Betty禁止全局变量,本质是因为全局变量会让代码耦合度高、调试困难、可维护性差。而传递结构体指针是模块化C编程的标准操作:它清晰地标明了函数依赖的数据,让逻辑更透明,也更容易做单元测试。这不仅不是不良实践,反而比全局变量的写法更健壮。

  • 小提示:简化重复传参
    如果某几个函数都需要频繁访问GameState,可以把这些函数归类到同一个源文件中,用静态函数封装内部逻辑,但核心依然是通过指针传递状态,绝对不要用全局变量绕开规范。

内容的提问来源于stack exchange,提问作者Johnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:12:36