我目前正在实现一个游戏并希望添加一个网络功能。 (即我希望能够加入并托管我的应用程序/游戏)。这似乎比我想象的要困难得多。这个问题的目的是询问这些实现是否有很好的通用数据结构选择。设计一个客户端/主机网络游戏
我的主要问题是,我现在有在我的游戏类很多功能看起来像这样:
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,服务器中的逻辑/存储。
数据结构非常依赖于游戏,切换的容易程度取决于当前的代码,但客户端服务器是最佳选择。