设计客户端/主机网络游戏

时间:2012-05-27 21:41:33

标签: data-structures network-programming

我目前正在实施游戏,并希望添加网络功能。 (即我希望能够加入并主持我的应用程序/游戏)。这看起来比我想象的要困难得多。这个问题的目的是询问这类实现是否有良好的通用数据结构选择。

我的主要问题是我目前在我的Game类中有很多函数,如下所示:

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

我个人不会在网络应用的同一个类中编写服务器和客户端代码。也许您可以考虑ServerGame和ClientGame类,它们都来自相同的接口或基类。

对于任何其他特定的数据结构,我认为这在很大程度上取决于您正在编写的平台以及您正在使用的语言(例如,在您可能采用的.NET世界中WCF的优点是隐藏了很多低级网络的东西)

答案 2 :(得分:0)

解决这个问题的最佳方法是始终拥有游戏服务器。然后你可以在本地玩,或者你可以加入机器上托管的网络游戏,或者其他人。

第一项工作是分析您在服务器上需要哪些功能以及客户端上需要哪些功能。一般来说,它是客户端的UI,以及服务器中的逻辑/存储。

数据结构非常依赖于游戏,切换的容易程度取决于您当前的代码,但客户端服务器是可行的方法。