我正在设计一个仅限网络的游戏。我想在服务器端和客户端之间共享存储在C ++类中的游戏数据。
这样可以将数据放在同一个地方,从而简化维护工作。但是,我有一个问题 因为:
换句话说,我不想在服务器上安装图形库,反之亦然。
该课程可能如下所示:
class Fire : public Spell {
private:
/* some data */
public:
void execute(Player &p)
{
// call server actions
}
void draw(Player &p)
{
// call rendering and such
}
};
Execute是仅用于服务器的功能,draw用于客户端。我真的不想用 用于确定数据在哪一侧的宏,因为它往往是丑陋且不可维护的。
我正在寻找一种精心设计的方法来实现这一目标。
你会做什么/使用什么?
答案 0 :(得分:5)
我认为您应该得出分裂课程所需的结论 并从Spell开始制作两个课程:
//put here all common spell things
class Spell{
};
//add to spell the server logic
class SpellLogic: public Spell{
public:
virtual void execute(Player &p);
};
//add here the client graphic
class SpellGraphic: public Spell{
public:
virtual void draw(Player &p);
};
每个法术推导将被分割为两个。
客户端将使用Graphics类,服务器将使用逻辑。
答案 1 :(得分:0)
虽然我同意@SHR这可能意味着你需要分开类,有些情况下在客户端和服务器之间共享代码是有意义的(特别是当涉及数据表示或从另一方调用代码时,你的流更好而不是消息传递)
在这种情况下,我建议使用一个好的RPC库,例如谷歌的protocol buffers