# MCP驱动的AI智能角色扮演游戏

![游戏截图1](./images/7.png)

为了避免版权问题，我将resources文件夹放在了[百度网盘](https://pan.baidu.com/s/1YjWSZZnqLGqu3Zd-04TzDg?pwd=2xuy)；如果需要使用源代码的话，可以放在/MCPGame/MCPGame/resources目录下(提取码: 2xuy)

游戏的[百度网盘下载地址](https://pan.baidu.com/s/16Ul56DVMqDOQcN2GSYQUbw) 提取码: 3sje

## 项目简介

这是一个基于MCP（Model Context Protocol）架构的AI驱动角色扮演游戏，使用Node.js和Electron开发。游戏通过智能AI系统实现了动态世界观构建、NPC自主行为和丰富的剧情互动。

## 技术架构

- **MCP Server端** (`MCP_Server/`) - 游戏核心逻辑服务器
- **AI Client端** (`MCP_Client/`) - AI模型交互客户端  
- **用户界面端** (`MCPGame/`) - Electron桌面应用界面

## 核心功能

### AI智能游戏系统

- 📖 动态更新世界观设定
- 🌍 场景穿越与地图切换
- 🎭 智能NPC添加与管理
- ⚔️ 实时战斗系统
- ❤️ 角色状态动态调整
- 🎒 物品与技能系统
- 📋 任务系统管理
- 📢 NPC行为广播
- 🏁 多结局生成
- 🎨 文生图提示词生成

### NPC自主行为系统

- 🎭 动态人设调整
- ⚔️ 阵营背叛与敌对
- 🤝 队友关系建立

## 安装与运行

### 环境要求

- Node.js 16+
- 大语言模型API（用于主对话）
- 小语言模型API（用于敌人刷新和提示词生成）
- 通义万相API（文生图功能，可选）

### 快速开始

```bash
# 安装依赖
cd MCP_Server && npm install
cd ../MCP_Client && npm install  
cd ../MCPGame && npm install

# 启动服务
cd MCP_Server && npm run dev
cd MCP_Client && npm run dev
cd MCPGame && npm run dev
```

### 打包

```bash
# 使用pkg打包MCP Server&Client
cd MCP_Server && npm run package
cd MCP_Client && npm run package
# Electron打包
cd MCPGame && npm run build:win
```

## 游戏模式

![游戏截图2](./images/9.png)

### 🎮 指令模式

将玩家的行动指令传递给AI进行逻辑处理和剧情推进

### 📢 喊话模式  

将玩家的语言广播给所有NPC和队友，触发群体反应

### 💬 NPC私聊

进入特定NPC的子页面进行深度对话和关系培养

## 当前挑战与改进方向

### 缺陷与优化方向

1. **对话系统融合** - NPC的对话与主对话无法严丝合缝地契合。我想要在游戏中添加“自我值”的设定，让主对话变为玩家角色的感知滤镜，所以不能简单地将主对话的内容给到NPC
2. **AI行为引导** - AI总喜欢“哄”玩家（比如玩家想要观察周围是否有伤员，那么AI就一定会给出一个“伤员”）
3. **剧情节奏控制** - AI对剧情长度不可控，且有时会生成一些较为“无趣”的片段
4. **信息权重优化** - 每次给到AI的信息量过多（世界观信息以及工具函数信息）且权重相等，导致某些信息被选择性忽视

### 代码质量

作为开发者的第一个Node.js和Electron项目，代码可能存在优化空间。
同时我个人的提示词工程能力有限，或许这也导致了上述的各个问题。

# 重大更新日志（2026年1月18日）

## 版本重大更新概述

本次更新对游戏架构进行了深度重构，引入了多Agent协同的Context Engineering设计，优化了游戏世界的动态响应机制与信息流管理，显著提升了游戏的逻辑一致性、叙事深度与交互自由度。

---

## 🎯 核心架构升级：多Agent情境工程

### 1. **三层Agent处理流水线**

将玩家行动后的AI响应拆分为三个专业Agent，实现信息分层处理与职责分离：

- **🌍 世界观Agent (World Agent)**  
  负责判定玩家行为对游戏世界产生的客观影响，调用对应函数更新世界状态（如场景变化、物品增减、任务进度等）。

- **👤 人物Agent (Character Agent)**  
  读取世界观Agent的更新内容，将其转化为玩家角色的**第一人称感知滤镜**，并调用角色状态函数（如生命值、情绪、自我值等）。

- **📢 NPC转述Agent (NPC Narrator Agent)**  
  将人物Agent的输出进行转述与分发，让各NPC自主决定是否**知晓、回复、记忆**该信息，实现更真实的群体反应逻辑。

### 2. **信息同步机制强化**

- NPC在透露重要信息（如“城东有地下商贩”）时可调用特定函数，将该信息**同步至世界观数据库**，确保世界状态与NPC认知一致。
- World Agent 现在能够**读取所有NPC的当前人设与记忆**，使世界变动更贴合角色关系网。

---

## 📜 游戏内容与叙事优化

### 3. **线性化主线 + 动态支线**

- 新增**系列人造主线任务**与**预设关键NPC**，提供清晰的故事推进骨架。
- 保留AI生成**支线任务与随机事件**的空间，平衡引导性与开放性。

### 4. **“类DND掷骰子”决策函数**

- 为World Agent 引入随机判定机制，避免AI过度迎合玩家，增加**不确定性、挑战性与叙事多样性**。
- 用于处理探查、说服、战斗伤害等情境，让游戏体验更接近传统TRPG。

---

## 🖥️ 系统与界面改进

### 5. **UI/UX 优化**

- 界面布局与视觉风格升级，提升操作直观性与沉浸感。
- 增加信息分层展示，区分世界信息、角色状态与NPC对话。

### 6. **主界面支持Markdown渲染**

- AI输出内容现在支持**Markdown格式**（如粗体、列表、引用等），提升叙事文本的表现力与可读性。

### 7. **MCP Client 连接修复**

- 修复了MCP_Client调用MCPGame时**强制绑定3001端口**的问题，现在支持灵活配置。

> *更新日期：2026年1月18日*

---

# 故事编辑器（StoryEditor）（待测试）

`StoryEditor/` 是一个独立的可视化编辑工具，用于修改 `MCP_Server` 中的游戏故事配置，无需手动编辑 TypeScript 文件。

## 功能

- **NPC 编辑器**：新增/编辑/删除 NPC，包括名字、身份、人设预设、示例对话
- **世界编辑器**：新增/编辑/删除世界及其阶段（GameStage），包含任务、基调、限制、NPC、结果等字段
- **全局配置编辑器**：修改玩家特殊能力、世界跳转路径（world_map）、结局阈值、四种结局文本
- **配置验证**：检测所有必填项是否完整，提示缺失字段，确保能正常生成 TypeScript 文件
- **一键保存**：验证通过后将配置写回 `MCP_Server/src/`，自动备份原文件（`.bak.<timestamp>`）
- **一键恢复**：从最近一次备份恢复，撤销上次保存操作

## 使用方法

```bash
# 进入 StoryEditor 目录
cd StoryEditor

# 启动编辑器后端（端口 3333）
node server.js

# 在浏览器中打开
# http://localhost:3333
```

无需安装任何额外依赖，仅使用 Node.js 内置模块。

## 文件结构

```
StoryEditor/
├── server.js     # 后端服务器（解析/生成 TypeScript、读写文件）
├── index.html    # 前端编辑器页面（单文件，无框架依赖）
└── package.json  # 项目描述
```

## 配置文件对应关系

| 编辑器页签 | 对应文件 |
|-----------|---------|
| NPC 配置 | `MCP_Server/src/default_NPC_config.ts` |
| 世界配置 | `MCP_Server/src/default_world_configs.ts` |
| 全局配置 | `MCP_Server/src/defaultconfig.ts`（部分字段） |

> **注意**：`defaultconfig.ts` 中的 MCP 工具提示词（如 `battle`、`changeStatus` 等）不在编辑器管理范围内，需直接修改源文件。
