当前位置: 首页 > news >正文

第13篇:综合实战——制作我的小游戏 python中文编程

作者:中文编程倡导者—— 李金雨
联系方式:wbtm2718@qq.com
系列:python中文编程入门教程
** 核心理念: AI时代必须使用中文编程,母语编程阅读效率极高"

第13篇:综合实战——制作我的小游戏

开篇引入

本课目标

  • 综合运用之前所学的所有知识
  • 学习如何设计和实现一个完整的游戏
  • 掌握游戏开发的基本流程
  • 学会如何组织大型项目的代码结构
  • 理解数据持久化在游戏中的应用

生活场景引入

同学们,你们一定玩过各种游戏,比如冒险游戏、角色扮演游戏、策略游戏等。这些游戏背后都有复杂的代码逻辑。今天,我们将运用之前所学的Python知识,制作一个属于自己的小游戏。

通过这个项目,你将学会如何将零散的知识整合起来,如何设计游戏的结构,如何实现游戏的核心功能,以及如何让游戏更加有趣和完善。

预期成果展示

在本课结束时,你将能够:

  • 设计并实现一个完整的文字冒险游戏
  • 理解游戏开发的基本流程
  • 掌握如何组织大型项目的代码结构
  • 实现游戏的存档和读档功能
  • 运用面向对象编程思想设计游戏

项目选择

我们将制作一个文字冒险游戏,具有以下功能:

  • 玩家输入名字开始游戏
  • 多个场景选择(森林、城堡、洞穴)
  • 遇到不同事件(战斗、宝藏、陷阱)
  • 生命值和金币系统
  • 存档读档功能

项目开发流程

  1. 需求分析:确定游戏的功能和玩法
  2. 设计数据结构:设计游戏中需要的数据结构
  3. 设计功能模块:将游戏分解为多个功能模块
  4. 设计模板和实例:使用面向对象编程设计游戏元素
  5. 逐步实现:先实现核心功能,再逐步完善
  6. 测试调试:测试游戏功能,修复bug
  7. 数据持久化:实现存档和读档功能
  8. 优化完善:添加细节,提升游戏体验

代码实现

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_ok=True)def保存游戏(self,玩家,存档名称="save.json"):"""保存游戏"""存档路径=os.path.join(self.存档目录,存档名称)玩家数据={"姓名":玩家.姓名,"生命值":玩家.生命值,"金币":玩家.金币,"物品":玩家.物品}withopen(存档路径,"w",encoding="utf-8")as文件:json.dump(玩家数据,文件,ensure_ascii=False,indent=2)print(f"游戏已保存到{存档路径}!")def加载游戏(self,存档名称="save.json"):"""加载游戏"""存档路径=os.path.join(self.存档目录,存档名称)ifos.path.exists(存档路径):withopen(存档路径,"r",encoding="utf-8")as文件:玩家数据=json.load(文件)from玩家import玩家 玩家实例=玩家(玩家数据["姓名"],玩家数据["生命值"],玩家数据["金币"])玩家实例.物品=玩家数据["物品"]print(f"游戏已从{存档路径}加载!")return玩家实例else:print(f"存档文件{存档路径}不存在!")returnNone

