回合制战斗系统

时间:2021-05-04 16:10:23

标签: python class

我试图找出一个依赖于我要调用的变量 speed 的转弯系统。此变量将确定玩家之间所有 speed 总数中的次数。玩家人数可能会发生变化,他们的速度也会发生变化。

假设我有以下代码。

class player(object):
    def __init__(self, id, speed):
        self.id = id # id is what player they are, id = 3 means player3
        self.speed = speed

players = [player(1, 4), player(2, 9), player(3, 6), player(4, 5)]

总转数为 24,这是所有速度相加的总和。以player3为例,在预定的24回合中,他们会走6次。

使这变得棘手的事情是我希望这些转弯尽可能分开。唯一将玩家 3 的每个回合分开的东西,将是其他玩家的回合。

所需的输出是按照玩家 id 的回合顺序排列的列表。下面显示了一个更简单的示例以及所需的输出。

class player(object):
    def __init__(self, id, speed):
        self.id = id # id is what player they are, id = 3 means player3
        self.speed = speed

players = [player(1, 2), player(2, 4), player(3, 6)]

# I'm calling the desired output turnList
>>turnList = [3, 2, 3, 2, 3, 1, 3, 2, 3, 2, 3, 1] # potentially shortened to [3, 2, 3, 2, 3, 1]

另一个不需要的条件是玩家将按照他们的速度顺序前进,注意在示例中玩家 3 先行,因为他们的速度最高,其次是玩家 2,然后是玩家 1。

我的问题是如何从给定的玩家列表中获取,并根据这些条件依次获取玩家 id 的输出。尽可能直言不讳地询问,我希望代码获得所需的输出,turnList。

1 个答案:

答案 0 :(得分:1)

这是一个长期解决的问题……如果您是地下城主。每一个都是一个速度。因此,将整个时间段(称为“回合”)划分为 N 个时间间隔,其中 N 是玩家的速度。然后将玩家的回合分配到每个间隔的中间。例如,玩家 2 有 4 个回合。将回合分成4个相等的间隔:

[0.00, 0.25]
[0.25, 0.50]
[0.50, 0.75]
[0.75, 1.00]

将玩家的回合分配到每个间隔的中心:

[0.00, 0.25]    0.125
[0.25, 0.50]    0.375
[0.50, 0.75]    0.625
[0.75, 1.00]    0.875

...还有玩家 1 的回合时间。

对所有玩家执行同样的操作,并制作一个元组列表:(turn_time, id)

(0.250, 1)
(0.750, 1)
(0.125, 2)
(0.375, 2)
(0.625, 2)
(0.875, 2)
(0.083, 3)
(0.250, 3)
(0.417, 3)
(0.583, 3)
(0.750, 3)
(0.917, 3)

对列表进行排序,这就是您的回合安排。

请注意,您可能希望以其他方式解决冲突:简单排序将始终优先考虑具有较低 ID# 的玩家——在本例中为玩家 1 和 3。

我相信您可以从这里处理代数和编码。

相关问题