设为首页 加入收藏

TOP

Python学习日记(二十二) 初识面向对象(一)
2019-09-06 00:28:30 】 浏览:30
Tags:Python 学习 日记 二十二 初识 面向 对象

引子

假设我们要开发一个关于飞机大战的游戏,那么游戏的里面就会有两个角色,分别是属于玩家操控的战机和敌方的战机,并且两个战机都有不同的技能或攻击方式,现在我们用自己目前所学的去写出下面的这些代码:

def Fighter(name,atk,hp,speed): 
    fighter = {
        'name' : name,          #战机的名字
        'atk' : atk,            #战机的攻击力
        'hp' : hp,              #战机的血量
        'speed' : speed         #战机的速度
    }
    return fighter

def EnemyFighter(name,atk,hp,speed,kind):
    enemyfighter = {
        'name' : name,          #敌机的名字
        'atk' : atk,            #敌机的攻击力
        'hp' : hp,              #敌机的血量
        'speed' : speed,        #敌机的速度
        'kind' : kind           #敌机的种类
    }
    return enemyfighter

我们在写好了这些属性之后就可以生成敌方的战机和玩家的战机:

playerFighter1 = Fighter('Player1',200,1500,300)
playerFighter2 = Fighter('Player2',150,2000,280)
Boss1 = EnemyFighter('lazerBoss',1000,7000,50,'Boss')
Monster1 = EnemyFighter('Monster1',100,200,150,'Monster')
print(playerFighter1)       #{'name': 'Player1', 'atk': 200, 'hp': 1500, 'speed': 300}
print(playerFighter2)       #{'name': 'Player2', 'atk': 150, 'hp': 2000, 'speed': 280}
print(Boss1)                #{'name': 'lazerBoss', 'atk': 1000, 'hp': 7000, 'speed': 50, 'kind': 'Boss'}
print(Monster1)             #{'name': 'Monster1', 'atk': 100, 'hp': 200, 'speed': 150, 'kind': 'Monster'}

那么在生成好了这些对象之后,我们还缺的是它们不同的攻击方法,因此我们要在它们的方法中再添加一个方法再去调用

def Fighter(name,atk,hp,speed): #定义一个战机的属性
    fighter = {
        'name' : name,                  #战机的名字
        'atk' : atk,                    #战机的攻击力
        'hp' : hp,                      #战机的血量
        'speed' : speed,                #战机的速度
    }
    def playerAttack(enemyfighter):             #玩家攻击函数
        enemyfighter['hp'] -= fighter['atk']
        print('{0}被{1}攻击了,损失了{2}HP!'.format(enemyfighter['name'],fighter['name'],fighter['atk']))
    fighter['playerAttack'] = playerAttack
    return fighter

def EnemyFighter(name,atk,hp,speed,kind):
    enemyfighter = {
        'name' : name,          #敌机的名字
        'atk' : atk,            #敌机的攻击力
        'hp' : hp,              #敌机的血量
        'speed' : speed,        #敌机的速度
        'kind' : kind           #敌机的种类
    }
    def enemyFighterAttack(fighter):             #敌机攻击函数
        fighter['hp'] -= enemyfighter['atk']
        print('{0}被{1}攻击了,损失了{2}HP!'.format(fighter['name'],enemyfighter['name'],enemyfighter['atk']))
    enemyfighter['enemyFighterAttack'] = enemyFighterAttack
    return enemyfighter

playerFighter1 = Fighter('Player1',200,1500,300)
playerFighter2 = Fighter('Player2',150,2000,280)
Boss1 = EnemyFighter('lazerBoss',1000,7000,50,'Boss')
Monster1 = EnemyFighter('Monster1',100,200,150,'Monster')
print(playerFighter1)       #{'name': 'Player1', 'atk': 200, 'hp': 1500, 'speed': 300, 'playerAttack': 
                  <function Fighter.<locals>.playerAttack at 0x0000000002138A60>}
print(playerFighter2) #{'name': 'Player2', 'atk': 150, 'hp': 2000, 'speed': 280, 'playerAttack':
                  <function Fighter.<locals>.playerAttack at 0x0000000002138D08>}
print(Boss1) #{'name': 'lazerBoss', 'atk': 1000, 'hp': 7000, 'speed': 50, 'kind': 'Boss', 'enemyFighterAttack':
                  <function EnemyFighter.<locals>.enemyFighterAttack at 0x0000000002138D90>}
print(Monster1) #{'name': 'Monster1', 'atk': 100, 'hp': 200, 'speed': 150, 'kind': 'Monster', 'enemyFighterAttack':
                  <function EnemyFighter.<locals>.enemyFighterAttack at 0x0000000002138E18>}

现在调用这两个功能代码:

print(playerFighter1)                         #{'name': 'Player1', 'atk': 200, 'hp': 1500, 'speed': 300, 'playerAttack': 
                              <function Fighter.<locals>.playerAttack at 0x0000000002138A60>}
Boss1['enemyFighterAttack'](playerFighter1) #Player1被lazerBoss攻击了,损失了1000HP! print(playerFighter1) #{'name': 'Player1', 'atk': 200, 'hp': 500, 'spe
Python学习日记(二十二) 初识面向对象(一) https://www.cppentry.com/bencandy.php?fid=77&id=250274

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python—导入自定义的模块和包(.. 下一篇Python—导入自定义的模块和包,..