在MMORPG中实现服务器端命令处理的可扩展方法是什么?

时间:2009-08-09 02:21:31

标签: c# architecture

更新:如果我的问题不够明确,我很抱歉。我已经读过关于命令模式的内容,但遗憾的是我自己没有使用它。我试图找出如何使用它(或其他一些模式)来使游戏事件足够抽象,服务器可以使用单个Process()方法处理它们。我主要挂断的是确保游戏事件接收足够的信息以实际完成他们需要做的事情(例如,登录用户并将其添加到活动用户列表,发送地图数据,移动玩家等)。我们非常感谢相关的例子。

我对游戏开发很陌生,但决定在业余时间开始研究(相对)简单的2D MMORPG。我认为自己是一个非常有能力的程序员,我有很好的技能基础,但我仍然在努力解决与客户端 - 服务器游戏相关的一些设计问题。具体来说,我很难想到一种可扩展的方法来处理命令。让我提供一个功能性的例子:

登录请求

  1. 开始游戏
  2. 点击“继续”
  3. 输入用户名和密码
  4. 点击“登录”
  5. 在您退出时查看您的角色
  6. 从客户端 - 服务器架构的角度来看,这就是我现在正在做的事情:

    [客户]

    1. 向服务器发送 SimpleTextNetworkMessage - {LogInRequest,UN:[UserName] | PW:[Password]}
    2. 使UI变暗并等待响应(超时:10秒)
    3. 从服务器接收 SimpleTextNetworkMessage - {LogInSuccessResponse,[玩家ID]}
    4. 向服务器发送 SimpleTextNetworkMessage - {GetPlayerInfoRequest,[玩家ID]}
    5. 从服务器接收 SimpleDataNetworkMessage - {GetPlayerInfoResponse,[玩家信息]}
    6. 向服务器发送 SimpleTextNetworkMessage - {GetMapInfoRequest,[Player ID]}
    7. 从服务器接收 SimpleDataNetworkMessage - {GetMapInfoResponse,[MapData]}
    8. 绘制屏幕
    9. 我的示例确定了发生的三个关键事件:

      处理登录

      验证用户提供的信息,从数据库(HP,MP,最后位置等)下载播放器信息,并将播放器与地图和连接相关联。

      获取玩家信息

      发回有关玩家的统计数据,设备,经验,当前地图ID以及需要在用户界面上显示的任何其他内容的信息。

      获取地图信息

      向玩家发送有关50平方米范围内所有牌块的信息......这应该包括三层地图的牌组信息以及NPC /怪物/牌手的位置和名称;当玩家移动时,将会请求/更新更多地图信息。

      您可以看到每个过程都不​​同,需要不同的信息。在服务器端,我该怎么做:

      while (ServerIsRunning)
      {
         foreach (Client c in clients)
         {
            eventQueue.AddList(c.ReceiveAll());
         }
      
         foreach(GameEvent event in eventQueue)
         {
            event.Process();
         }
      
         int[] keys = messageQueue.Keys;
      
         foreach (int key in keys)
         {
            Client c = clients.Get(key);
      
            foreach(NetworkMessage message in messageQueue[key])
            {
               c.Send(message);
            }
         }
      }
      

1 个答案:

答案 0 :(得分:1)

当我读到你所问的内容时,你似乎在寻求“一种实现命令处理的可扩展方式”。

根据您的说法,您的请求显然指向Command Pattern

我不是C#人,很遗憾,我无法评估Google提供的大量建议。这是一个让你入门的人。 http://www.c-sharpcorner.com/UploadFile/cupadhyay/CommandPatternsInCS11142005021734AM/CommandPatternsInCS.aspx