【水浒传:第三篇】AI江湖 —项目详细设计(二)
·
7. 战斗系统设计

7.1 回合制战斗流程
7.2 5种战斗技能
| 技能 | 代码 | 消耗 | 效果 | 冷却 |
|---|---|---|---|---|
| 猛虎一击 | skill_01 | MP 20 | ATK × 2.0 | 2回合 |
| 飞燕回旋 | skill_02 | MP 15 | ATK × 1.0 + 闪避+15% | 3回合 |
| 铁壁防御 | skill_03 | MP 25 | 防御+50%,持续2回合 | 4回合 |
| 奔雷斩 | skill_04 | MP 30 | ATK × 1.8 + 降敌防10% | 3回合 |
| 回天术 | skill_05 | MP 35 | 恢复 30% + INT×0.5 HP | 5回合 |
8. AI 集成设计
8.1 AI 调用架构
8.2 AI 应用场景
| 场景 | 调用时机 | Prompt 设计 |
|---|---|---|
| 场景叙事 | look/探索/移动 | 系统prompt + location描述 + 天气时间 |
| NPC对话 | talk_npc | NPC性格标签 + backStory + 对话历史 |
| 战斗叙事 | attack/技能 | 战斗状态 + 伤害数值 + 文学风格 |
| 自由文本 | 任何未识别指令 | 全上下文 + 玩家状态 + 开放回答 |
| 事件叙事 | 随机事件触发 | 事件模板 + 玩家属性 |
| 奇遇叙事 | encounter | 奇遇类型 + 随机元素 |
9. 技能子系统架构
9.1 43个技能子系统总览
9.2 技能子系统通用模板
每个技能子系统遵循统一的 TypeScript 定义模板:
// 系统定义
export const {PREFIX}_SystemDef = {
type: '{prefix}',
name: '技能名称',
description: '描述',
emoji: '🎣'
};
// 等级物品 (10级)
export const {PREFIX}_ITEMS = [
{ id: '{prefix}_1', name: '入门物品', level: 1, ... },
// ... up to level 10
];
// 排名称号 (10级)
export const {PREFIX}_RANK_TITLES = [
'学徒', '..., '天下第一仙'
];
// 冷却时间
export const SKILL_COOLDOWNS = { '{prefix}': 24 };
// 等级存储
export const player{PREFIX}Level = new Map<string, number>();
export const player{PREFIX}Uses = new Map<string, number>();
export const player{PREFIX}Cooldowns = new Map<string, number>();
9.3 技能系统处理流程
10. 任务系统设计
10.1 任务类型层次
10.2 任务生命周期
11. 世界地图与移动设计
11.1 地图连接拓扑图
11.2 移动验证逻辑
// 方向映射表
const dirMap = {
'北': 'north', 'north': 'north',
'南': 'south', 'south': 'south',
'东': 'east', 'east': 'east',
'西': 'west', 'west': 'west',
'上': 'up', 'up': 'up',
'下': 'down', 'down': 'down',
};
// 移动验证
async function canMove(currentLocCode, direction) {
const loc = await db.location.findUnique({ where: { code: currentLocCode } });
const field = dirMap[direction];
const targetCode = loc[field]; // 从Location记录读取方向字段
return targetCode
? { success: true, targetCode }
: { success: false, message: '此方向没有通路。' };
}
12. 数据流与状态管理
12.1 双层数据存储
12.2 前端响应处理
13. 部署架构
13.1 项目构建流程
13.2 运行环境
| 组件 | 技术 | 版本 |
|---|---|---|
| 运行时 | Bun / Node.js | Bun 1.3+ |
| Web 服务器 | Caddy | — |
| 数据库 | SQLite (文件) | db/custom.db |
| AI 模型 | OpenAI 兼容 API | 可配置 |
| 反向代理 | Caddyfile | 端口转发 |
13.3 项目文件结构
project/
├── src/
│ ├── app/
│ │ ├── api/game/
│ │ │ ├── action/route.ts ← 核心 (~23,440行)
│ │ │ ├── achievements/route.ts
│ │ │ ├── create/route.ts
│ │ │ ├── map/route.ts
│ │ │ └── stats/route.ts
│ │ ├── globals.css ← 主题 + 20+ 动画
│ │ ├── layout.tsx
│ │ └── page.tsx ← 主页面 (~6,000行)
│ ├── components/ui/ ← shadcn/ui 组件库
│ ├── hooks/ ← use-mobile, use-toast
│ └── lib/
│ ├── ai.ts ← AI 接口层 (112行)
│ ├── db.ts ← Prisma 客户端
│ ├── game/engine.ts ← 游戏引擎 (~9,082行)
│ ├── model-config.ts
│ ├── seed.ts ← 种子数据
│ └── utils.ts
├── prisma/
│ └── schema.prisma ← 数据模型 (222行)
├── db/
│ └── custom.db ← SQLite 数据库
├── public/ ← 静态资源
├── agent-ctx/ ← 开发日志
├── package.json
├── Caddyfile
├── next.config.ts
├── tailwind.config.ts
└── tsconfig.json
附录 A: 系统规模统计
| 维度 | 数量 |
|---|---|
| 总代码行数 | ~62,000+ |
| 数据库表 | 9 张 |
| API 端点 | 7 个 |
| 指令类型 | 190+ 种 |
| 技能子系统 | 43 个(双字母前缀) |
| 全局游戏系统 | 70+ 个 |
| NPC | 13 位水浒好汉 |
| 地点 | 17 个 |
| 物品 | 19 种基础物品 + 数百种子系统物品 |
| 任务 | 7 个基础 + 动态生成 |
| 成就 | 16 个 |
| 天赋 | 12 个 |
| 前端 useState | 60+ 个 |
| CSS 动画 | 20+ 个 @keyframes |
| 前端面板/Overlay | 30+ 个 |
附录 B: 关键设计决策
- 自然语言优先:所有命令支持中文自然语言输入,降低学习门槛
- AI 双重回退:自定义 LLM → 内置 SDK,保证服务可用性
- JSON 字段存储:复杂嵌套数据(技能等级、宠物、帮派)使用 JSON 序列化存储,保持 schema 简洁
- 内存+数据库双层:高频读写数据(冷却时间、临时事件)使用内存 Map,低频持久数据使用 SQLite
- 指令解析器前置:在 API 层优先进行规则匹配,未匹配的才交给 AI 自由处理,平衡准确性和灵活性
- 组件即页面:整个游戏为一个 page.tsx 组件,通过状态切换控制界面,避免路由跳转开销
- 子系统模板化:技能子系统遵循统一的 TypeScript 定义模板,便于批量扩展
本文档基于对项目源代码的完整分析生成,涵盖架构设计、数据模型、核心流程、前端组件等全部设计层面。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)