python

当前位置:首页 > python面向对象 > 当前文章

python面向对象

对象之间的交互组合实战

2020-05-14 52赞 老董笔记
每篇文章努力于解决一个问题!更多精品可移步文章底部。

  面向对象开篇就说要用1个战斗来学习面向对象,但是这几节课一直都是在学习概念,最多也就定义了个人类,这战争怎么打?这节课就定义人类和变异的狼类开战。

  要实现较为复杂战斗就得学会1个概念:类的组合。

  1个类某个属性的值是另外1个类的对象,这种情况就是类的组合,有了这种组合关系,对象之间才能交互起来,保卫战才可以打响。

  不过战争刚开始比较简单,人类只能会自带技能踢,和狼展开较量。类和类的关系也比较简单,如下:

# -*- coding:utf-8 -*-
import random

#人类
class Person:

    def __init__(self,my_name,my_blood):
        self.name = my_name  # 实例变量
        self.blood = my_blood

    # 人的技能:踢,wolf是1个狼类对象
    def kick(self,wolf):
        wolf.blood -= 20 # 被踢后血值-10
        print(f'{self.name}踢了{wolf.name},{wolf.name}血值降为{wolf.blood}')
        if wolf.blood < 1:
            print(f'{wolf.name}被杀')

# 狼类
class Wolf:
    def __init__(self,name,blood):
        self.name = name
        self.blood = blood

    def bite(self,person):
        person.blood -= 30
        print(f'{self.name}咬了{person.name},{person.name}血值降为{person.blood}')
        if person.blood < 1:
            print(f'{person.name}牺牲')


if __name__ =="__main__":
    p1 = Person('laodong1',100)
    w1 = Wolf('lang1',100)
    while True:
        if p1.blood <0 or w1.blood < 0:
            print('game over')
            break
        num = random.randint(1,10)
        if num > 5:
            p1.kick(w1)
            continue
        w1.bite(p1)
laodong1踢了lang1,lang1血值降为80
laodong1踢了lang1,lang1血值降为60
lang1咬了laodong1,laodong1血值降为70
lang1咬了laodong1,laodong1血值降为40
laodong1踢了lang1,lang1血值降为40
lang1咬了laodong1,laodong1血值降为10
lang1咬了laodong1,laodong1血值降为-20
laodong1牺牲
game over


  在战争中学习战争,人类在斗争中学习了各种武学和兵器,如无影脚、六脉神剑、火焰刀、一阳指等,每个人在斗争中可能使用以上各种手段,这样应该如何设计游戏呢?我们需要1个武功类、1个人类、1个狼类。给人类1个技能属性,属性值是武功类的对象,这样类和类就之间交互组合了。

# -*- coding:utf-8 -*-
import random

# 武功类
class GongFu:
    def __init__(self):
        pass

    def say(self,wolf,skill):
        print(f'{wolf.name}被{skill}所伤,{wolf.name}血值降为{wolf.blood}')

    # 无影脚
    def wuying_jiao(self,wolf):
        wolf.blood -= 20
        self.say(wolf,'无影脚')

    # 火焰刀
    def huoyan_dao(self,wolf):
        wolf.blood -= 25
        self.say(wolf,'火焰刀')

#人类
class Person:

    def __init__(self,my_name):
        self.name = my_name  # 实例变量
        self.blood = 100 # 默认都是100
        self.skill = GongFu() # 武功类的对象


# 狼类
class Wolf:
    def __init__(self,name):
        self.name = name
        self.blood = 120

    def bite(self, person):
        person.blood -= 30
        print(f'{self.name}咬了{person.name},{person.name}血值降为{person.blood}')


if __name__ =="__main__":
    p1 = Person('laodong1')
    wof1 = Wolf('lang1')
    while True:
        if p1.blood <0 or wof1.blood < 0:
            print('game over....')
            break
        num = random.randint(1,10)
        if num > 7:
            p1.skill.huoyan_dao(wof1)
            continue
        elif num > 4:
            p1.skill.wuying_jiao(wof1)
            continue
        wof1.bite(p1)
lang1咬了laodong1,laodong1血值降为70
lang1咬了laodong1,laodong1血值降为40
lang1被无影脚所伤,lang1血值降为100
lang1被无影脚所伤,lang1血值降为80
lang1咬了laodong1,laodong1血值降为10
lang1咬了laodong1,laodong1血值降为-20
game over....


文章评论

对象之间的交互组合实战文章写得不错,值得赞赏