# Life_Game **Repository Path**: Conca_xu/Life_Game ## Basic Information - **Project Name**: Life_Game - **Description**: 生命游戏 - **Primary Language**: C - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-15 - **Last Updated**: 2026-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 康威生命游戏 一个基于C语言开发的康威生命游戏应用程序,具备模式识别、自动演化和手动操作功能。 ## 功能特性 ### 核心功能 - ✅ 完整的康威生命游戏规则实现 - ✅ 自动演化机制 - ✅ 模式识别系统(稳定结构和振荡器) - ✅ AI自动演化模式 - ✅ 用户手动操作模式 - ✅ 图形化用户界面(SDL2) - ✅ 预设模式加载 - ✅ 模式保存/加载功能 ### 游戏规则 康威生命游戏遵循以下规则: 1. **存活规则**:活细胞有2或3个邻居时存活,否则死亡 2. **繁殖规则**:死细胞恰好有3个邻居时诞生新细胞 3. **边界处理**:使用环绕边界(周期性边界条件) ### 模式识别 程序能够自动识别两种模式: - **稳定结构**:在演化过程中保持形态不变的细胞模式 - **振荡器**:以固定周期(2-10)重复变化的细胞模式 ## 编译说明 ### 前置要求 - C编译器(GCC或Clang) - SDL2开发库 ### Windows系统 1. 安装SDL2: - 下载SDL2开发库:https://www.libsdl.org/download-2.0.php - 解压到本地目录 - 将SDL2的include和lib目录添加到编译路径 2. 使用MinGW编译: ```bash gcc -Wall -Wextra -std=c11 -O2 main.c game.c ui.c file_io.c -o life_game.exe -lSDL2 -I/path/to/SDL2/include -L/path/to/SDL2/lib ``` 3. 或使用提供的Makefile(需要配置SDL2路径): ```bash make windows ``` ### Linux系统 1. 安装SDL2开发库: ```bash # Ubuntu/Debian sudo apt-get install libsdl2-dev # Fedora sudo dnf install SDL2-devel # Arch Linux sudo pacman -S sdl2 ``` 2. 编译: ```bash make ``` 3. 运行: ```bash ./life_game ``` ### macOS系统 1. 安装SDL2: ```bash brew install sdl2 ``` 2. 编译: ```bash make ``` 3. 运行: ```bash ./life_game ``` ## 用户操作指南 ### 启动程序 ```bash ./life_game [预设模式ID] ``` 预设模式ID: - 0: 滑翔机(Glider) - 1: 方块(Block,稳定结构) - 2: 灯塔(Beacon,振荡器) - 3: 蟾蜍(Toad,振荡器) - 4: 闪烁器(Blinker,振荡器) ### 界面说明 #### 游戏网格区域(左侧) - 显示50x50的细胞网格 - 绿色方块表示活细胞 - 黄色边框标记稳定结构 - 紫色边框标记振荡器 #### 信息面板(右侧) - 显示当前世代数 - 显示识别到的模式信息 - 显示当前模式(自动/手动) #### 控制按钮 - **开始/暂停**:控制自动演化的开始和暂停 - **重置**:清空网格,重新开始 - **模式切换**:在AI自动演化和手动操作模式之间切换 ### 键盘快捷键 - **空格键**:开始/暂停演化 - **R键**:重置游戏 - **M键**:切换操作模式 - **ESC键**:退出程序 ### 鼠标操作 - **左键点击网格**:在手动模式下添加/移除细胞 - **左键拖拽**:在手动模式下连续绘制细胞 - **左键点击按钮**:执行相应功能 ### 操作模式 #### AI自动演化模式 - 程序自动进行演化 - 实时识别并标记稳定结构和振荡器 - 适合观察复杂模式的演化过程 #### 用户手动操作模式 - 使用鼠标在网格上绘制初始配置 - 可以精确控制每个细胞的位置 - 绘制完成后可切换到自动模式观察演化 ## 性能说明 - **网格规模**:50x50(可调整GRID_WIDTH和GRID_HEIGHT) - **演化速度**:默认100毫秒/代(可在代码中调整) - **模式识别**:每代自动检测,不影响演化流畅性 - **内存占用**:约2MB(包含历史记录) ## 文件结构 ``` 生命机游戏/ ├── main.c # 主程序入口 ├── game.h # 游戏逻辑头文件 ├── game.c # 游戏逻辑实现 ├── ui.h # 用户界面头文件 ├── ui.c # 用户界面实现 ├── file_io.h # 文件I/O头文件 ├── file_io.c # 文件I/O实现 ├── Makefile # 编译配置 └── README.md # 本文档 ``` ## 技术实现 ### 数据结构 - 使用二维数组存储细胞状态 - 使用循环缓冲区保存历史状态(用于模式识别) - 模式信息存储在数组中 ### 算法优化 - 使用memcpy进行快速状态复制 - 模式识别采用简化算法,避免全网格比较 - 渲染使用SDL2硬件加速 ### 跨平台兼容 - 使用C11标准 - 仅依赖SDL2库(跨平台图形库) - 无平台特定代码 ## 已知限制 1. 文本显示需要SDL_ttf库支持,当前版本简化处理 2. 模式识别算法为简化版本,可能无法识别所有复杂模式 3. 文件保存格式为二进制格式,不可直接编辑 ## 未来改进方向 - [ ] 添加SDL_ttf支持,实现文本显示 - [ ] 改进模式识别算法,提高准确性 - [ ] 支持更大的网格规模 - [ ] 添加更多预设模式 - [ ] 实现模式导出为图片 - [ ] 添加演化速度滑块控制 ## 许可证 本项目为教育用途,可自由使用和修改。 ## 联系方式 如有问题或建议,欢迎反馈。