2012-05-27 67 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,服务器中的逻辑/存储。

数据结构非常依赖于游戏,切换的容易程度取决于当前的代码,但客户端服务器是最佳选择。