第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

python 复制代码
"""玩家类"""

class 玩家:
    """玩家模板"""
    def __init__(self, 姓名, 生命值=100, 金币=0):
        """初始构造功能"""
        self.姓名 = 姓名
        self.生命值 = 生命值
        self.金币 = 金币
        self.物品 = []
    
    def 获得物品(self, 物品名称):
        """获得物品"""
        self.物品.append(物品名称)
        print(f"你获得了{物品名称}!")
    
    def 失去物品(self, 物品名称):
        """失去物品"""
        if 物品名称 in self.物品:
            self.物品.remove(物品名称)
            print(f"你失去了{物品名称}!")
        else:
            print(f"你没有{物品名称}!")
    
    def 获得金币(self, 数量):
        """获得金币"""
        self.金币 += 数量
        print(f"你获得了{数量}金币!")
    
    def 失去金币(self, 数量):
        """失去金币"""
        if self.金币 >= 数量:
            self.金币 -= 数量
            print(f"你失去了{数量}金币!")
            return True
        else:
            print("你的金币不足!")
            return False
    
    def 受伤(self, 伤害值):
        """受伤"""
        self.生命值 = max(0, self.生命值 - 伤害值)
        print(f"你受到了{伤害值}点伤害!当前生命值:{self.生命值}")
        if self.生命值 == 0:
            print("你死了!游戏结束!")
            return True
        return False
    
    def 治疗(self, 恢复值):
        """治疗"""
        self.生命值 = min(100, self.生命值 + 恢复值)
        print(f"你恢复了{恢复值}点生命值!当前生命值:{self.生命值}")
    
    def 显示状态(self):
        """显示状态"""
        print(f"\n{self.姓名}的状态:")
        print(f"生命值:{self.生命值}")
        print(f"金币:{self.金币}")
        print(f"物品:{self.物品 if self.物品 else '无'}")
        print()

3. 场景类(场景.py

python 复制代码
"""场景类"""
import random

class 场景:
    """场景模板"""
    def __init__(self, 名称, 描述):
        """初始构造功能"""
        self.名称 = 名称
        self.描述 = 描述
    
    def 进入场景(self, 玩家):
        """进入场景"""
        print(f"\n{self.名称}")
        print(self.描述)
        self.处理事件(玩家)
    
    def 处理事件(self, 玩家):
        """处理场景事件"""
        pass

class 森林场景(场景):
    """森林场景"""
    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

python 复制代码
"""存档功能"""
import json
import os

class 存档管理:
    """存档管理类"""
    def __init__(self, 存档目录="数据"):
        """初始构造功能"""
        self.存档目录 = 存档目录
        os.makedirs(self.存档目录, exist_ok=True)
    
    def 保存游戏(self, 玩家, 存档名称="save.json"):
        """保存游戏"""
        存档路径 = os.path.join(self.存档目录, 存档名称)
        玩家数据 = {
            "姓名": 玩家.姓名,
            "生命值": 玩家.生命值,
            "金币": 玩家.金币,
            "物品": 玩家.物品
        }
        
        with open(存档路径, "w", encoding="utf-8") as 文件:
            json.dump(玩家数据, 文件, ensure_ascii=False, indent=2)
        
        print(f"游戏已保存到{存档路径}!")
    
    def 加载游戏(self, 存档名称="save.json"):
        """加载游戏"""
        存档路径 = os.path.join(self.存档目录, 存档名称)
        
        if os.path.exists(存档路径):
            with open(存档路径, "r", encoding="utf-8") as 文件:
                玩家数据 = json.load(文件)
            
            from 玩家 import 玩家
            玩家实例 = 玩家(
                玩家数据["姓名"],
                玩家数据["生命值"],
                玩家数据["金币"]
            )
            玩家实例.物品 = 玩家数据["物品"]
            
            print(f"游戏已从{存档路径}加载!")
            return 玩家实例
        else:
            print(f"存档文件{存档路径}不存在!")
            return None

5. 游戏引擎(游戏引擎.py

python 复制代码
"""游戏引擎"""
from 玩家 import 玩家
from 场景 import 森林场景, 城堡场景, 洞穴场景
from 存档 import 存档管理

class 游戏引擎:
    """游戏引擎类"""
    def __init__(self):
        """初始构造功能"""
        self.玩家 = None
        self.场景 = {
            "森林": 森林场景(),
            "城堡": 城堡场景(),
            "洞穴": 洞穴场景()
        }
        self.存档管理 = 存档管理()
    
    def 开始游戏(self):
        """开始游戏"""
        print("欢迎来到文字冒险游戏!")
        print("========================")
        
        选择 = input("1. 新游戏 2. 加载游戏:")
        
        if 选择 == "1":
            姓名 = input("请输入你的名字:")
            self.玩家 = 玩家(姓名)
        elif 选择 == "2":
            self.玩家 = self.存档管理.加载游戏()
            if not self.玩家:
                姓名 = input("请输入你的名字:")
                self.玩家 = 玩家(姓名)
        else:
            姓名 = input("请输入你的名字:")
            self.玩家 = 玩家(姓名)
        
        self.游戏主循环()
    
    def 游戏主循环(self):
        """游戏主循环"""
        while True:
            self.玩家.显示状态()
            
            print("你可以去以下地方:")
            for i, 场景名称 in enumerate(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("谢谢游玩,再见!")
                break
            else:
                print("输入错误,请重新输入!")
            
            # 检查玩家是否死亡
            if self.玩家.生命值 == 0:
                print("游戏结束!")
                break

6. 主程序(main.py

python 复制代码
"""游戏入口"""
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, 参数): 初始化对象的属性
保存JSON json.dump(数据, 文件) 将数据保存为JSON格式
读取JSON json.load(文件) 从JSON文件读取数据
随机选择 random.choice(列表) 从列表中随机选择一个元素
主循环 while True: 游戏的主循环
条件判断 if 条件: 处理游戏中的选择

常见错误提醒

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

课后作业

巩固练习题

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

创意编程题

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

总结

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

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

学习交流

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

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

祝你学习愉快!

相关推荐
啧不应该啊1 小时前
Day1 python与c宏观区别
c语言·开发语言
XiYang-DING1 小时前
【Java EE】CAS(Compare And Swap)
java·开发语言·java-ee
OneT1me1 小时前
CVE-2026-31431 的C语言版本
c语言·开发语言·安全威胁分析
Li emily1 小时前
港股api接入指南:实时行情与历史数据获取
python·api·fastapi
AI技术增长2 小时前
Pytorch图像去噪实战(十三):DDIM加速扩散模型采样,让去噪从1000步降到50步
人工智能·pytorch·python
刀法如飞2 小时前
Python列表去重:从新手三连到高阶特技,20种解法全收录
python·算法·编程语言
小糖学代码2 小时前
LLM系列:1.python入门:16.正则表达式与文本处理 (re)
人工智能·pytorch·python·深度学习·神经网络·正则表达式
xun-ming2 小时前
AI时代Java程序员自救手册
java·开发语言·人工智能
张健11564096482 小时前
C++访问控制与友元
java·开发语言·c++