Data structures 设计一个客户机/主机网络游戏

Data structures 设计一个客户机/主机网络游戏,data-structures,network-programming,Data Structures,Network Programming,我目前正在实施一个游戏,并希望添加一个网络功能。(即,我希望能够加入并主持我的应用程序/游戏)。这似乎比我最初想象的要困难得多。这个问题的目的是询问对于这类实现是否有一个好的通用数据结构选择 我的主要问题是,目前我的游戏类中有很多函数如下所示: f(){if(host)doSomething()else doSomething completely different()}您可以使用OOP。唉,您没有提供您使用的编程语言 例如,如果您使用C语言编程,您可以 struct thefunctions

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

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


f(){if(host)doSomething()else doSomething completely different()}

您可以使用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();

我个人不会为网络应用程序在同一个类中编写服务器和客户端代码。也许你可以考虑服务器游戏和客户机游戏类,它们都来自同一个接口或基类。
至于任何其他特定的数据结构,我相信这在很大程度上取决于您为之编写的平台和使用的语言(例如,在.NET世界中,您可能能够利用WCF隐藏许多低级网络内容)

实现这一点的最佳方法是始终使用游戏服务器。然后,您可以在本地玩,也可以加入您的计算机或其他人上托管的网络游戏

工作一是划分服务器和客户端上需要的功能。一般来说,它是客户机中的UI,服务器中的逻辑/存储

数据结构在很大程度上取决于游戏,切换的容易程度取决于您当前的代码,但客户机-服务器是一种选择