关于定时MUD游戏设计的问题

2024-03-29 11:58:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试建立一个多人互动小说游戏

我正处于设计/概念化阶段,遇到了一个我无法想出解决方案的问题。我希望一些更有经验的程序员能给我一些建议。在

这是我能解释清楚的问题。当玩家决定执行一个动作时,他会向服务器发送一个命令。然后,服务器处理该命令,确定是否可以执行该操作,然后执行该操作或对无法执行该操作的原因作出响应。动作可能失败的一个原因是玩家正忙着做别的事情。例如,如果一个玩家正在战斗中,刚刚挥舞了一把巨大的大刀,他可能需要3秒钟才能重复这个动作。如果玩家试图再次挥杆到很快,游戏将作出反应,指示他必须等待x秒才能这样做。现在,这个我可以很容易地设计出来。我面临的问题是如何从人工智能生物中复制这种行为。所有由服务器自己执行的事件,也就是说不是对玩家所做的事情的即时反应,都必须是时间敏感的。某个邪恶的怪物对你施了一个咒语,但是必须等30秒才能再次施法。。。我想我可能会将所有这些事件添加到某种事件队列中,但是如何使事件队列具有时间敏感性呢?在


Tags: 命令服务器游戏时间玩家事件原因小说
3条回答

好吧,你的人工智能控制实体有某种“我下一步要做什么?”方法,对吗?只要让这个方法返回“我很忙,继续做我正在做的事情”的结果,而另一个操作正在进行中。在

例如

class ToughGuy(AI):
   Action_Idle, Action_BroadswordSwing, Action_CastingMagic = range(3)

   MagicRange = 10
   MagicTime = 8
   MeleeRange = 4
   MeleeTime = 2

   def __init__(self):
      self.action = ToughGuy.Action_Idle
      self.actiontimer = 0

   def Update(self, timestep):
      if self.actiontimer <= 0:
         self.action = ToughGuy.ActionIdle
      else
         self.actiontimer -= timestep

      if self.action == ToughGuy.Action_Idle:
         global player # don't do this
         if self.AmIFacing(player):
            distance = DistanceBetween(self, player)
            if distance < ToughGuy.MeleeRange:
               self.action = ToughGuy.Action_BroadswordSwing
               self.actiontimer = ToughGuy.MeleeTime
            elif distance < ToughGuy.MagicRange:
               self.action = ToughGuy.Action_CastingMagic
               self.actiontimer = ToughGuy.MagicTime

等等。对不起,变量编码标准。。。;)

MUDs动作通常在“滴答声”上执行,而不是立即执行——这允许延迟的有限影响,并允许怪物的命令被插入队列并得到公平的处理。在

就我个人而言,我不喜欢这种方法,但99%的mud都使用它。您需要设计一个健壮的命令队列和事件队列,它可以同时处理AI和用户命令。然后你可以添加“虚拟延迟”到AI命令中,这些命令可能是预定义的,或者是所有用户延迟的平均值,或者任何你喜欢的东西。在

人工智能是客户。在

他们只是“服务器的一部分”,只是在最遥远的地方。它们实际上在主游戏引擎之外。他们是没有人的专业客户。在

人工智能客户端与服务器的接口与人类客户端相同。在

相关问题 更多 >