0

我目前正在构建一个多人游戏系统,并且我有一个关于如何管理大量对象之间的大量小数据变化的设计问题。

我将从一个例子开始:假设我有 3 个玩家:A、B 和 C。A 与 B 友好,与 C 为敌。这意味着,我必须向 C 表明 A 是敌人,B 表明 A 是友好的。现在我有相同数据的 2 个不同(但很小)的变化。这只是一个例子。另一种变化是 A 进入隐身状态,B 可以看到 A,但 C 不能看到 A。如前所述,这些只是示例。计划有更多不同状态的玩家数据,每个对象之间大多不同。

我应该如何管理这个?大量的 if 块,还是我错过了一些明显的设计模式?由于这是一款多人游戏,因此将不仅仅是 3 个玩家/对象或状态。

4

3 回答 3

1

好吧,一个玩家的类,其中有一个朋友列表和一个敌人列表。

这要么是一个非常简单的问题,要么是一个非常复杂的问题;如果真的很复杂,你还没有给我们足够的继续。

于 2009-12-28T21:25:23.897 回答
1

最好的办法是尝试扎实掌握面向对象的编程,如果您正在为这个概念而苦苦挣扎。似乎您对需要存储的状态数据没有明确的模型。尝试绘制游戏的“状态”;将其视为在给定时间游戏中存在哪些对象以及它们如何组织的最小快照。可以计算像 player.canSee(otherPlayer) 这样的东西,不一定需要存储。

即使您可能根本不会使用数据库,但您可能会发现阅读和练习关系数据库设计很有帮助。关系设计的概念将帮助您以清晰、一致的方式组织您的想法和存储信息。

于 2009-12-28T21:58:51.613 回答
1

您的问题是将状态视为人们可以看到的所有排列。通常,您应该将状态视为情况的事实,并根据需要计算对这些事实的个人看法。

// pseudocode - make it properly object oriented for best results
struct player
{
    int teamNumber;
    bool hidden;
};

bool is_friend(player other_guy)
{
    return me.teamNumber == other_guy.teamNumber;
}

bool can_see(player other_guy)
{
    return (is_friend(other_guy) || !other_guy.hidden);
}

如果一个玩家(例如,A)看不到另一个玩家(例如,B),那么在情况发生变化之前,您不要将玩家 B 的信息发送给玩家 A。

于 2009-12-31T23:49:54.560 回答