当前位置:首页>python>用现代 Python 复刻 CakeGame (2/5) :架构设计与核心决策

用现代 Python 复刻 CakeGame (2/5) :架构设计与核心决策

  • 2026-10-11 07:23:29
用现代 Python 复刻 CakeGame (2/5) :架构设计与核心决策

字数 1194,阅读大约需 6 分钟

用现代 Python 复刻 CakeGame:架构设计与核心决策

系列文章第 2 篇 / 共 5 篇基于 CakeGame (CGPD) 20220312 易语言源码分析


一、整体架构

┌─────────────────────────────────────────────────────────────┐│                    CakeGame2026bot                           │├──────────────────────┬──────────────────┬───────────────────┤│   消息网关层          │   游戏引擎层      │   数据持久层       ││  (NoneBot2)          │  (core/)          │  (SQLite3)        │├──────────────────────┼──────────────────┼───────────────────┤│ • OneBot V11 接收    │ • 指令系统        │ • 30+ 数据表       ││ • 消息解析           │ • 战斗/伤害计算   │ • 数据库迁移       ││ • 速率限制           │ • 背包/物品       │ • 自动备份         ││ • 群屏蔽/接收        │ • 地图/移动       │ • 日志存储         │├──────────────────────┼──────────────────┼───────────────────┤│   指令层             │   图片生成层      │   编辑器层         ││  (plugins/commands/) │  (core/presentation) │ (Web UI)       │├──────────────────────┼──────────────────┼───────────────────┤│ • 用户指令           │ • 变量替换        │ • 数据管理         ││ • 战斗指令           │ • 文本→图片       │ • 版本迁移         ││ • 系统指令           │ • 消息模板        │ • 配置管理         │└──────────────────────┴──────────────────┴───────────────────┘

二、目录结构

CakeGame2026bot/├── bot.py                     # NoneBot2 入口├── pyproject.toml             # 项目依赖├── .env.example               # 环境变量模板├── 启动.bat                   # Windows 启动脚本│├── core/                      # 核心引擎(框架无关,可独立测试)│   ├── models.py              # SQLAlchemy ORM(30+ 表)│   ├── database.py            # 数据库连接、迁移、备份│   ├── config.py              # 配置管理│   ├── constants.py           # 常量定义│   ├── user.py                # 用户系统│   ├── inventory.py           # 背包/物品系统│   ├── combat.py              # 战斗系统│   ├── skill.py               # 技能系统│   ├── map.py                 # 地图系统│   ├── quest.py               # 任务系统│   ├── union.py               # 公会系统│   ├── team.py                # 队伍系统│   ├── synthesis.py           # 合成系统│   ├── enhance.py             # 装备强化│   ├── decomp.py              # 物品分解│   ├── shop.py                # 商店系统│   ├── monster.py             # 怪物模型管理│   ├── presentation.py        # 消息格式化、变量替换、图片生成│   └── event.py               # 插件事件广播│├── plugins/│   ├── __init__.py            # 事件预处理器│   ├── common.py              # core/* 模块桥接│   ├── game.py                # on_command 注册入口│   └── commands/              # 指令 handler│       ├── user.py            # 喊话、注册、签到、修改昵称、查看角色│       ├── inventory.py       # 查看背包、使用物品、丢弃物品、背包筛选│       ├── combat.py          # 锁定目标、攻击、自动攻击、释放技能│       ├── map.py             # 查看地图、进入地图、位置信息│       ├── quest.py           # 我的任务、任务信息、领取、提交、放弃│       ├── union.py           # 创建公会、公会列表、解散、退出、成员│       ├── team.py            # 创建队伍、加入队伍│       ├── synthesis.py       # 合成物品、查看合成、合成列表│       ├── enhance.py         # 选择强化、确认强化│       ├── equip.py           # 卸下装备、查看装备│       ├── occupation.py      # 转换职业、职业列表、查看职业│       └── system.py          # 帮助列表、查看帮助、JScript、自动查看│├── tests/                     # Mock 测试├── tools/                     # 工具├── data/                      # 数据目录└── admin/                     # Web 管理后台

三、核心设计决策

决策 1:core/plugins 分离

理由:团队已有 NoneBot2 项目(位面9066)验证了此架构的价值。core/ 不依赖 NoneBot,可直接用 mock 测试。plugins/commands/ 只做"翻译"——把 QQ 消息转成函数调用,再把结果转回消息。

数据流:

QQ 消息 → 消息网关 → 指令匹配 → core/ 游戏逻辑 → 消息处理 → 回复发送

决策 2:SQLite3 而非 MySQL

理由:

  • • SRS 明确要求兼容原版 SQLite 数据库文件
  • • 单实例部署,无需跨群数据交互(初期)
  • • 零部署成本,无需额外数据库服务
  • • ORM 层已抽象,未来可迁移到 MySQL

决策 3:Pillow 替代 GDI+

理由:

  • • GDI+ 是 Windows 专属,Pillow 跨平台
  • • 原版图片绘制逻辑可直接用 Pillow 复刻
  • • 输出 PNG 字节集,通过 OneBot 发送

决策 4:Web UI 替代 LibExDui

理由:

  • • LibExDui 是易语言专属 UI 框架,无法移植
  • • Web UI 跨平台、可远程访问
  • • 编辑器功能用 FastAPI + HTML 实现更简洁

决策 5:纯文本优先,图片可选

理由:

  • • 原版强制图片输出,但现代 QQ 群更接受纯文本
  • • 配置项 image_mode: "text" | "image" 控制输出格式
  • • 图片模式用 Pillow 生成,文本模式直接发送 Markdown 格式

四、与原版架构对比

维度
原版 CakeGame
CakeGame2026bot
编程语言
易语言
Python 3.13
运行时
单进程 DLL 调用
NoneBot2 异步框架
数据库
SQLite3(3 个文件)
SQLite3(兼容原版)
图形绘制
GDI+(Windows 专属)
Pillow(跨平台)
UI 框架
LibExDui(桌面)
Web UI(FastAPI)
QQ 对接
OnoQQ Pro
NoneBot2 + OneBot 11
插件系统
DLL(C++)
JavaScript 脚本
测试
无
Mock 测试(强制)
部署
Windows 专属
跨平台
并发
64 线程
异步 I/O

系列文章第 2 篇完。下篇将介绍 Phase 实施规划。

最新文章

随机文章