2009-12-28 32 views
0

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

我将以一个例子开始:比方说,我有3名玩家:A,B和C. A对B和敌人C是友好的。这意味着,我必须证明C是A是敌人,B A很友善。 现在我有2个不同的(但很小)的相同数据的变化。这只是一个例子。另一种变化是A会隐身,B会看到A,但C不会看到A. 如上所述,这些仅仅是示例。计划拥有更多不同的玩家数据状态,大多数情况下会在每个对象之间变化。

我该如何管理?一吨如果块,还是有一些明显的设计模式,我错过了?由于这是一款多人游戏,因此对于这件事,将会有不止3名玩家/对象或国家。

回答

1

要做的最好的事情是尽量掌握面向对象的编程,如果你正在为这个概念而努力。你似乎没有一个清楚的模型来说明你需要存储哪些状态数据。尝试绘制游戏的“状态”图;把它看作是在给定时间游戏中存在什么对象的简单快照,以及它们是如何组织的。像player.canSee(otherPlayer)之类的东西可以计算出来,并不一定需要存储。

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

+0

我玩过这样一种想法,即只需将其他玩家的“看起来像”转换为给定玩家的独立方法,而不需要修改任何现有数据。那会是你的建议,对吧? – Chaosteil 2009-12-28 22:07:36

+0

这真的取决于你想要的游戏/视觉风格。你在写什么类型的游戏?我希望你认识到,从头开始,第一人称射手是一项相当雄心勃勃的任务。 =)如果你以前从未写过游戏,那么先从一个相当简单的2D游戏开始,了解它是如何工作的(主循环,使用用户输入,绘图等)。 – RMorrisey 2009-12-30 04:55:08

+0

哦,不,不,我已经写了大量的游戏,有些甚至在专业的环境中。我现在做的甚至不是第一人称射击游戏,正如我所说的,这些仅仅是一些例子。这可能意味着这个问题出现了错误的例子。这可能也是完全错误的,因为我没有完全得到我希望得到的答复。但是,我得到了一个指针,但是这对我很有帮助。现在看起来似乎很清楚,所以我一定写了这个问题,真的很累。无论如何感谢您的帮助:) – Chaosteil 2010-01-01 15:51:56

1

那么,一个球员的类,并在其中列出的朋友,以及敌人名单。

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

+0

谢谢,我在示例中添加了更多内容。我的主要问题是,不仅有两种不同的状态,而且还有很多,并且它们可以在每个玩家/对象之间有所不同。 – Chaosteil 2009-12-28 21:34:02

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,直到形势的变化。