2012-05-27 65 views
0

我目前正在實現一個遊戲並希望添加一個網絡功能。 (即我希望能夠加入並託管我的應用程序/遊戲)。這似乎比我想象的要困難得多。這個問題的目的是詢問這些實現是否有很好的通用數據結構選擇。設計一個客戶端/主機網絡遊戲

我的主要問題是,我現在有在我的遊戲類很多功能看起來像這樣:

f() { if (host) doSomething() else doSomethingCompletelyDifferent() }

回答

2

你可以使用OOP。唉,你不提供你使用的編程語言。

例如,如果你在C語言進行編程,你可以做

struct thefunctions { 
    void (*stuff1)(void); 
    void (*stuff2)(int); 
    int (*get)(int); 
}; 

struct thefunctions network { 
    .stuff1 = doSomething; 
} 

struct thefunctions standalone { 
    .stuff1 = doSomethingCompletelyDifferent; 
} 

struct thefunctions * funcs; 

[...] 

if (host) { 
    funcs = &network; 
} else { 
    funcs = &standalone; 
} 

// now the structs are initialized. We can now use funcs->. 

[...] 

// If I am sure that stuff1 has been initialited properly, I can do 
funcs->stuff1(); 

// If not, I should check first 
if (funcs->stuff1) funcs->stuff1(); 

// or 
assert(funcs->stuff1); 
funcs->stuff1(); 
0

我個人不會寫的服務器和客戶端代碼在同一類的網絡應用程序。也許你可以考慮從相同的接口或基類派生的ServerGame和ClientGame類。

至於任何其他特定的數據結構,我相信這將非常依賴於您正在編寫的平臺以及您正在使用的語言(例如,在.NET世界中,您可能能夠利用WCF來隱藏很多低級網絡的東西)

0

最好的方法來處理這個問題,總是有一個遊戲服務器。然後你可以在本地玩,或者你可以加入你的機器上託管的聯網遊戲,或者別人。

工作之一就是要分出服務器和客戶端上需要哪些功能。一般來說,它是客戶端的UI,服務器中的邏輯/存儲。

數據結構非常依賴於遊戲,切換的容易程度取決於當前的代碼,但客戶端服務器是最佳選擇。