背景: 我协助开发一款多人游戏,主要使用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
}
如您所见,仅编译服务器时,预处理器定义用于排除图形和声音代码(看起来很丑)。
问题:
在客户端-服务器架构中,保持代码组织和清晰的最佳实践是什么?
谢谢!
编辑: 欢迎提供使用良好组织的开源项目示例 :)