Design patterns 如何管理数据的微小变化?

Design patterns 如何管理数据的微小变化?,design-patterns,multiplayer,Design Patterns,Multiplayer,我目前正在构建一个多人游戏系统,我有一个设计问题,关于如何管理大量对象之间的大量小数据变化 我将从一个例子开始:假设我有3个玩家:A、B和C。 A和B是友好的,敌人和C是友好的。这意味着,我必须向C表明A是敌人,B是友好的。 现在,我有两个不同的(但很小的)变化相同的数据。这只是一个例子。另一个变化是A进入隐形状态,B可以看到A,但C不能看到A。 如前所述,这些只是例子。它计划有更多和不同的球员数据状态,大部分在每个对象之间变化 我应该如何处理这个问题?大量的if块,或者是我错过了一些明显的设计

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

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


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

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


这不是一个非常简单的问题,也不是一个非常复杂的问题;如果真的很复杂,你还没有给我们足够的时间继续下去。

好吧,一个玩家的职业,里面有朋友的名单,还有敌人的名单


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

如果你正在与面向对象编程的概念作斗争,那么最好的办法就是牢牢掌握面向对象编程。您似乎没有一个明确的模型来说明需要存储哪些状态数据。尝试绘制游戏的“状态”图表;可以将其视为在给定时间游戏中存在哪些对象以及它们是如何组织的一个最小快照。类似于player.canSee(otherPlayer)的东西可以计算,不一定需要存储


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

如果您正在努力学习面向对象编程的概念,那么最好的方法就是牢牢掌握面向对象编程。您似乎没有一个明确的模型来说明需要存储哪些状态数据。尝试绘制游戏的“状态”图表;可以将其视为在给定时间游戏中存在哪些对象以及它们是如何组织的一个最小快照。类似于player.canSee(otherPlayer)的东西可以计算,不一定需要存储


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

你的问题是将状态看作是人们所能看到的所有排列。一般来说,你应该将国家视为情况的事实,并根据需要计算这些事实的个人观点

// 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。

你的问题是将状态视为人们所能看到的所有排列。一般来说,你应该将国家视为情况的事实,并根据需要计算这些事实的个人观点

// 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。

谢谢,我在示例中添加了更多内容。我的主要问题是,不仅存在两种不同的状态,而且存在很多不同的状态,而且每个玩家/对象的状态都可能不同。多亏了,我在示例中添加了更多的内容。我的主要问题是,不仅存在两种不同的状态,而且存在很多不同的状态,而且每个玩家/对象的状态都可能不同。我的想法是使用一种单独的方法,只将另一个玩家的“样子”翻译给给定的玩家,而不修改任何现有数据。这是你建议的,对吧?这取决于你想要的游戏/视觉效果的风格。你在写什么样的游戏?我希望您认识到,第一人称射击是一项相当雄心勃勃的事业,从头开始如果你以前从未写过游戏,那就从一个相当简单的2D游戏开始,了解它的工作原理(主循环、用户输入、绘图等)。哦,不,不,我写过很多游戏,有些甚至是在专业环境中。我现在做的甚至不是第一人称射击,正如我所说,这些只是例子。这可能意味着该问题使用了错误的示例。这也可能是完全错误的,因为我没有得到我希望得到的回应。然而,我得到了一分,这对我帮助很大。现在看来一切都很清楚了,所以我写这个问题一定很累了。无论如何谢谢你的帮助:)没有冒犯;)这是我的错,我把这个问题问错了。我的想法是使用一种单独的方法,在不修改任何现有数据的情况下,将另一个玩家的“样子”翻译给给定的玩家。这是你建议的,对吧?这取决于你想要的游戏/视觉效果的风格。你在写什么样的游戏?我希望您认识到,第一人称射击是一项相当雄心勃勃的事业,从头开始如果你以前从未写过游戏,那就从一个相当简单的2D游戏开始,了解它的工作原理(主循环、用户输入、绘图等)。哦,不,不,我写过很多游戏,有些甚至是在专业环境中。我现在做的甚至不是第一人称射击,正如我所说,这些只是例子。这可能意味着