0

我正在尝试制作基于回合的 RPG,目前正在研究回合系统。

现在为了简单起见,我尝试按每个角色/敌人的速度排序,然后最高速度排在第一位。下面是我的转向系统代码的开始。

我想做的一个例子是阅读Order[0](这将是禁食的角色/敌人)并找出与之相关的角色/敌人。Speed[0]toSpeed[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]

超出主要():

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
4

2 回答 2

2

不要只看速度,而是要看你的玩家和敌人,并设计一个关键来确定什么玩家的速度。

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

players_and_enemies = range(8)

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

您很可能可以根据您的数据结构来简化它;例如,如果每个玩家和敌人都有具有速度属性的对象,则可以在 key 函数中访问该属性。

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

于 2013-07-29T13:46:56.377 回答
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)

等等等等。这个想法实际上是使用面向对象的编程来对代码中的现实(甚至是游戏的虚构现实)进行建模。

于 2013-07-29T19:33:19.667 回答