买了域名怎么建网站,河南百度推广公司,企业在线注册,中国住房和城乡建设部查询网站6关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素
1. 类名
类名#xff1a;某类事物的名… 关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素
1. 类名
类名某类事物的名称一般按照驼峰命名法起名。
比如说描述学校内的人可以分类为Teacher类Student类等。
class Teacher #定义了一个教师类
class Student #定义了一个学生类这一步需要解决的事对你所要处理的范畴进行分类。
2. 属性和方法
类的主体主要由属性和方法构成。就相当于一个事物名词可以拥有不同的属性可以用名词或形容词来描绘它。方法这类事物具有什么样的行为动词。
以学生类为例
class Student: #创建学生类clothes 校服 # 设置学生需要穿校服属性属于【类属性】def __init__(self,name,age): # 类的构造函数用于初始化类的内部状态为类的属性设置默认值self.namename # 定义name属性self.ageage # 定义age属性,属于【对象属性】def Learn(self): # 定义一个函数为类的函数称为方法它至少有一个参数self# 创建Learn方法print(f{self.age}岁的{self.name}要穿{self.clothes},正是喜欢学习的年纪!)TomStudent(Tom,13) # Tom是Student类的对象就是一个具体的学生。# 在这个过程中赋予类的Tom对象对应的属性name为Tom,age为13。
Tom.Learn() # Tom作为学生类的对象调用了学生类的Learn方法。
程序运行结果
二、以植物大战僵尸的为例的类的设计
1. 尝试分类 明显植物大战僵尸作为对抗类游戏可以分为两个大类别。植物类和僵尸类随着后续场景的元素加入可能还会有场景类等这些是可以逐渐完善的 其实在最开始设计的时候我只分了一个类别因为我发现这六项事物都有名字和生命值这两个属性是完全可以分成一个类的但是在后续的设计中发现虽然攻击性植物和僵尸都有攻击属性但是它们的攻击动作即方法是不同。所以类别的区分是需要有度的。
对于图片中已经提供的这六个对象可以分为两个大类Plant类和Zombie类。并依次找这六个事物的共同特征和技能分别设置为对应的属性和方法。
根据表格我选择将共有特征设为该类的属性特殊技能设为该类的方法方法是定义在类中的函数这个在定义函数时设置对应的参数后期具体的对象调用类的方法时将实参传递到方法的形参中。
定义Plant类即植物的属性与方法*【代码一】*
class Plant():def __init__(self,name,shengming):self.namenameself.shengmingshengming#植物属性介绍print({}的生命值是{}.format(self.name, self.shengming))def Create_sun(self,Create_sun,shake):self.Create_sunCreate_sunself.shakeshakeprint({}的每分钟生产阳光是{},它会自己晃速度为{}.format(self.name, self.Create_sun,self.shake))def shoot(self,color,velocity,kind):self.colorcolorself.velocityvelocityself.kindkindprint({}的颜色是{},发射子弹速度为{}子弹头为{}.format(self.name, self.color, self.velocity,self.kind))其中
def Creat_sun(self,Creat_sun,shake):self.Creat_sunCreat_sunself.shakeshake表示的是创建了一个Plant类的Create_sun 生产阳光方式该方式中有两个参数需要通过形式参数来传递具体的数值如形式参数Create_sun在后期具体赋值来传递该植物生产阳光的多少后期不止是向日葵多头向日葵也可以继承这个方法。
2. 创建对象调用类的属性和方法*【代码二】*
p1Plant(向日葵,50) # 调用类的属性形式参数与具体数值的位置一一对应
p1.Create_sun(50,6) #调用类的方法形式参数与具体数值的位置一一对应
print( ) #单纯为了美观打个空格p2Plant(寒冰射手,200)
p2.shoot(blue,75,刺客坚冰)
print( )此处设置了一个具体的对象p1和p2对应的具体植物就是向日葵和寒冰射手。 【代码一】和【代码二】合起来运行结果如下
3. 僵尸的继承
定义Zombie类即僵尸的属性与方法
class Zombie():attack 咬move 移动def __init__(self,name,shengming):self.namenameself.shengmingshengmingprint({}的生命值是{}它有{}和{}的属性.format(self.name, self.shengming,self.attack,self.move))设置一个具体的僵尸对象调用这个属性给大家看看
z1Zombie(铁桶僵尸,1000)运行结果 因为“咬”和“移动”是所有僵尸的属性且跟name不同每个植物僵尸都有名字但名字是不一样的所以这就是最开始所说的类属性name放在__init__()函数内属于对象属性。
其他的方法的建立就与植物的非常类似在此处不赘述。后面有完整代码。 这里说说继承。我在完成跳跃僵尸的打印时运用的类的继承。跳跃僵尸作为僵尸类的子类可以继承Zombie的nameshengmingmoveattack属性同时在jumpZombie子类中添加新的jump方法实现调用。
代码如下
class jumpZombie(Zombie): #这个jumpZombie子类的括号里放入类父类Zombie的名字def jump(self,jump):self.jump jumpprint( 我是{},我能跳{}丈高.format(self.name,self.jump))Z2jumpZombie(跳跃僵尸,1500)
Z2.own_weapon(竹竿)
Z2.other_attack(jump)
Z2.jump(8)三、代码实现
总体的代码实现
class Plant():def __init__(self,name,shengming):self.namenameself.shengmingshengming#植物属性介绍print({}的生命值是{}.format(self.name, self.shengming))def Create_sun(self,Create_sun,shake):self.Create_sunCreate_sunself.shakeshakeprint({}的每分钟生产阳光是{},它会自己晃速度为{}.format(self.name, self.Create_sun,self.shake))def shoot(self,color,velocity,kind):self.colorcolorself.velocityvelocityself.kindkindprint({}的颜色是{},发射子弹速度为{}子弹头为{}.format(self.name, self.color, self.velocity,self.kind))class Zombie():attack 咬move 移动def __init__(self,name,shengming):self.namenameself.shengmingshengmingprint({}的生命值是{}它有{}和{}的属性.format(self.name, self.shengming,self.attack,self.move))def own_weapon(self,weapon):self.weapon weaponprint({}的武器是{}.format(self.name, self.weapon))def other_attack(self,other_attack):self.other_attackother_attackprint(它的其他攻击方式为{}.format(self.other_attack))p1Plant(向日葵,50)
p1.Create_sun(50,6)
print( )p2Plant(寒冰射手,200)
p2.shoot(blue,75,刺客坚冰)
print( )z1Zombie(铁桶僵尸,1000)
z1.own_weapon(铁桶)
print( )#跳跃僵尸要开始继承啦
class jumpZombie(Zombie): #这个jumpZombie子类的括号里放入类父类Zombie的名字def jump(self,jump):self.jump jumpprint( 我是{},我能跳{}丈高.format(self.name,self.jump))Z2jumpZombie(跳跃僵尸,1500)
Z2.own_weapon(竹竿)
Z2.other_attack(jump)
Z2.jump(8)运行结果为 that’s all!