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