AI大模型从0到1记录学习 day10
第 10 章 面相对象案例:愤怒的小鸟
10.1 游戏背景
在这个模拟的愤怒的小鸟游戏世界里,绿色的小猪偷走了小鸟们的蛋,这引发了小鸟们的愤怒,它们决定展开反击。每只小鸟都具有独特的颜色,并且各自拥有不同的技能,玩家需要操控这些小鸟,利用它们的技能去攻击小猪们建造的各种障碍物,从而达成击败小猪、夺回鸟蛋的目标。
10.2 类的设计思路
10.2.1 Birds 基类
1)设计目的
作为所有小鸟类的基类,它定义了小鸟的通用属性和行为,为后续具体小鸟类的扩展提供基础框架,体现了面向对象编程中的抽象和封装思想。
2)属性设计
name:用于标识每只小鸟的名称,方便区分不同个体。
color:代表小鸟的颜色,这是小鸟的一个显著特征,在游戏中可以对应不同类型的小鸟。
skill_description:描述小鸟所具备的独特技能,让玩家了解每只小鸟的特殊能力。
3)方法设计
fly():描述小鸟飞行的基本动作,是小鸟在游戏中的常见行为,所有子类都可以重写该方法来展示不同的飞行特点。
call():模拟小鸟发出叫声的行为,同样可以被子类重写以体现不同小鸟的叫声差异。
use_skill():用于触发小鸟的特殊技能,展示小鸟使用技能的情况,子类可以根据自身技能特点进行相应实现。
10.2.2 具体小鸟子类(RedBirds、YellowBirds、BlueBirds)
1)设计目的
继承自 Birds 基类,每个子类代表一种特定颜色的小鸟,它们在继承基类属性和方法的基础上,重写部分方法以展示不同小鸟的独特行为和技能,体现了面向对象编程中的继承和多态思想。
2)属性设计
通过调用基类的 init 方法,初始化各自的 name、color 和 skill_description 属性,确保每只小鸟都有自己的独特标识和技能。
3)方法设计
fly():重写基类的 fly() 方法,展示不同小鸟的飞行特点,如红鸟以稳定速度飞行,黄鸟快速飞行,蓝鸟优雅飞行。
call():重写基类的 call() 方法,模拟不同小鸟的叫声,增加游戏的趣味性。
10.2.3 Obstacle 类
1)设计目的
代表游戏中的障碍物,如木头堡垒、石头塔楼等,负责处理障碍物被小鸟攻击的逻辑,与小鸟类进行交互,体现了面向对象编程中的对象交互和封装思想。
2)属性设计
name:标识障碍物的名称,方便区分不同类型的障碍物。
strength:表示障碍物的强度,即它能够承受的伤害值,当强度降为 0 时,障碍物被摧毁。
3)方法设计
be_attacked(bird):模拟障碍物被小鸟攻击的过程,根据小鸟的类型计算伤害,并更新障碍物的强度,同时输出攻击和受损信息,让玩家了解游戏进展。
10.3 方法设计思路
10.3.1 Birds 类的方法
1)fly()
作为通用的飞行方法,提供了小鸟飞行的基本描述,子类可以根据自身特点进行个性化实现,以体现不同小鸟的飞行风格。
2)call()
模拟小鸟发出叫声的行为,为游戏增加生动性,子类可以重写该方法来展示不同小鸟的叫声特点。
3)use_skill()
用于触发小鸟的特殊技能,通过输出技能描述,让玩家了解小鸟使用技能的情况,不同子类可以根据自身技能进行不同的实现。
10.3.2 具体小鸟子类的方法
fly() 和 call():重写基类的方法,根据不同小鸟的特点进行个性化实现,展示不同小鸟的飞行和叫声差异,体现了多态性。
10.3.3 Obstacle 类的方法
be_attacked(bird):接收一个小鸟对象作为参数,根据小鸟的类型计算伤害,并更新障碍物的强度。通过判断障碍物的强度是否小于等于 0,输出障碍物是否被摧毁的信息,实现了障碍物与小鸟之间的交互逻辑。
通过这样的类和方法设计,整个游戏模拟程序具有良好的扩展性和可维护性,方便后续添加更多类型的小鸟和障碍物,以及实现更复杂的游戏逻辑。
10.4 代码实现
定义鸟类基类
class Birds:
def init(self, name, color, skill_description):
self.name = name
self.color = color
self.skill_description = skill_description
def fly(self):
print(f"{self.name} 正在飞行...")
def call(self):
print(f"{self.name} 发出叫声...")
def use_skill(self):
print(f"{self.name} 使用了技能:{self.skill_description}")
定义红鸟子类
class RedBirds(Birds):
def init(self):
super().init(“红火”, “红色”, “撞击前方障碍物,造成大量伤害”)
def fly(self):
print("红火以稳定的速度向前飞行...")
def call(self):
print("红火发出 'wei呀....' 的叫声")
定义黄鸟子类
class YellowBirds(Birds):
def init(self):
super().init(“小黄”, “黄色”, “瞬间加速,穿透薄障碍物”)
def fly(self):
print("小黄快速向前飞行...")
def call(self):
print("小黄发出 '啾啾啾....' 的叫声")
定义蓝鸟子类
class BlueBirds(Birds):
def init(self):
super().init(“小蓝”, “蓝色”, “分裂成三只小鸟,分散攻击”)
def fly(self):
print("小蓝优雅地向前飞行...")
def call(self):
print("小蓝发出 '叽叽叽....' 的叫声")
定义障碍物类
class Obstacle:
def init(self, name, strength):
self.name = name
self.strength = strength
def be_attacked(self, bird):
print(f"{bird.name} 冲向了 {self.name}")
bird.use_skill()
if isinstance(bird, RedBirds):
damage = 80
elif isinstance(bird, YellowBirds):
damage = 50
elif isinstance(bird, BlueBirds):
damage = 30 * 3 # 分裂成三只,每只造成 30 点伤害
self.strength -= damage
if self.strength <= 0:
print(f"{self.name} 被摧毁了!")
else:
print(f"{self.name} 还剩余 {self.strength} 点强度")
模拟游戏过程
if name == “main”:
# 创建不同颜色的小鸟
red_bird = RedBirds()
yellow_bird = YellowBirds()
blue_bird = BlueBirds()
# 创建障碍物
obstacle1 = Obstacle("木头堡垒", 100)
obstacle2 = Obstacle("石头塔楼", 200)
# 红鸟攻击木头堡垒
obstacle1.be_attacked(red_bird)
# 黄鸟攻击石头塔楼
obstacle2.be_attacked(yellow_bird)
# 蓝鸟攻击石头塔楼
obstacle2.be_attacked(blue_bird)