按值排序的函数

时间:2014-11-11 15:09:05

标签: python python-3.x

我正在制作基于文本的角色扮演游戏,我认为一次拥有超过2名战士会更好。

所以我的战斗功能中有attack()功能。我想让我的程序用攻击者的名字来调用这个函数,比如attack("player")。这与所有在战斗中的人按顺序依赖于他们的速度(这是一个整数变量)。

我知道可以这样做:

if playerspeed<enemyspeed:
    attack(enemyname)
    attack("player")
if playerspeed>enemyspeed:
    attack("player")
    attack(enemyname)

但如果有例如四个战士,这样做会很痛苦。那么有什么明智的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您可以将自己的名字放在一个列表中,然后按攻击速度对其进行排序:

fighters = [(playerspeed, 'player'), (enemyspeed, enemyname)]
fighters.sort()
for speed, fighter in fighters:
    attack(fighter)

如果您为玩家和敌人使用了类,则可以将其速度存储在对象的属性中并按该属性排序,而不必使用信息创建元组:

fighters = [player, enemy]
fighters.sort(key=lambda f: f.speed)
for fighter in fighters:
    fighter.attack(fighters)

其中对象也有attack()个方法;在这里,我假设也许这种方法想知道谁参与了战斗。