5. 游戏引擎(游戏引擎.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("游戏结束!")break

6. 主程序(main.py)

"""游戏入口"""from游戏引擎import游戏引擎if__name__=="__main__":游戏=游戏引擎()游戏.开始游戏()

项目要求

  1. 必须使用模板(类)来组织代码:使用面向对象编程思想设计游戏
  2. 必须使用初始构造功能(init):初始化游戏对象
  3. 数据必须保存到文件(实现存档功能):使用JSON格式保存游戏进度
  4. 代码必须分模块组织(至少2个.py文件):按照功能将代码分为多个模块
  5. 所有类名、方法名、变量名必须使用中文:严格按照全中文编程规范

项目开发流程

1. 需求分析

首先,我们需要明确游戏的功能和玩法:

  • 玩家输入名字开始游戏
  • 多个场景选择(森林、城堡、洞穴)
  • 遇到不同事件(战斗、宝藏、陷阱)
  • 生命值和金币系统
  • 存档读档功能

2. 设计数据结构

根据需求,我们需要设计以下数据结构:

  • 玩家:包含姓名、生命值、金币、物品
  • 场景:包含名称、描述、事件处理
  • 存档:保存玩家的状态

3. 设计功能模块

将游戏分解为以下功能模块:

  • 玩家模块:处理玩家的状态和行为
  • 场景模块:处理不同场景的事件
  • 存档模块:处理游戏的存档和读档
  • 游戏引擎模块:控制游戏的流程

4. 设计模板和实例

使用面向对象编程设计游戏元素:

  • 玩家类:表示玩家角色
  • 场景类:表示游戏场景
  • 存档管理类:处理存档功能
  • 游戏引擎类:控制游戏流程

5. 逐步实现

先实现核心功能,再逐步完善:

  • 首先实现玩家类和场景类
  • 然后实现游戏引擎和存档功能
  • 最后添加细节和优化

6. 测试调试

测试游戏功能,修复bug:

  • 测试游戏的基本流程
  • 测试存档和读档功能
  • 测试各种事件的处理
  • 修复发现的bug

7. 数据持久化

实现存档和读档功能:

  • 使用JSON格式保存游戏数据
  • 实现保存和加载游戏的功能

8. 优化完善

添加细节,提升游戏体验:

  • 添加更多的事件和场景
  • 增加物品的效果
  • 优化游戏的交互体验

动手实践

现在,让我们按照上述步骤来实现这个文字冒险游戏。

步骤1:创建项目目录结构

首先,创建项目的目录结构,包括主程序和各个模块文件。

步骤2:实现玩家类

实现玩家类,包含玩家的基本属性和方法。

步骤3:实现场景类

实现场景类,包括森林、城堡、洞穴三个场景,每个场景有不同的事件。

步骤4:实现存档功能

实现存档管理类,用于保存和加载游戏数据。

步骤5:实现游戏引擎

实现游戏引擎类,控制游戏的流程和逻辑。

步骤6:实现主程序

实现主程序,作为游戏的入口。

步骤7:测试游戏

运行游戏,测试各个功能是否正常。

知识总结

核心概念回顾

  • 面向对象编程:使用类和对象来组织代码
  • 模块和包:将代码分为多个模块,提高代码的可维护性
  • 文件操作:使用文件操作实现数据持久化
  • 条件判断:使用条件语句处理游戏中的选择
  • 循环:使用循环实现游戏的主循环
  • 随机事件:使用随机函数生成游戏中的随机事件

关键代码速查

功能代码说明
定义类class 类名:定义一个类
初始化方法def __init__(self, 参数):初始化对象的属性
保存JSONjson.dump(数据, 文件)将数据保存为JSON格式
读取JSONjson.load(文件)从JSON文件读取数据
随机选择random.choice(列表)从列表中随机选择一个元素
主循环while True:游戏的主循环
条件判断if 条件:处理游戏中的选择

常见错误提醒

  1. 模块导入错误:确保模块的导入路径正确
  2. 文件路径错误:确保文件路径的正确性
  3. JSON格式错误:确保保存和加载的JSON格式正确
  4. 逻辑错误:确保游戏逻辑的正确性
  5. 异常处理:添加适当的异常处理

课后作业

巩固练习题

  1. 为游戏添加更多的场景,比如沙漠、海洋、雪山等
  2. 为游戏添加更多的物品和道具,比如武器、防具、药水等

创意编程题

  1. 扩展游戏功能,添加任务系统和成就系统
  2. 改进游戏的战斗系统,添加更多的战斗选项和敌人类型

总结

通过本项目,你已经学会了如何综合运用Python的各种知识来制作一个完整的游戏。你学习了如何设计游戏的结构,如何实现游戏的核心功能,以及如何让游戏更加有趣和完善。

希望你在今后的学习中,能够继续探索Python的更多可能性,创造出更多有趣的项目!

学习交流

如果你在学习过程中遇到任何问题,欢迎联系我:

  • ** 视频号,“时空系”
  • 邮箱:wbtm2718@qq.com
  • 其他提示:
  • 本人正在开发纯中文编程语言和编译器,有兴趣的可以交流
  • 本人正在写一本基于中国母语思维习惯的数学教材,可以让你一年内学完从初中到研究生的数学,而且可以让你快速掌握人工智能的关键数学知识,有兴趣的可以交流

祝你学习愉快!

http://www.jsqmd.com/news/728436/

相关文章:

  • 品质生活,安全随行:Ledger大陆官方授权选购路径指引
  • Linux HID 子系统实战:从虚拟键盘到 input 事件上报
  • 2026年4月指南:知名管道式流量计厂家的联系与选型攻略 - 2026年企业推荐榜
  • 2026年4月天津办公玻璃隔断实力厂家盘点与推荐:河北钰东装饰工程有限公司 - 2026年企业推荐榜
  • 2026出海趋势观察:海外云账号购买重塑跨境企业智能化节奏
  • PyTorch DDP训练实战:从单卡脚本到多卡启动的完整避坑记录(含launch/spawn两种方式)
  • 循环水泵PLC数据采集监控管理系统方案
  • DS4Windows终极指南:3步掌握PS4/PS5手柄在Windows的完美兼容方案
  • 微信小程序图片安全检测避坑实录:从security.mediaCheckAsync异步接口到10秒出结果的完整配置
  • 从零开始掌握LibreVNA:开源矢量网络分析仪完全指南
  • Anthropic 拟融资 400 - 500 亿美元,估值 8500 - 9000 亿美元或超 OpenAI
  • 跨地域视频团队使用Taotoken稳定直连服务保障文案协同效率
  • 在智能客服场景中利用 Taotoken 多模型能力优化对话 agent 响应
  • 2026年4月智能5G工厂规划专业选择:直击核心,为何信百勒Simbler是您的首选伙伴? - 2026年企业推荐榜
  • 2026年当前长春咖啡馆加盟品牌盘点:小咖咖啡品牌官方何以领跑? - 2026年企业推荐榜
  • CAD智能审图系统:向量空间开启工程设计智能匹配新时代
  • 建立技术判断力:在信息爆炸时代如何保持清醒?
  • XXMI启动器:6大二次元游戏模组管理的终极解决方案
  • 2026年近期探寻温州语音智能开关顶尖源头:罗邦电气的硬核实力与选型指南 - 2026年企业推荐榜
  • 初创团队如何通过Taotoken统一管理多个AI项目的API成本
  • Kali Linux 超详细安装教程,零基础入门网安,一篇直接吃透
  • 2026年四川视频会议系统厂家实力排行盘点:四川音频会议系统,四川ktv音响,四川会议音响,优选推荐! - 优质品牌商家
  • 3步彻底解决Windows多语言软件乱码问题:Locale Emulator终极指南
  • Zemax编程避坑指南:MATLAB独立模式连接ZOS-API时,这几个配置细节千万别忽略
  • 终极Windows乱码解决方案:Locale Emulator完全使用指南
  • 系统性思维:从解决单个Bug到优化整个系统
  • 2026年4月新发布浙江奔驰大G新车车商深度**:车探探如何定义行业新标准 - 2026年企业推荐榜
  • PHP 9.0异步AI服务上线前必须通过的9项安全审计(含CVE-2025-XXXX漏洞绕过检测清单)
  • CoreclawYelp网页抓取适合谁?从场景到门槛判断
  • 数字孪生AI预测分析:从原理到实战,一篇讲透未来工业的“水晶球”