Skip to content

rushairer/SDL3GameDemo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Snake 游戏

这是一个使用 SDL3 实现的经典贪吃蛇游戏。游戏设计注重内存效率和性能优化,提供了流畅的游戏体验。

功能特性

  • 经典的贪吃蛇玩法
  • 流畅的图形渲染
  • 碰撞检测和边界处理
  • 食物随机生成
  • 蛇身自动增长
  • 游戏重置功能

技术实现

核心数据结构

  1. SnakeContext: 蛇的状态管理

    • 高效的位域存储:使用3位表示一个格子状态,显著节省内存
      • 0: 空单元格
      • 1-4: 蛇身体(分别表示右、上、左、下四个方向)
      • 5: 食物
    • 位置追踪系统
      • 记录蛇头和蛇尾的精确坐标
      • 通过 inhibit_tail_step 控制蛇身增长
    • 方向控制系统
      • next_dir 存储下一步移动方向
      • 防止180度转向的逻辑控制
  2. AppState: 游戏状态管理

    • SDL图形系统集成
      • window: 游戏窗口对象
      • renderer: 渲染器对象,负责图形绘制
    • 时间控制系统
      • last_step: 记录上次更新时间
      • 固定时间步长(125ms)保证游戏流畅性

蛇的运动轨迹系统

  1. 轨迹记录机制

    • 位域存储系统
      • 每个格子使用3位存储状态和方向信息
      • 1-4位表示蛇身体的四个移动方向
      • 通过位操作实现高效的状态读写
    • 蛇头轨迹更新
      • 保存前一个位置 (prev_xpos, prev_ypos)
      • 根据 next_dir 更新蛇头新位置
      • 在移动路径上记录移动方向
  2. 蛇身跟随系统

    • 方向信息传递
      • 每个蛇身节点记录其移动方向
      • 后续节点根据前方节点的方向信息移动
    • 状态更新流程
      • 读取当前格子的方向状态
      • 根据方向状态更新位置
      • 使用 wrap_around_ 处理边界情况
  3. 尾部移动控制

    • 增长机制
      • inhibit_tail_step 计数器控制尾部移动
      • 吃到食物时增加计数器值
      • 计数器为零时才移动尾部
    • 实现原理
      • 读取尾部格子的方向信息
      • 根据方向信息计算新的尾部位置
      • 清除原尾部位置的状态

核心功能实现

  1. 蛇的移动渲染系统

    • 双重缓冲渲染
      • 使用 SDL_RenderClear 清空上一帧
      • SDL_RenderFillRect 绘制游戏元素
      • SDL_RenderPresent 更新显示
    • 差异化渲染
      • 蛇身:绿色 (RGB: 0,128,0)
      • 蛇头:黄色 (RGB: 255,255,0)
      • 食物:蓝色 (RGB: 80,80,255)
  2. 方向控制系统

    • 键盘事件响应
      • 方向键控制移动方向
      • R键重置游戏
      • ESC/Q键退出
    • 智能方向判定
      • 检测非法转向(180度转弯)
      • 通过位域存储实现高效的方向判定
  3. 移动与碰撞系统

    • 蛇的移动逻辑
      • 头部移动:根据方向更新坐标
      • 尾部跟随:根据存储的方向信息移动
      • 穿墙实现:wrap_around_ 函数处理边界
    • 碰撞检测
      • 使用位域快速检测格子状态
      • 处理自身碰撞和食物收集
      • 通过 inhibit_tail_step 实现蛇身增长
  4. 性能优化

    • 内存优化
      • 使用位域压缩存储,每个格子仅占3位
      • 高效的内存访问模式
    • 渲染优化
      • 固定时间步长更新(125ms)
      • 仅渲染发生变化的部分

控制说明

  • 方向键:控制蛇的移动方向
  • R 键:重置游戏
  • ESC/Q 键:退出游戏

编译和运行

项目使用 PlatformIO 构建系统,依赖 SDL3 库。

环境要求

  • PlatformIO
  • SDL3 开发库
  • C++ 编译器

构建步骤

  1. 克隆项目
  2. 安装依赖
  3. 使用 PlatformIO 编译和运行
pio run -t upload

技术亮点

  1. 高效的内存管理

    • 使用位域存储网格状态
    • 优化的数据结构设计
  2. 流畅的游戏体验

    • 固定时间步长更新
    • 平滑的图形渲染
  3. 可维护的代码结构

    • 清晰的模块划分
    • 良好的代码注释

许可证

本代码属于公共领域,可以自由使用于任何目的。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages