我目前正在实现一个游戏并想添加一个网络功能。(即我希望能够加入并托管我的应用程序/游戏)。这似乎比我最初想象的要困难得多。这个问题的目的是询问这些实现是否有一个好的通用数据结构选择。
我的主要问题是我的 Game 类中目前有很多函数,如下所示:
f() { if (host) doSomething() else doSomethingCompletelyDifferent() }
我目前正在实现一个游戏并想添加一个网络功能。(即我希望能够加入并托管我的应用程序/游戏)。这似乎比我最初想象的要困难得多。这个问题的目的是询问这些实现是否有一个好的通用数据结构选择。
我的主要问题是我的 Game 类中目前有很多函数,如下所示:
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,以及服务器中的逻辑/存储。
数据结构很大程度上依赖于游戏,切换的难易程度取决于您当前的代码,但客户端服务器是要走的路。