我正在尝试制作基于文本的冒险游戏。我的代码是这样的:
class NPC(object):
def __init__(self, health, damage, rate_of_fire):
self.health = health
self.damage = damage
def attack(self, opponent):
def attackopponent():
while self.health > 0 and opponent.health > 0:
opponent.health -= self.weapon.damage
sleep(self.rate_of_fire)
def opponentattack():
while self.health > 0 and opponent.health > 0:
self.health -= opponent.weapon.damage
sleep(opponent.rate_of_fire)
我已经研究了一个星期,所有的答案要么不起作用,要么我太新了解它们。有人可以向我解释如何同时运行这两种方法吗?
我希望每个NPC都有自己的射速和自身伤害,然后相互射击,直到其中一人死亡。
答案 0 :(得分:0)
答案是:在大多数Python版本中,你不能。你可以在Python中运行多线程(运行C代码模块),但C python有一个全局解释锁(GIL),这可以防止任何python函数的多线程。
可能,"真实"回答这里是你想要决定你的世界的粒度,然后排队功能以在那个粒度下运行... s.t.你的两个功能是"同时"如果他们都跑在同一个" tick" ...但这超出了简单的堆栈交换答案。
看看基于回合的游戏玩法是如何运作的 - 比如XCOM(或XCOM2)或者无冬之夜2.一个实时的例子(以及奖励积分,在python中)是eve-online(现在是免费的) 。你无法查看代码,但是如果你玩了一段时间,你就会明白每个实体每晚只有一次操作...所以发生在相同的"秒"就游戏而言,是同步的。
答案 1 :(得分:0)
问题比这个原始例子更复杂。
通常游戏有mainloop
执行仅产生小“步”的功能。因为每个函数在同一个循环中只做小的“步”,所以最后它看起来像所有函数同时工作。
class NPC(object):
def __init__(self, health, damage, rate_of_fire):
self.health = health
self.damage = damage
def attack(self, opponent):
while self.health > 0 and opponent.health > 0:
attackopponent(opponent)
opponentattack(opponent)
sleep(self.rate_of_fire)
def attackopponent(opponent):
if self.health > 0 and opponent.health > 0:
opponent.health -= self.weapon.damage
def opponentattack(opponent):
if self.health > 0 and opponent.health > 0:
self.health -= opponent.weapon.damage