【python】我用python的tkinter开发了一个文字冒险rpg回合制游戏--我之传说
WordRpg — 文字角色扮演游戏技术介绍github源码下载源码链接游戏展示商店和对话移动角色 “我” 进行探险会触发回合制战斗概述WordRpg 是一款基于Python 3.14标准库开发的桌面端文字 RPG 游戏采用tkinter构建图形界面无任何外部依赖。游戏以中文叙事、像素风格字符地图为核心体验融合了回合制战斗、任务系统、装备系统、NPC 交互等经典 RPG 要素。技术栈技术用途Python 3.14运行时环境tkinterGUI 框架所有视图均为tk.Frame子类dataclasses数据建模角色、技能、敌人、任务、商品等random遇敌判定、伤害浮动、逃跑概率、随机敌人选取项目架构分层设计main.py ← 入口 └─ Engine ← 中枢调度场景、战斗、对话、商店 ├─ game/ ← 纯逻辑层无 GUI 导入 │ ├─ player.py ← 玩家模型 / 背包 / 任务进度 / 升级 │ ├─ combat.py ← 回合制战斗引擎 │ ├─ classes.py ← 职业 技能数据 │ ├─ enemy.py ← 敌人 Boss 模板 / 随机生成 │ ├─ quest.py ← 任务数据 目标 │ ├─ shop.py ← 商店数据 │ ├─ npc.py ← NPC 数据 对话状态机 │ ├─ map_.py ← 单张地图瓦片网格、可达性、传送门 │ └─ map_manager.py ← 多地图管理传送、解锁、遇敌、Boss └─ ui/ ← 表现层tkinter 视图 ├─ main_window.py ← 根窗口 场景切换 ├─ title_screen.py ← 标题 职业选择 ├─ game_view.py ← 主游戏画面地图 信息面板 ├─ combat_view.py ← 战斗 UI ├─ dialog_view.py ← NPC 对话 任务 UI └─ shop_view.py ← 商店 UI场景切换Scene-Based MVC引擎维护一个scenes字典存储所有场景帧。MainWindow.switch_to()负责销毁当前场景并展示目标场景每个场景在切入时触发on_enter()生命周期钩子。TitleScreen → GameView ↔ CombatView ↔ DialogView ↔ ShopView核心设计模式1. 数据驱动游戏内容以声明式字典和 dataclass 定义与逻辑解耦职业属性、技能效果 →CLASS_DATAclasses.py敌人属性、掉落 →ENEMY_TEMPLATES/BOSS_TEMPLATESenemy.py任务链条件与奖励 →QUEST_DATAquest.py商店商品 →SHOP_DATAshop.pyNPC 对话状态机 →NPC_DATAnpc.py瓦片属性行走性、颜色、遇敌率→TILE_PROPERTIESconfig.py2. 任务状态机每个任务有四个状态unavailable → active → done → completed。NPC 对话根据当前任务状态动态切换文本并控制任务接受/交付的交互逻辑。3. Buff / 冷却系统战斗中使用字典维护玩家与敌人的临时状态player_buffs/enemy_buffs存储 Buff 名称与剩余回合数每回合递减skill_cooldowns跟踪技能剩余冷却回合数每回合递减4. 装备聚合玩家属性攻击、防御等为其基础属性与装备加成的总和通过total_atk、total_def等属性实时计算。地图系统7 张地图村庄、绿地、森林、沙漠、湖泊、冰原、遗迹自定义 .map 格式22行 × 35列单中文字符表示瓦片类型瓦片属性草地可行走/遇敌、树木不可行走、门传送、泉恢复等双向传送通过PORTAL_MAP字典实现跨地图传送渐进解锁通过MAP_UNLOCKS控制击败特定 Boss 后解锁新区战斗系统玩家回合 攻击 → 伤害 max(1, atk - enemy.def/2 random(-2~2)) 技能 → 消耗 MP触发特效治疗、加攻、加防、闪避、减速有冷却 防御 → 本回合获得 defend_up Buff 逃跑 → 概率 player.spd / (player.spd enemy.spd) 敌人回合 反击 → 同等伤害公式入口文件 main.pyimportsys,os sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))fromconfigimport*fromui.main_windowimportMainWindowfromgame.engineimportEnginedefmain():rootMainWindow()engineEngine(root)root.engineengine engine.build_scenes()root.switch_to(title)root.mainloop()if__name____main__:main()main.py是整个应用的启动入口职责纯粹路径注入将项目根目录加入sys.path确保后续 import 正确解析对象组装创建MainWindowtkinter 根窗口→ 创建Engine逻辑中枢→ 双向绑定 → 构建所有场景启动循环默认切换到标题画面进入 tkinter 事件主循环整个初始化链仅 7 行有效代码体现了清晰的依赖注入与组合模式。全局配置 config.py# 窗口WINDOW_WIDTH1100WINDOW_HEIGHT720TITLE文字RPG - 我之传说# 瓦片属性字典——数据驱动的核心TILE_PROPERTIES{·:{walkable:True,color:#7ec850,name:草地,encounter_rate:0.08},木:{walkable:False,color:#2d6a2d,name:树木},# ... 共 11 种瓦片}# 升级公式EXP_PER_LEVEL30HP_PER_LEVEL5MP_PER_LEVEL3ATK_PER_LEVEL2# ...# 字体FONT_TITLE(Microsoft YaHei,28,bold)config.py是项目的单一配置源所有可调参数集中管理配置类别内容窗口宽高、标题地图瓦片尺寸24px、行列数35×22、地图目录颜色17 种主题色深色背景 高亮点缀瓦片属性11 种瓦片的行走性、颜色、中文名、遇敌率升级公式每级所需经验、HP/MP/ATK/DEF/SPD 成长值字体5 级字号统一使用微软雅黑这种设计使得调整游戏平衡性遇敌率、成长曲线或更换视觉主题只需修改 config.py无需触碰任何逻辑代码。地图文件目录 assets/maps/assets/maps/ ├── village.map # 村庄安全区 / 枢纽 ├── greenland.map # 绿地Lv1-2 初级区域 ├── forest.map # 森林Lv3 中级区域 ├── desert.map # 沙漠Lv4-5 中级区域 ├── lake.map # 湖畔Lv4-5 中级区域 ├── ice.map # 冰原Lv6-8 高级区域 └── ruin.map # 遗迹Lv8-12 最终区域每张地图为22 行 × 35 列的纯文本文件使用单中文字符标记瓦片类型墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙 墙·································墙 墙·································墙 墙··墙店墙····墙公墙····墙宿墙····墙药墙···泉···墙 墙··墙墙墙····墙墙墙····墙墙墙····墙墙墙·······墙 墙·································墙 墙···············路················墙 墙···············路················墙 墙···老······卫·····路路路路路路路路路门·······墙 墙···············路················墙 墙············门路路路·················墙 墙·································墙 墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙墙·草地可行走有遇敌率墙墙壁不可行走边界路小路可行走低遇敌率门传送阵跨地图传送泉泉水可行走触发 HP/MP 全恢复木水石沙冰雪等环境瓦片地图中嵌入的店公宿药老卫等字符对应 NPC 和商店标记由map_manager.py解析为交互点地图加载流程GameMap.load()按行读取文件 → 构建字符二维数组 → 记录 NPC/传送门位置 → 由MapManager统一管理切换与解锁逻辑。数据流用户输入键盘/按钮 ↓ Engine 调度 ↓ game/ 逻辑层 → 更新状态Player / MapManager / Combat ↓ ui/ 视图层 → 重新渲染视图层只读状态通过 Engine 暴露的方法修改逻辑实现表现与逻辑的分离。运行方式python main.py无需安装任何依赖Python 3.14 环境即可运行。项目规模源码文件17 个.py文件地图文件7 个.map文件源码行数约 2,400 行外部依赖0特色亮点纯标准库零外部依赖开箱即用全中文界面、叙事、数据全部中文化像素风字符界面利用 tkinter Canvas 绘制 tile-based 地图紧凑的场景管理60 行实现完整的场景路由与生命周期丰富的游戏内容3 职业 × 3 技能、12 种敌人 3 个 Boss、5 个主线性任务、7 个 NPC、3 个商店扩展方向引入pyproject.toml与虚拟环境管理添加单元测试unittest/pytest增加存档/读档功能json/shelve扩展地图编辑器或支持更多瓦片类型添加音效与动画增强