我的第一个问题,所以如果出现问题请不要苛刻:)
我目前是CS学生(来自德国,如果这个信息有用;))我们得到了一个可自由选择的编程作业,我们必须在C ++ / CLI Windows窗体应用程序中编写。<登记/> 我的团队,另外两个人和我,决定选择与网络游戏风险相关的网络兼容端口。
我们将工作划分为3个部分,即UI,游戏逻辑和网络。现在,我们必须让所有事情一起工作,而最重要的问题是,如何让客户彼此保持同步?
到目前为止,我们的方法是,每个客户都拥有计算和/或执行所有可能操作所需的所有信息。实际上,客户除了游戏初始化阶段(添加玩家,选择地图等)之外,还有所有可用的信息,这需要一个“超级客户”和一些额外的东西来控制事物。
这是我们方法的标准方案:
到目前为止我们提出的设计(即目前没有或代码),类似于下面的伪序列图。
Gui,Controller and Network将所有可能的操作(即所有更改数据的操作)作为接口的方法实现。因此,每个部分都可以以完成工作的方式实现该方法。
Action()示例:
在玩家方的客户端:
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 :(得分:0)
我所知道的是,我不会说C ++是初学者的语言!我从未使用它,但是我的朋友将它描述为“男人的语言”。我想它会把毛发放在胸前。
我从来没有写过这样的应用程序,虽然有些人会说Winforms /胖客户端正在回归,但我认为那里的大部分人都会进行基于网络的开发。
我想WCF是一个合乎逻辑的观察点,但我之前并没有将它用于点对点的东西。
你怎么知道哪些客户在那里,所以你可以玩它们? 电话会议解决方案似乎使用集中式系统:您拨入特定号码,它会告诉您第一个加入会议的人。如果有人离开,其他人仍然在那里。这可能是您所追求的更多 - 让中央系统调解数据。如果两个客户端发送冲突的操作会发生什么?
使用中央系统,您可以构建直接的规则来管理游戏,并且管理起来更容易。您可以在事务中包含对actin的处理,以便您不会发生冲突。唯一的问题是保持所有客户同步;他们所要做的只是从中央服务器获取更新 - 但他们什么时候这样做?他们只是轮询它还是在发生变化时被中央服务器“告知”?后者可能要好得多 - 但我不知道你是如何使用你提议的技术来做的。
我希望有所帮助。
答案 1 :(得分:0)
一般来说这个想法看起来还不错。 为了在伪代码中证明这个想法,你可以设计小型原型。
因为,您想要构建的游戏是基于回合制的 - 您需要保证网络传输。 对于数据传输简化,您可以使用proto buff库