diff --git a/README.md b/README.md index df844ca..5c68342 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,167 @@ -从小一直是修仙网文的读者,从最早最早的蜀山仙侠传,到比较新的赤心巡天,修仙网文陪伴了我非常多的时间。 +# 修仙世界模拟器 (Cultivation World Simulator) -由于我本人也是游戏AI行业的工作者,对LLM这两年的进步感触很深。我认为,现在的LLM智能水平,已经足够支持起来一些仙侠风格的世界模拟了。 +一个基于规则和AI驱动的修仙世界模拟器,旨在创造一个真正活着的、有沉浸感的仙侠世界。 -但是,纯粹只有LLM为NPC提供决策和对话能力是不够的。首先,要有可信的规则打底,作为修仙世界的“世界模型”。之后,才是接入LLM,使其生动起来。 +## 简介 -我是希望,能够有纯粹的、快乐的、直接的、活着的修仙世界的沉浸感。 +修仙世界模拟器是一个结合传统游戏规则系统和现代AI技术的仿真项目。通过建立完整的修仙世界模型,包括地形、角色、修炼体系、人际关系等要素,创造一个可以自主运行、充满生机的虚拟修仙世界。 -有一些游戏公司其实有宣扬过自己可以实现类似的功能,但是最后都沦为了纯粹的宣传工具。 +项目的核心理念是:**先建立可信的规则体系作为"世界模型"基础,再接入AI使世界生动起来**。 -也不是像斯坦福小镇那样的纯粹的研究,而是能给玩家提供代入感和沉浸感的实际世界。 +## 截图预览 -我想了下,不如干脆自己来干吧。先动手,动起手来比什么都强。 +![游戏截图](assets/screenshot.png) + +## 功能开发进度 + +### 🏗️ 基础系统 +- ✅ 基础世界地图系统 +- ✅ 多样化地形类型(平原、山脉、森林、沙漠、水域等) +- ✅ 时间系统(年月日历) +- ✅ 前端显示界面(pygame) +- ✅ 基础模拟器框架 +- ✅ 项目文档(README) +- [ ] 配置文件系统(config) +- [ ] Web前端支持(从pygame切换) +- [ ] ECS并行工具(后期考虑) + +### 🗺️ 地块系统 +- ✅ 基础tile地块系统 +- [ ] 同tile内NPC相互交互 +- [ ] 乡村和城镇的机制 +- [ ] 灵气分布与产出设计 +- [ ] 地块间移动(move_to_region action) + +### 👤 角色系统 +- ✅ 角色基础属性系统 +- ✅ 修炼境界体系 +- ✅ 灵根系统 +- ✅ 基础移动动作 +- [ ] 角色关系系统 +- [ ] 性格系统设计 +- [ ] 角色特殊能力 +- [ ] 战斗相关 + - [ ] 属性点分配 + - [ ] 技能系统 + - [ ] 装备系统 + - [ ] 法宝系统 + - [ ] 阵法 +- [ ] 技能学习系统: + - [ ] 可学习技能 + - [ ] 个人技(灵活融入代码) + - [ ] 生活技能 +- [ ] 凡人角色支持 +- [ ] 角色突破机制 + +### 🏛️ 组织系统 +- [ ] 宗门系统 +- [ ] 世家系统 +- [ ] 朝廷系统(待定) +- [ ] 组织间关系网络 + +### ⚡ 动作系统 +- ✅ 基础移动动作 +- [ ] 有明确规则的定义动作 +- [ ] 影响人际关系的LLM动作 +- [ ] 动作执行框架 + +### 🎭 事件系统 +- [ ] 世界范围大事件: + - [ ] 拍卖会 + - [ ] 秘境探索 + - [ ] 比武大会 +- [ ] 规则发起事件 +- [ ] NPC发起事件 +- [ ] 自然事件: + - [ ] 自然灾害 + - [ ] 天灾 + - [ ] 战争 + - [ ] 兽潮 + +### ⚔️ 战斗系统 +- [ ] 战斗方式设计 +- [ ] 优劣互克关系 +- [ ] 胜率计算系统 +- [ ] 战斗规则引擎 + +### 🎒 物品系统 +- [ ] 基础物品框架 +- [ ] 物品属性系统 +- [ ] 物品交易机制 + +### 🌿 生态系统 +- [ ] 魔兽系统 +- [ ] 动植物生态 +- [ ] 生物间相互关系 + +### 🤖 AI增强系统 +- [ ] 角色AI系统(规则AI + LLM接口预留) +- [ ] LLM驱动的NPC对话 +- [ ] 智能决策系统 +- [ ] 动态剧情生成 +- [ ] NPC观测空间设计 +- [ ] NPC之间关系交互 +- [ ] LLM接口集成 + +### 🏛️ 世界背景系统 +- [ ] 上古历史生成 +- [ ] 世界观设定 +- [ ] 背景故事框架 + +## 使用方法 + +### 环境要求 +- Python 3.8+ +- pygame +- PyYAML + +### 运行步骤 +1. 克隆项目到本地: + ```bash + git clone https://github.com/your-username/cultivation-world-simulator.git + cd cultivation-world-simulator + ``` + +2. 安装依赖(如需要的话): + ```bash + pip install pygame pyyaml + ``` + +3. 运行模拟器: + ```bash + python run.py + ``` + +### 基本操作 +- 启动后会自动生成随机地图 +- 可以观察角色在世界中的移动和行为 +- 按ESC退出程序 + +## 项目背景 + +从小一直是修仙网文的读者,从最早的蜀山仙侠传,到比较新的赤心巡天,修仙网文陪伴了我非常多的时间。 + +作为游戏AI行业的从业者,对LLM这两年的进步感触很深。我认为,现在的LLM智能水平,已经足够支持起来一些仙侠风格的世界模拟了。 + +但是,纯粹只有LLM为NPC提供决策和对话能力是不够的。首先,要有可信的规则打底,作为修仙世界的"世界模型"。之后,才是接入LLM,使其生动起来。 + +我希望能够创造出纯粹的、快乐的、直接的、活着的修仙世界的沉浸感。不是像一些游戏公司的纯粹宣传工具,也不是像斯坦福小镇那样的纯粹研究,而是能给玩家提供真实代入感和沉浸感的实际世界。 + +## 技术架构 + +- **前端显示**: pygame (计划未来支持Web) +- **模拟引擎**: 自研事件驱动模拟器 +- **世界模型**: 基于规则的确定性系统 +- **AI集成**: 预留LLM接口,支持混合决策 + +## 贡献指南 + +欢迎对修仙世界模拟器项目的贡献!无论是代码、创意还是测试反馈都非常宝贵。 + +## 许可证 + +本项目采用 [LICENSE](LICENSE) 文件中指定的许可证。 + +## 联系方式 + +如果您对项目有任何问题或建议,欢迎提交 Issue 或 Pull Request。 diff --git a/assets/screenshot.png b/assets/screenshot.png new file mode 100644 index 0000000..cfe8323 Binary files /dev/null and b/assets/screenshot.png differ diff --git a/tests/run_front.py b/run.py similarity index 100% rename from tests/run_front.py rename to run.py diff --git a/src/classes/avatar.py b/src/classes/avatar.py index f759da9..b13ce4d 100644 --- a/src/classes/avatar.py +++ b/src/classes/avatar.py @@ -147,8 +147,8 @@ def get_new_avatar_from_ordinary(world: World, current_year: Year, name: str, ag birth_year = current_year - age.age birth_month = random.choice(list(Month)) cultivation_progress = CultivationProgress(0) - pos_x = random.randint(0, 100) - pos_y = random.randint(0, 100) + pos_x = random.randint(0, world.map.width) + pos_y = random.randint(0, world.map.height) gender = random.choice(list(Gender)) return Avatar( diff --git a/src/classes/tile.py b/src/classes/tile.py index 6bd2fa7..0029fb4 100644 --- a/src/classes/tile.py +++ b/src/classes/tile.py @@ -67,7 +67,6 @@ class Tile(): class Map(): """ 通过dict记录position 到 tile。 - TODO: 有特色的地貌,比如西部大漠,东部平原,最东海洋和岛国。南边热带雨林,北边雪山和冰原。 """ def __init__(self, width: int, height: int): self.tiles = {}