第13篇:综合实战——制作我的小游戏 python中文编程
作者中文编程倡导者—— 李金雨联系方式wbtm2718qq.com系列python中文编程入门教程** 核心理念 AI时代必须使用中文编程母语编程阅读效率极高第13篇综合实战——制作我的小游戏开篇引入本课目标综合运用之前所学的所有知识学习如何设计和实现一个完整的游戏掌握游戏开发的基本流程学会如何组织大型项目的代码结构理解数据持久化在游戏中的应用生活场景引入同学们你们一定玩过各种游戏比如冒险游戏、角色扮演游戏、策略游戏等。这些游戏背后都有复杂的代码逻辑。今天我们将运用之前所学的Python知识制作一个属于自己的小游戏。通过这个项目你将学会如何将零散的知识整合起来如何设计游戏的结构如何实现游戏的核心功能以及如何让游戏更加有趣和完善。预期成果展示在本课结束时你将能够设计并实现一个完整的文字冒险游戏理解游戏开发的基本流程掌握如何组织大型项目的代码结构实现游戏的存档和读档功能运用面向对象编程思想设计游戏项目选择我们将制作一个文字冒险游戏具有以下功能玩家输入名字开始游戏多个场景选择森林、城堡、洞穴遇到不同事件战斗、宝藏、陷阱生命值和金币系统存档读档功能项目开发流程需求分析确定游戏的功能和玩法设计数据结构设计游戏中需要的数据结构设计功能模块将游戏分解为多个功能模块设计模板和实例使用面向对象编程设计游戏元素逐步实现先实现核心功能再逐步完善测试调试测试游戏功能修复bug数据持久化实现存档和读档功能优化完善添加细节提升游戏体验代码实现1. 项目结构文字冒险游戏/ ├── main.py # 游戏入口 ├── 游戏引擎.py # 游戏核心逻辑 ├── 场景.py # 场景类 ├── 玩家.py # 玩家类 ├── 存档.py # 存档功能 └── 数据/ # 存储存档文件的目录2. 玩家类玩家.py玩家类class玩家:玩家模板def__init__(self,姓名,生命值100,金币0):初始构造功能self.姓名姓名 self.生命值生命值 self.金币金币 self.物品[]def获得物品(self,物品名称):获得物品self.物品.append(物品名称)print(f你获得了{物品名称})def失去物品(self,物品名称):失去物品if物品名称inself.物品:self.物品.remove(物品名称)print(f你失去了{物品名称})else:print(f你没有{物品名称})def获得金币(self,数量):获得金币self.金币数量print(f你获得了{数量}金币)def失去金币(self,数量):失去金币ifself.金币数量:self.金币-数量print(f你失去了{数量}金币)returnTrueelse:print(你的金币不足)returnFalsedef受伤(self,伤害值):受伤self.生命值max(0,self.生命值-伤害值)print(f你受到了{伤害值}点伤害当前生命值{self.生命值})ifself.生命值0:print(你死了游戏结束)returnTruereturnFalsedef治疗(self,恢复值):治疗self.生命值min(100,self.生命值恢复值)print(f你恢复了{恢复值}点生命值当前生命值{self.生命值})def显示状态(self):显示状态print(f\n{self.姓名}的状态)print(f生命值{self.生命值})print(f金币{self.金币})print(f物品{self.物品ifself.物品else无})print()3. 场景类场景.py场景类importrandomclass场景:场景模板def__init__(self,名称,描述):初始构造功能self.名称名称 self.描述描述def进入场景(self,玩家):进入场景print(f\n{self.名称})print(self.描述)self.处理事件(玩家)def处理事件(self,玩家):处理场景事件passclass森林场景(场景):森林场景def__init__(self):初始构造功能super().__init__(森林,你走进了一片茂密的森林阳光透过树叶洒在地上周围传来各种动物的叫声。)def处理事件(self,玩家):处理森林事件事件random.choice([战斗,宝藏,陷阱,平静])if事件战斗:print(突然一只狼从灌木丛中跳了出来)选择input(你要1. 战斗 2. 逃跑)if选择1:伤害random.randint(10,30)玩家.受伤(伤害)if玩家.生命值0:玩家.获得金币(20)print(你成功击败了狼)else:伤害random.randint(5,15)玩家.受伤(伤害)print(你成功逃跑了但受了点伤。)elif事件宝藏:金币random.randint(10,50)玩家.获得金币(金币)物品random.choice([治疗药水,魔法卷轴,锋利的剑])玩家.获得物品(物品)print(你发现了一个宝箱)elif事件陷阱:伤害random.randint(15,25)玩家.受伤(伤害)print(你踩到了陷阱)else:print(你平静地穿过了森林。)class城堡场景(场景):城堡场景def__init__(self):初始构造功能super().__init__(城堡,你来到了一座古老的城堡城堡的大门紧闭周围有护城河环绕。)def处理事件(self,玩家):处理城堡事件事件random.choice([守卫,宝藏,陷阱,平静])if事件守卫:print(城堡门口有一个守卫。)选择input(你要1. 贿赂 2. 战斗 3. 离开)if选择1:if玩家.失去金币(50):玩家.获得物品(城堡钥匙)print(守卫收下了金币给了你一把城堡钥匙。)elif选择2:伤害random.randint(20,40)玩家.受伤(伤害)if玩家.生命值0:玩家.获得金币(30)玩家.获得物品(城堡钥匙)print(你击败了守卫获得了城堡钥匙)else:print(你离开了城堡。)elif事件宝藏:if城堡钥匙in玩家.物品:金币random.randint(50,100)玩家.获得金币(金币)物品random.choice([治疗药水,魔法卷轴,锋利的剑,魔法盾牌])玩家.获得物品(物品)print(你用钥匙打开了城堡的大门发现了一个巨大的宝藏)玩家.失去物品(城堡钥匙)else:print(城堡的大门锁着你需要一把钥匙。)elif事件陷阱:伤害random.randint(20,30)玩家.受伤(伤害)print(你触发了城堡周围的陷阱)else:print(你在城堡周围转了转没有发现什么特别的东西。)class洞穴场景(场景):洞穴场景def__init__(self):初始构造功能super().__init__(洞穴,你进入了一个黑暗的洞穴四周一片漆黑只有微弱的光线从洞口透进来。)def处理事件(self,玩家):处理洞穴事件事件random.choice([怪物,宝藏,陷阱,平静])if事件怪物:print(洞穴深处传来低沉的咆哮声一个巨大的怪物出现了)选择input(你要1. 战斗 2. 逃跑)if选择1:伤害random.randint(25,45)玩家.受伤(伤害)if玩家.生命值0:玩家.获得金币(50)物品random.choice([治疗药水,魔法卷轴,锋利的剑,魔法盾牌,魔法头盔])玩家.获得物品(物品)print(你成功击败了怪物)else:伤害random.randint(10,20)玩家.受伤(伤害)print(你成功逃跑了但受了点伤。)elif事件宝藏:金币random.randint(30,80)玩家.获得金币(金币)物品random.choice([治疗药水,魔法卷轴,锋利的剑,魔法盾牌])玩家.获得物品(物品)print(你在洞穴深处发现了一个宝藏)elif事件陷阱:伤害random.randint(20,35)玩家.受伤(伤害)print(你踩到了洞穴里的陷阱)else:print(你在洞穴里探索了一番没有发现什么特别的东西。)4. 存档功能存档.py存档功能importjsonimportosclass存档管理:存档管理类def__init__(self,存档目录数据):初始构造功能self.存档目录存档目录 os.makedirs(self.存档目录,exist_okTrue)def保存游戏(self,玩家,存档名称save.json):保存游戏存档路径os.path.join(self.存档目录,存档名称)玩家数据{姓名:玩家.姓名,生命值:玩家.生命值,金币:玩家.金币,物品:玩家.物品}withopen(存档路径,w,encodingutf-8)as文件:json.dump(玩家数据,文件,ensure_asciiFalse,indent2)print(f游戏已保存到{存档路径})def加载游戏(self,存档名称save.json):加载游戏存档路径os.path.join(self.存档目录,存档名称)ifos.path.exists(存档路径):withopen(存档路径,r,encodingutf-8)as文件:玩家数据json.load(文件)from玩家import玩家 玩家实例玩家(玩家数据[姓名],玩家数据[生命值],玩家数据[金币])玩家实例.物品玩家数据[物品]print(f游戏已从{存档路径}加载)return玩家实例else:print(f存档文件{存档路径}不存在)returnNone5. 游戏引擎游戏引擎.py游戏引擎from玩家import玩家from场景import森林场景,城堡场景,洞穴场景from存档import存档管理class游戏引擎:游戏引擎类def__init__(self):初始构造功能self.玩家Noneself.场景{森林:森林场景(),城堡:城堡场景(),洞穴:洞穴场景()}self.存档管理存档管理()def开始游戏(self):开始游戏print(欢迎来到文字冒险游戏)print()选择input(1. 新游戏 2. 加载游戏)if选择1:姓名input(请输入你的名字)self.玩家玩家(姓名)elif选择2:self.玩家self.存档管理.加载游戏()ifnotself.玩家:姓名input(请输入你的名字)self.玩家玩家(姓名)else:姓名input(请输入你的名字)self.玩家玩家(姓名)self.游戏主循环()def游戏主循环(self):游戏主循环whileTrue:self.玩家.显示状态()print(你可以去以下地方)fori,场景名称inenumerate(self.场景.keys(),1):print(f{i}.{场景名称})print(4. 保存游戏)print(5. 退出游戏)选择input(请输入你的选择)if选择1:self.场景[森林].进入场景(self.玩家)elif选择2:self.场景[城堡].进入场景(self.玩家)elif选择3:self.场景[洞穴].进入场景(self.玩家)elif选择4:self.存档管理.保存游戏(self.玩家)elif选择5:print(谢谢游玩再见)breakelse:print(输入错误请重新输入)# 检查玩家是否死亡ifself.玩家.生命值0:print(游戏结束)break6. 主程序main.py游戏入口from游戏引擎import游戏引擎if__name____main__:游戏游戏引擎()游戏.开始游戏()项目要求必须使用模板类来组织代码使用面向对象编程思想设计游戏必须使用初始构造功能init初始化游戏对象数据必须保存到文件实现存档功能使用JSON格式保存游戏进度代码必须分模块组织至少2个.py文件按照功能将代码分为多个模块所有类名、方法名、变量名必须使用中文严格按照全中文编程规范项目开发流程1. 需求分析首先我们需要明确游戏的功能和玩法玩家输入名字开始游戏多个场景选择森林、城堡、洞穴遇到不同事件战斗、宝藏、陷阱生命值和金币系统存档读档功能2. 设计数据结构根据需求我们需要设计以下数据结构玩家包含姓名、生命值、金币、物品场景包含名称、描述、事件处理存档保存玩家的状态3. 设计功能模块将游戏分解为以下功能模块玩家模块处理玩家的状态和行为场景模块处理不同场景的事件存档模块处理游戏的存档和读档游戏引擎模块控制游戏的流程4. 设计模板和实例使用面向对象编程设计游戏元素玩家类表示玩家角色场景类表示游戏场景存档管理类处理存档功能游戏引擎类控制游戏流程5. 逐步实现先实现核心功能再逐步完善首先实现玩家类和场景类然后实现游戏引擎和存档功能最后添加细节和优化6. 测试调试测试游戏功能修复bug测试游戏的基本流程测试存档和读档功能测试各种事件的处理修复发现的bug7. 数据持久化实现存档和读档功能使用JSON格式保存游戏数据实现保存和加载游戏的功能8. 优化完善添加细节提升游戏体验添加更多的事件和场景增加物品的效果优化游戏的交互体验动手实践现在让我们按照上述步骤来实现这个文字冒险游戏。步骤1创建项目目录结构首先创建项目的目录结构包括主程序和各个模块文件。步骤2实现玩家类实现玩家类包含玩家的基本属性和方法。步骤3实现场景类实现场景类包括森林、城堡、洞穴三个场景每个场景有不同的事件。步骤4实现存档功能实现存档管理类用于保存和加载游戏数据。步骤5实现游戏引擎实现游戏引擎类控制游戏的流程和逻辑。步骤6实现主程序实现主程序作为游戏的入口。步骤7测试游戏运行游戏测试各个功能是否正常。知识总结核心概念回顾面向对象编程使用类和对象来组织代码模块和包将代码分为多个模块提高代码的可维护性文件操作使用文件操作实现数据持久化条件判断使用条件语句处理游戏中的选择循环使用循环实现游戏的主循环随机事件使用随机函数生成游戏中的随机事件关键代码速查功能代码说明定义类class 类名:定义一个类初始化方法def __init__(self, 参数):初始化对象的属性保存JSONjson.dump(数据, 文件)将数据保存为JSON格式读取JSONjson.load(文件)从JSON文件读取数据随机选择random.choice(列表)从列表中随机选择一个元素主循环while True:游戏的主循环条件判断if 条件:处理游戏中的选择常见错误提醒模块导入错误确保模块的导入路径正确文件路径错误确保文件路径的正确性JSON格式错误确保保存和加载的JSON格式正确逻辑错误确保游戏逻辑的正确性异常处理添加适当的异常处理课后作业巩固练习题为游戏添加更多的场景比如沙漠、海洋、雪山等为游戏添加更多的物品和道具比如武器、防具、药水等创意编程题扩展游戏功能添加任务系统和成就系统改进游戏的战斗系统添加更多的战斗选项和敌人类型总结通过本项目你已经学会了如何综合运用Python的各种知识来制作一个完整的游戏。你学习了如何设计游戏的结构如何实现游戏的核心功能以及如何让游戏更加有趣和完善。希望你在今后的学习中能够继续探索Python的更多可能性创造出更多有趣的项目学习交流如果你在学习过程中遇到任何问题欢迎联系我** 视频号“时空系”邮箱wbtm2718qq.com其他提示本人正在开发纯中文编程语言和编译器有兴趣的可以交流本人正在写一本基于中国母语思维习惯的数学教材可以让你一年内学完从初中到研究生的数学而且可以让你快速掌握人工智能的关键数学知识有兴趣的可以交流祝你学习愉快