在没有全局变量的情况下将游戏数据加载到池中
Loading game data into pool without globals
我正在编写一个基于文本的游戏,该游戏可通过 TELNET 获得,供我使用 C++ 娱乐。我根据游戏 aspects/components 创建了一个 class 层次结构,例如车辆、行人、玩家、车辆、自行车等
我正在考虑实现一个 "Pool" 对象,它将存储指向特定加载元素的指针。我正在考虑在池中使用 Add() 函数,该函数会根据我想添加到池中的元素的 class 过载。问题如下:假设我想让这个元素池(或它上面的某个层)一直可用。也许我需要一个函数 GetAllVehicles()(只是一个简单的例子),它会查看池数据并 return 我用一堆指针将所有车辆放在一个数组中。
问题是,如果我想在我的代码中的某个地方通过这个池怎么办。从本质上讲,Pool 对象在某种意义上应该是 global,因为您希望随处访问已加载的游戏元素,而不必永久传递创建的对象。但是,我不希望它污染全局命名空间并且我想要多线程,因此声明一个全局变量将是一个特别糟糕的主意。
问题很简单:我应该怎么做才能完成这项工作?
一种方法是在您的 main
函数中创建一个实例,并将该实例传递给每个使用它的函数,或者传递给需要池的对象的构造函数。
另一种可能是单例设计模式。
问题两边都是火龙(单例vs传物)。选择你自己的毒药。
我正在编写一个基于文本的游戏,该游戏可通过 TELNET 获得,供我使用 C++ 娱乐。我根据游戏 aspects/components 创建了一个 class 层次结构,例如车辆、行人、玩家、车辆、自行车等
我正在考虑实现一个 "Pool" 对象,它将存储指向特定加载元素的指针。我正在考虑在池中使用 Add() 函数,该函数会根据我想添加到池中的元素的 class 过载。问题如下:假设我想让这个元素池(或它上面的某个层)一直可用。也许我需要一个函数 GetAllVehicles()(只是一个简单的例子),它会查看池数据并 return 我用一堆指针将所有车辆放在一个数组中。
问题是,如果我想在我的代码中的某个地方通过这个池怎么办。从本质上讲,Pool 对象在某种意义上应该是 global,因为您希望随处访问已加载的游戏元素,而不必永久传递创建的对象。但是,我不希望它污染全局命名空间并且我想要多线程,因此声明一个全局变量将是一个特别糟糕的主意。
问题很简单:我应该怎么做才能完成这项工作?
一种方法是在您的 main
函数中创建一个实例,并将该实例传递给每个使用它的函数,或者传递给需要池的对象的构造函数。
另一种可能是单例设计模式。
问题两边都是火龙(单例vs传物)。选择你自己的毒药。