0

我有一个项目来创建一个,它以某种方式从引擎中抽象出用户界面,从地图创建、站点线等中抽象出引擎。为了缩小焦点,我首先想要获取用户界面(玩家的客户端)和引擎工作。

我目前的想法是让客户端基本上是一个程序,它决定一个角色(玩家,怪物)轮到它做什么,并等待它再次移动。所以每个怪物都有一个客户,玩家也是如此。玩家的客户端打印地图,等待输入,将其发送到引擎,然后告诉玩家发生了什么。怪物的客户端除了不打印地图和使用 AI 代替键盘输入外,也是一样的。

在我走得更远之前,如果这似乎是一种模糊的做事方式,我的目标是学习,而不是写一个 roguelike。这是旅程,而不是目的地。

所以我需要选择哪种形式的最适合这个模型。

  1. 我第一次尝试使用管道,因为它们最简单,我为播放器编写了一个 UI,并编写了一个程序来输入指令,例如放置地图和播放器的位置。虽然这可行,但它只允许一个客户端通过标准输入和输出进行通信。
  2. 我考虑过让引擎成为一个守护进程,它在一个假脱机中查找,客户端在启动时创建每个客户端唯一的临时文件,以向引擎提供指令并接收反馈。
  3. 最后,我用套接字做了一些介绍性的编程。他们似乎可能是要走的路,并且可能有一天会在网上运行游戏。如果可能的话,我想使用一个更简单的解决方案,因为我不熟悉它们,所以更容易出错。
  4. 我总是乐于接受建议。
4

1 回答 1

0

我一直在尝试使用这些组合来解决类似的问题(多个客户端通过本地盒子上的单个守护程序进行交谈,大部分智能都被推到客户端中)。

  • mmap 用于共享大型数据 blob,使用 unix 域套接字、消息队列或用于通知的命名管道
  • 相同,但在每个 blob 中使用单个文件,而不是在 mmap 中将它们全部组合在一起
  • 相同,但没有文件或 mmap(换句话说,更像传统消息传递)

一般来说,我喜欢以这种方式将事物分解为单独的可执行文件的想法——例如,它确实使测试更容易。我认为方法的选择归结为使用模式——消息有多大,它们中的数据需要有多持久,你能负担得起多次通过网络堆栈获取基于套接字的消息的成本吗?的事情。您坚持使用 Linux 的事实使事情变得容易,例如,您不必担心消息队列的可移植性。

这个也适用:https ://stackoverflow.com/a/1428542/1264797

于 2012-03-13T16:41:12.397 回答