Python - 比较两个列表并在列表中查找匹配值及其位置

时间:2013-07-29 13:39:22

标签: python python-2.7

我正在尝试制作一个基于回合制的角色扮演游戏,我正在研究转弯系统。

为了保持现在的简单,我试图按照他们的速度命令每个角色/敌人,然后以最高速度先行。下面是我的转弯系统代码的开始。

我想要做的一个例子是阅读Order[0](这将是禁食角色/敌人)并找出与之相关的角色/敌人。 Speed[0]Speed[3]给出了我4个字符的速度,enemySpeed[0]enemySpeed[4]给出了5个敌人的速度。

def Turn():
    Turn = [int(Speed[0]), int(Speed[1]), int(Speed[2]), int(Speed[3]), int(enemySpeed[0]), int(enemySpeed[1]),int(enemySpeed[2]), int(enemySpeed[3]), int(enemySpeed[4])]
    Order = sorted(Turn, key = int, reverse = True)

编辑:以下是有关玩家统计信息的一些信息。 在main()中:

    name = ['Ben','Ellis','Curt','Jen']
    HP = [100,100,100,100]
    exp = [0,0,0,0]
    lvl = [1,1,1,1]
    player1 = [name[0],HP[0],exp[0],lvl[0]]
    player2 = [name[1],HP[1],exp[1],lvl[1]]
    player3 = [name[2],HP[2],exp[2],lvl[2]]
    player4 = [name[3],HP[3],exp[3],lvl[3]]
    PLAYERS = [player1, player2, player3, player4]
    REGION = 'start'
    POS = '[x, y]'
    ITEMS = None
    SIGEVENTS = False
    gameData = [PLAYERS, REGION, POS, ITEMS, SIGEVENTS]

out of main():

def playerStats():
    global Attack, Defense, Speed, MaxHP
    Attack      = [0,0,0,0]
    Defense     = [0,0,0,0]
    Speed       = [0,0,0,0]
    MaxHP   = [0,0,0,0]
    for i in range(0,4):
        Attack[i]       =   lvl[i] * 1
        Defense[i]      =   lvl[i] * 2
        Speed[i]        =   lvl[i] * 3
        MaxHP[i]        =   lvl[i] * 4

    return Attack, Defense, Speed, MaxHP

2 个答案:

答案 0 :(得分:2)

不要只看只是的速度,而是看看你的玩家和敌人,然后设计一把钥匙来确定玩家的速度。

您没有分享有关如何定义玩家和速度的任何细节;我现在在这里使用一个数字:

players_and_enemies = range(8)

fastest = max(players_and_enemies, key=lambda p: int(Speed[i] if i < 4 else enemySpeed[i - 4]))

您可以根据数据结构简化此操作;例如,如果每个玩家和敌人拥有具有速度属性的对象,则可以在键功能中访问该属性。

max()返回key的最高值;如果您需要的只是最快的驱动程序,则无需对所有速度进行排序。

答案 1 :(得分:0)

Martijn Pieters已经指出了最重要的问题。尝试使用对象。尝试重新构建游戏中的对象,而不是单独管理它们的属性。

我会详细说明一下,也许我可以给你一些想法。

角色,无论是NPC还是PC,都是类的一个对象,看起来像这样:

class Character:
    def __init__ (self, name, xp = 0, level = 1, hp = 4, speed = 3, atk = 1, def_ = 2):
        self.name = name
        self.xp = xp
        self.level = level
        self.hp = self.curHp = hp
        self.speed = speed
        self.atk = atk
        self.def_ = def_
        self.inventory = []

现在使用此类可以实例化您的PC和NPC:

npcs = [Character (name) for name in ['Baldur', 'Lord Never', 'Ashyra'] ]

向您的班级添加方法可让您与其进行互动,例如:

class Character:
    [....]
    def takeDamage (self, dmg):
        self.curHp -= min (0, dmg - self.def_)

    def gainXP (self, xp):
        self.xp += xp
        #check for level up

    def takeItem (self, item):
        self.inventory.append (item)

    def useItem (self, item):
        item.activate ()
        self.inventory.remove (item)

或者为了按照速度排列所有角色,您可以使用:

charactersBySpeed = sorted (characters, key = -character.speed)

等等等等。我们的想法是使用面向对象的编程来为您的代码中的现实建模(甚至是游戏的虚拟现实)。