2014-09-22 30 views
2

我正在設計一個僅限網絡遊戲。我想在服務器端和客戶端之間共享存儲在C++類中的遊戲數據。在服務器和客戶端之間使用相同的數據

這具有在同一個地方的數據,從而簡化了維護的益處。但是,我有一個一流的設計問題 因爲:

  1. 在服務器端只需要邏輯
  2. 在要畫,呈現在客戶端,而這樣

換句話說,我不想在服務器上安裝圖形庫,反之亦然。

類可能是這樣的:

class Fire : public Spell { 
private: 
    /* some data */ 

public: 
    void execute(Player &p) 
    { 
     // call server actions 
    } 

    void draw(Player &p) 
    { 
     // call rendering and such 
    } 
}; 

執行僅用於服務器的功能和借鑑是客戶端。我真的不想使用 宏來確定數據是在哪一邊,因爲它往往是醜陋的和不可維護的。

我正在尋找一個精心設計的方式來做到這一點。

會怎麼做/使用?

回答

5

我想你應該找到你需要分割類 並從拼寫開始兩班的結論:

//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); 
}; 

每個法術推導將splited兩個。

客戶端將使用的圖形類,服務器將使用的邏輯。

0

而我@SHR同意這可能意味着你需要單獨的類,在有些情況下是有意義的分享客戶端和服務器之間(代碼涉及到數據表示,或從對方模型的流程調用代碼時,特別是當比郵件更好)

在這種情況下,我會建議一個很好的RPC庫,如谷歌的protocol buffers

相關問題