Skip to content

GHSLAB/flc-ca-agent

Repository files navigation

FLC CA Agent (Conway's Game of Life)

这是一个基于 Dashfeffery-leaflet-components (FLC) 构建的交互式元胞自动机(Cellular Automata)Web 应用。本项目主要实现了经典的康威生命游戏 (Conway's Game of Life),并在 Leaflet 地图上提供了直观的网格可视化与动态控制能力。

🎬 演示视频

✨ 核心特性

  • 交互式地图网格:基于 LeafletMap 渲染,支持无缝缩放、拖拽与点击交互。
  • 自定义网格参数:可通过滑块自由调节网格的行数(Rows)和列数(Columns)。
  • 随机生成算法:支持自定义随机种子随机密度,一键生成初始生命图样。
  • 自动演化引擎:内置基于 agentpy 的环形 (Torus) 生命周期计算引擎,精确遵循 Moore 邻居规则。
  • 动态定时器控制:支持自定义每次迭代的时间间隔,可随时开始或暂停模拟。
  • 状态智能同步:配备抽屉式开发调试面板,实时同步展示地图对应的 0/1 原始矩阵数据,方便调试与观测。
  • 智能终止检测:当勾选“自动停止”时,若地图上的细胞全部死亡,将自动停止定时器并弹窗提示演化步数。
  • 本地缓存机制:支持使用 dcc.Store 在本地缓存地图视角状态与侧边栏控制面板参数,刷新不丢失。
  • 高可维护性架构:UI 布局组件化拆分,并配备统一的全局配置模块(configs.py),易于扩展和二次开发。

🛠️ 技术栈

  • Python >= 3.12
  • Dash / dcc / html:构建核心 Web 交互界面与回调路由。
  • feffery-antd-components (FAC):提供现代化、高颜值的控制面板与表单组件。
  • feffery-leaflet-components (FLC):驱动底层的高性能交互式 2D 地图渲染。
  • agentpy:强大的 Python 代理模型框架,驱动底层元胞自动机状态计算。

📦 安装与运行

1. 克隆项目

git clone <repository_url>
cd flc-ca-agent

2. 安装依赖

🌟 推荐:使用 uv (极速安装)

本项目推荐使用 uv 进行快速的环境管理与依赖安装。

如果您已安装 uv,只需在项目根目录下运行:

uv sync

这将会自动解析 pyproject.toml,创建虚拟环境(.venv),并极速安装所有必要的依赖。

如果尚未安装 uv,可以通过以下命令快速安装:

  • Windows (PowerShell): irm https://astral.sh/uv/install.ps1 | iex
  • macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh

方案二:使用 Conda

# 1. 创建环境 (Python >= 3.12)
conda create -n flc-ca python=3.12
# 2. 激活环境
conda activate flc-ca
# 3. 安装依赖 (读取 pyproject.toml)
pip install .

方案三:使用 venv (标准 Python 虚拟环境)

# 1. 创建虚拟环境
python -m venv .venv
# 2. 激活虚拟环境
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
# 3. 安装依赖
pip install .

3. 启动应用

如果您使用 uv

uv run main.py

如果您使用 Condavenv(请确保环境已激活):

python main.py

启动后,在浏览器中访问默认地址:http://127.0.0.1:8050 即可开始体验。

🎮 玩法指南

  1. 设置画布:在左侧面板滑动控制杆,设置您期望的网格大小 (例如 20x20)。
  2. 初始化生命
    • 方式一:直接在地图上点击透明方块,手动点亮“存活细胞”(红色)。
    • 方式二:在左侧设定“随机密度”并点击生成网格,系统将批量生成随机初始态。
  3. 控制演化
    • 设置您期望的演化“时间间隔”(例如 0.5s)。
    • 点击开始模拟,观察生命的繁衍与消亡。
    • 随时点击暂停模拟中断演化,并可再次手动点击地图更改当前细胞状态。
  4. 复位:点击右上角“重置地图状态”或左侧“重置参数”恢复到最初视图。

📁 项目结构

flc-ca-agent/
├── assets/                  # 存放 CSS 样式文件
│   └── style.css            # 定义 hover 与基础样式
├── components/              # 拆分的 UI 组件渲染逻辑
│   ├── axes.py              # 坐标轴与原点绘制
│   ├── grid.py              # 网格矩阵绘制
│   ├── panel.py             # 左侧参数控制面板
│   ├── map_panel.py         # 核心交互地图面板
│   ├── debug_panel.py       # 右侧抽屉式开发调试面板
│   └── __init__.py          # 组件导出统一入口
├── callbacks/               # Dash 回调路由注册
│   ├── grid_callbacks.py    # 核心网格生成、交互、步数状态计算
│   ├── map_callbacks.py     # 地图视角缓存与恢复
│   ├── panel_callbacks.py   # 左侧面板参数同步与重置
│   ├── simulation_callbacks.py # 启停定时器与自动停止弹窗
│   └── __init__.py          # 回调注册统一入口
├── core/                    # 核心算法引擎
│   └── game_of_life.py      # 基于 agentpy 的生命游戏模型实现
├── configs.py               # 全局参数与状态配置
└── main.py                  # 应用程序入口,组合 Layout 组件

📜 许可证

MIT License

About

基于 Dash 和 feffery-leaflet-components (FLC) 构建的交互式元胞自动机(Cellular Automata)Web 应用

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors