gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:59:44 26 4
gpt4 key购买 nike

更新:如果我的问题可能不够清楚,我很抱歉。我读过命令模式,但不幸的是我自己没有使用过。我试图弄清楚如何使用它(或其他一些模式)使游戏事件足够抽象,以便服务器可以使用单个 Process() 方法处理它们。我在这里的主要问题是确保游戏事件接收到足够的信息以实际执行它们需要执行的操作(例如,登录用户并将其添加到事件用户列表、发送 map 数据、移动玩家等)。非常感谢相关示例。

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

登录请求

  1. 开始游戏
  2. 点击“继续”
  3. 输入用户名和密码
  4. 点击“登录”
  5. 注销时无论您身在何处都能看到该角色

从客户端-服务器架构的角度来看,这是我现在正在做的事情:

[客户]

  1. 发送 SimpleTextNetworkMessage 到服务器 - {LogInRequest, UN:[UserName]|PW:[Password]}
  2. 使 UI 变暗并等待响应(超时:10 秒)
  3. 从服务器接收 SimpleTextNetworkMessage - {LogInSuccessResponse, [Player ID]}
  4. 发送 SimpleTextNetworkMessage 到服务器 - {GetPlayerInfoRequest, [Player ID]}
  5. 从服务器接收 SimpleDataNetworkMessage - {GetPlayerInfoResponse, [Player Info]}
  6. 向服务器发送 SimpleTextNetworkMessage - {GetMapInfoRequest, [Player ID]}
  7. 从服务器接收 SimpleDataNetworkMessage - {GetMapInfoResponse, [MapData]}
  8. 绘制屏幕

我的示例确定了发生的三个关键事件:

处理登录

验证用户提供的信息,从数据库下载玩家信息(HP、MP、最后位置等),并将玩家与 map 和连接相关联。

获取玩家信息

发回有关玩家的统计数据、装备、经验、当前 map ID 以及需要在 UI 上显示的任何其他信息。

获取 map 信息

向玩家发送有关 50 个方 block 半径内所有方 block 的信息...这应包括三层 map 的方 block 信息以及 NPC/怪物/玩家的位置和名称;当玩家移动时,将请求/更新更多 map 信息。

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

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);
}
}
}

最佳答案

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

从您的措辞来看,您的请求显然指向 Command Pattern .

我不是 C# 专家,很遗憾我无法评估 Google 提供的大量建议。这是一个可以帮助您入门的方法。 http://www.c-sharpcorner.com/UploadFile/cupadhyay/CommandPatternsInCS11142005021734AM/CommandPatternsInCS.aspx

关于c# - 在 MMORPG 中实现服务器端命令处理的可扩展方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1250402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com