在服务器和客户端之间使用相同的数据

时间:2014-09-22 10:04:14

标签: c++

我正在设计一个仅限网络的游戏。我想在服务器端和客户端之间共享存储在C ++类中的游戏数据。

这样可以将数据放在同一个地方,从而简化维护工作。但是,我有一个问题 因为:

  1. 在服务器端,只需要逻辑
  2. 在客户端,您想要绘制,渲染等
  3. 换句话说,我不想在服务器上安装图形库,反之亦然。

    该课程可能如下所示:

    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用于客户端。我真的不想用 用于确定数据在哪一侧的宏,因为它往往是丑陋且不可维护的。

    我正在寻找一种精心设计的方法来实现这一目标。

    你会做什么/使用什么?

2 个答案:

答案 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