背景: 我帮助开发了一个多人游戏,主要用 C++ 编写,使用标准的客户端-服务器架构。服务端可以自己编译,客户端和服务端一起编译,这样就可以托管游戏了。
问题
游戏将客户端和服务器代码合并到同一个类中,这开始变得非常麻烦。
例如,以下是您可能在普通类中看到的一小部分示例:
// Server + client
Point Ship::calcPosition()
{
// Do position calculations; actual (server) and predictive (client)
}
// Server only
void Ship::explode()
{
// Communicate to the client that this ship has died
}
// Client only
#ifndef SERVER_ONLY
void Ship::renderExplosion()
{
// Renders explosion graphics and sound effects
}
#endif
和标题:
class Ship
{
// Server + client
Point calcPosition();
// Server only
void explode();
// Client only
#ifndef SERVER_ONLY
void renderExplosion();
#endif
}
如您所见,仅在编译服务器时,预处理器定义用于排除图形和声音代码(看起来很难看)。
问题:
在客户端-服务器架构中保持代码有条理和整洁的最佳实践是什么?
谢谢!
编辑:也欢迎使用良好组织的开源项目示例:)