我目前正在實現一個遊戲並希望添加一個網絡功能。 (即我希望能夠加入並託管我的應用程序/遊戲)。這似乎比我想象的要困難得多。這個問題的目的是詢問這些實現是否有很好的通用數據結構選擇。設計一個客戶端/主機網絡遊戲
我的主要問題是,我現在有在我的遊戲類很多功能看起來像這樣:
f() { if (host) doSomething() else doSomethingCompletelyDifferent() }
我目前正在實現一個遊戲並希望添加一個網絡功能。 (即我希望能夠加入並託管我的應用程序/遊戲)。這似乎比我想象的要困難得多。這個問題的目的是詢問這些實現是否有很好的通用數據結構選擇。設計一個客戶端/主機網絡遊戲
我的主要問題是,我現在有在我的遊戲類很多功能看起來像這樣:
f() { if (host) doSomething() else doSomethingCompletelyDifferent() }
你可以使用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();
我個人不會寫的服務器和客戶端代碼在同一類的網絡應用程序。也許你可以考慮從相同的接口或基類派生的ServerGame和ClientGame類。
至於任何其他特定的數據結構,我相信這將非常依賴於您正在編寫的平臺以及您正在使用的語言(例如,在.NET世界中,您可能能夠利用WCF來隱藏很多低級網絡的東西)
最好的方法來處理這個問題,總是有一個遊戲服務器。然後你可以在本地玩,或者你可以加入你的機器上託管的聯網遊戲,或者別人。
工作之一就是要分出服務器和客戶端上需要哪些功能。一般來說,它是客戶端的UI,服務器中的邏輯/存儲。
數據結構非常依賴於遊戲,切換的容易程度取決於當前的代碼,但客戶端服務器是最佳選擇。