我正在创建一个塔防游戏。在创建关卡之前,我需要在内存中准备好有关怪物、塔等的统计信息。例如:
fastmonster.name = "Rabbit";
fastmonster.health = 100;
fastmonster.speed = 10;
slowmonster.name = "Turtle";
slowmonster.health = 500;
slowmonster.speed = 2;
塔和其他东西也是如此。
(我还没有决定如何从文件中详细读取。)
在创建怪物或塔类的对象之前,如何确保所有这些数据都准备好?我正在寻找一种设计模式,它允许我一次全局初始化所有数据,并允许我使用常规构造函数创建怪物对象。同时它应该确保在读取单元统计数据之前没有创建任何对象。
我确信这个问题已经被解决了一百万次,但到目前为止,我还没有找到任何真正适合这个问题的解决方案,并且不是具有多个抽象级别的超级复杂。
到目前为止我的解决方案
我将构造函数设为私有并定义了一个create()
看起来像这样的函数
Monster Monster::create (MonsterType type) {
if (!initialized()) {
initialize();
initialized = true;
}
return new Monster(type);
}
现在的问题是我需要为塔和所有其他游戏元素创建相同的功能。这似乎有很多重复。
另一个想法
我将所有构造函数保密。创建一个(单例?)工厂类,让它成为所有类的朋友,让它创建所有对象。工厂将在创建时进行初始化。
GOF 模式
我查看了其他创作模式,但似乎没有一个适合。或者我只是不够了解他们。