全局变量-需要关于如何在c++中存储东西的想法

global variables - Need ideas on how to store something in C++

本文关键字:存储 c++ 于如何 全局变量      更新时间:2023-10-16

我正在为一款涉及Javascript, Jquery, c++和Awesomium的大型游戏项目工作。对于这个问题,现在我只关注c++。在游戏中,玩家应该有两种不同的"工作"(游戏邦注:你可以是科学家,也可以是挖地人)。我需要做一个方法来检查,看看你目前是哪个工作(你可以在游戏中改变)。我正在尝试一种临时的方式,因为我是c++的新手,我相信这项任务最终会交给别人。

我不确定如何保持这个"变量"存储。c++中的全局变量显然是一个大忌。我应该使用静态…方法吗?我只是不知道。实际的程序本身太大,如果不进行大量的编辑和工作,就无法包含任何示例。如果你有任何建议或问题,我很乐意倾听并尽力回答。

EDIT在我可以测试JS地图的新功能之前,我需要这个工作和切换的实现。这就是我这么做的原因,所以当我在做标题的时候我就在想。

使用"object"。这些是你随身携带的状态和变量的集合。

enum Job {
    Scientist,
    Ditchman
};
class Player {
    Job j;
public:
    void job(Job newjob) { j = newjob; }
    Job job() { return j; }
    Player() { job = Scientist; }
};
int main() {
    Player p;
    p.job(Ditchman);
    //....
    p.job(Scientist);
}

在这种情况下,Player::j变量可以被所有Player函数访问,并且通过创建Player的实例,我们也创建了j的实例。如果其他函数需要访问我们的Player,在这种情况下,我们通常会通过引用传递,因为我们不想创建更多的Player

我建议使用oo方法,使用名为job的基类和名为scientist和ditchman的派生类。job的每个派生对象将保存在某种数组或容器中,并使用多态调用来执行正确的专用函数,这些函数应该具有纯虚拟基类定义,然后在每个派生类中重写。

你说过"你可以在游戏中从一个科学家变成一个沟渠工"。因此,如果您使用这种方法,那么您将需要一个转换函数来完成在科学家对象和ditchman对象之间进行转换所需的所有工作。

永远不要使用全局变量。还要注意循环引用(一个类调用另一个类中的方法,然后那个类回调到第一个类),尽量不要这样做。使用某种容器(如vector、map或hash table)保存游戏中的对象列表,并将指向该对象的指针(或引用)传递给其他需要该对象的类,这是可以的。