2010-06-03 118 views
1

我的第一个问题在这里,网络通信,所以请不要在恶劣的,如果出事了:)一个回合的棋盘游戏

我目前一个CS的学生(来自德国,如果这个信息是任何使用;)),我们得到了一个可自由选择的编程任务,我们必须在C++/CLI Windows窗体应用程序中编写这些任务。
我的团队,其他两个人和我决定去参加一个网络兼容的棋盘游戏风险端口。

我们将工作分为3部分,即UI,游戏逻辑和网络。现在我们正在努力让所有的东西一起工作,而最大的问题在于如何让客户端彼此同步?

我们的方法到目前为止,每个客户端都具有计算和/或执行所有可能操作所必需的所有信息。事实上,除了游戏初始化阶段(添加玩家,选择地图等)之外,客户端可以获得所有信息,这需要一个“超级客户端”和一些额外的东西来控制事物。

这是我们的做法的标准场景:

  1. 玩家进行行动,行动是有效的,玩家客户端
  2. 动作是在网络上执行
  3. 行动派出上得到执行其他客户

到目前为止我们提出的设计(即没有或代码到目前为止),就像下面的伪序列图。


桂,控制器和网络工具所有可能的操作(即,其改变数据的所有行动),如从一个接口的方法。所以每个部分都可以通过一种方式来实现这个方法来完成他们的工作。

例与行动():

者侧的客户:

Player-->Gui.Action() 
Gui-->Controller.Action() 
Controller-->Logic.Action 
    (Logic.Action() == NoError)? 
    Controller-->Network.Action() 
Network-->Parser.ParseAction() 
Network.Send(msg) 

在所有其他客户端:

Network.Recv(msg) 
Network-->Parser.Deparse(msg) 
Parser-->Logic.Action() 
Logic-->Gui.Action() 

的问题:

这是一个可行的方法来完成我们的任务吗?
任何更好/更简单的方法呢?
建议,批评?

我们的知识(这样你就可以更好地针对您的答案):

我们对初学侧,与一个小团队关于编程的一个稍大的项目。 我们都有一些一般的编程经验和.Net库和Windows窗体的基本理解。

如果您需要更多信息,请随时询问。

回答

0

我所知道的是,我不会说C++是一种适合初学者的语言!我从来没有用过它,但我的朋友们把它理解为“一个人的语言”。我猜它会把毛发放在胸前。

我从来没有写过这样的应用程序,虽然有些人会说Winforms /厚客户正在回归,但我认为大多数人会做基于Web的开发。

我想WCF将是一个合乎逻辑的地方,但我之前没有将它用于点对点的东西。

你怎么知道哪些其他客户在那里,所以你可以和他们一起玩? 电话会议解决方案似乎使用集中式系统:拨打特定号码,并告诉您您是第一个加入会议的人。如果有人离开其他人仍然在那里。这可能更符合你的要求 - 让中央系统调解数据。如果两个客户端发送冲突的操作会发生什么?

有了一个中央系统,你可以建立直接的规则来管理游戏,而且管理起来会更容易。你可以在交易中包装肌动蛋白的处理,这样你就不会发生冲突。唯一的问题是保持所有的客户端同步;他们所要做的就是从中央服务器获得更新 - 但是他们什么时候这样做?他们是否只是轮询它,或者当中央服务器发生变化时,他们会“告知”它们?后者可能要好得多 - 但我不知道如何使用你提出的技术来做到这一点。

我希望有帮助。

+0

嗨, 感谢您的回答。 问题是,我们必须使用这些技术,即C++/CLI和.Net Windows窗体。甚至不可能使用其他.Net语言,我们的教授在这方面非常严格:)(不要问我为什么。) 我想说的是,初学者的事情是,我们所有人都知道C++和.NET的东西,至少理论方面。但是我们都没有任何“真实世界”编程经验,更不用说这个规模的项目了。 – randooom 2010-06-03 07:11:51

+0

是的,我们使用服务器/客户端方法。上例中的网络类只是整个网络的抽象概念。 但服务器只是在那里管理连接和客户端,并将传入的操作广播到所有其他客户端。通过上述方法,我们认为不需要给服务器更多的权力,因为每个客户都可以自己做计算和工作。 – randooom 2010-06-03 07:18:49

+0

当然听起来像你知道你在做什么。我只是抱歉,我没有任何现实世界的建议给你 - 这似乎适用。 – 2010-06-03 08:54:11

0

通常这个想法看起来不错。 为了在伪代码中证明这个想法,你可以设计一个小的原型。

因为你想构建的游戏是基于回合的 - 你需要保证网络传输。 为了简化数据传输,您可以使用proto buff

+0

thx,如果只是为了节省游戏,我们必须仔细研究序列化。一些新的学习:) – randooom 2010-06-03 11:24:18