我如何仅一次或一次创建一个对象
How do I create an object once and only once?
我希望一次和一次实例化的水果类,因此地图上只有一个水果对象。当蛇吃掉它时,它被称为攻击函数,并且存在旗帜再次被设置为假。我应该如何实施此行为?
水果。H
class Fruit {
protected:
char fruit;
bool exists;
int fruitPosX;
int fruitPosY;
public:
Fruit();
char getFruitType();
int getFruitPosX();
int getFruitPosY();
bool getExistenceFlag();
void setExistenceFlag(bool value);
~Fruit();
};
map.cpp
void Map::displayEverythingOnMap(Snake& snake){
snakeBody* tmp = snake.firstNode;
while (tmp != NULL) {
gameArea[snake.getSnakePosX()][snake.getSnakePosY()] = tmp->bodyPart;
tmp = tmp->next;
}
Fruit* fruit = new Fruit;
fruit->setExistenceFlag(false);
if (fruit->getExistenceFlag() == false) {
gameArea[fruit->getFruitPosX()][fruit->getFruitPosY()] = fruit->getFruitType();
fruit->setExistenceFlag(true);
if ((fruit->getFruitPosX() == snake.getSnakePosX()) && (fruit->getFruitPosY() == snake.getSnakePosY())) {
delete fruit;
fruit->setExistenceFlag(false);
snake.grow();
}
}
}
我希望一次和一次实例化的水果班一次,因此地图上只有一个果实。
停止。在任何给定时间,地图中只有一个fruit
的实例是单身顿的可怕用例。您不需要玩物体的寿命:
-
只需将
fruit
的实例存储在您的"游戏状态"类中,其寿命为一个值。它的寿命将与游戏状态的终生相匹配。 -
玩家收集水果时,只需增加蛇的长度,然后将水果移动到其他地方。无需创建/破坏对象。
伪代码:
struct game_state
{
fruit _fruit;
// ...
game_state()
{
_fruit.position = get_random_location();
}
void update()
{
if(_player.position == _fruit.position)
{
grow();
_fruit.position = get_random_location();
}
}
};
您想要一个单例:
class Fruit {
protected:
char fruit;
bool exists;
int fruitPosX;
int fruitPosY;
public:
static Fruit& instance();
char getFruitType();
int getFruitPosX();
int getFruitPosY();
bool getExistenceFlag();
void setExistenceFlag(bool value);
private:
Fruit();
~Fruit();
};
Fruit& Fruit::instance() {
static Fruit _self;
return _self;
}
由于构造函数是私有的,因此只有班级的函数才能称呼它,并且由于您只有一种可以创建果实(实例((方法(的方法,所以它只会创建一个水果。
不要。
,如果您尝试强制执行任何一种 can ,则只会使您的程序复杂化并进行奇怪的设计。
而不是创建一个水果,而不再创建一个。
相关文章:
- 有没有办法一次运行 3 个创建窗口函数?
- 如何一次创建帧的一个实例
- 我应该只在免费商店上为一次调用创建对象吗?
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 我可以确保在编译时只创建一次对象吗?
- 我如何仅一次或一次创建一个对象
- Configure_file一次它创建一个目录及其子目录,一次它没有
- 如何创建在 c++ 中只读取一次的初始化函数
- 如何在一次内创建N个向量或数组
- 定义结构并在一次传递中创建相关数据项的列表
- 如何一次创建多个线程
- OpenMP - 仅创建一次线程
- 对于多少种类型的 x86 处理器,Ngen 和 .net 本机一次创建本机代码
- c++纸牌游戏,当新一轮牌组创建/新一轮开始时,手牌被发不止一次
- 是否可以创建一个类似C的字符串(char*)数据只能设置一次的结构
- 如何在ubuntu中创建和运行一个脚本,该脚本每5分钟运行一次并关闭一个c代码
- 如何创建一个只能添加一次自身的类?
- 从现有实例中创建新的类实例一次
- 如何一次创建、处理和删除多个窗口
- 一次创建多个队列