Closed. This question needs details or clarity. It is not currently accepting answers. Learn more。
想改进这个问题吗?添加细节并通过editing this post澄清问题。
我正在用C++创建一个游戏。在这个游戏中,我创建了一个名为Player
的类。Player
类有一个名为magic
的属性这个属性是一个整数,并且在整个游戏中不断上升,当用户做某事或完成任务时,他们可以获得magic
。一旦达到某一点,用户就会得到一个新的法术,这些法术被保存在player类的数组中。
我想能够在整个游戏中检查这个属性,看看它是否达到了一定的水平。
我想每次magic
属性上升时都检查一下,但是每次这样做都会添加很多条件。例如:
user.magic++
if(user.magic == 2) {
//Give a new spell
}
else if(user.magic == 3) {
//Give a new spell
}
每次更新
magic
属性时都要这样做这似乎需要花费很多时间和精力来不断地输入。我应该把上面的代码放到一个函数中,然后每次magic
更新时运行它吗?有更好的办法吗?
最佳答案
第一步:将user.magic与可用的咒语分离理由:也许将来你也会为NPC es分配法术,而不仅仅是用户。
struct spell {
int type;
int cost;
int damage;
}
static const spell walk_on_water={SURVIVAL, 10, 0};
static const spell resurect={DARK_MAGIC, 100, 0};
static const spell fireball_minor={OFFENSIVE, 30, 4};
static const spell fireball_big={OFFENSIVE, 300, 25};
void getSpellsForMagicLevel(int userMagic, std::vector<const spell&>& resultHere) {
resultHere.clear();
switch(useMagic) {
case 1:
resultHere.push_back(walk_on_water);
break;
case 2:
resultHere.push_back(walk_on_water);
resultHere.push_back(fireball_minor);
break;
//...
case 10:
resultHere.push_back(walk_on_water);
resultHere.push_back(resurect);
resultHere.push_back(fireball_minor);
resultHere.push_back(fireball_big);
break;
}
}
然后,只要想知道
player.magic
的可用法术,就可以调用这个函数然后你注意到,只有当
magic
修改时(由于经验的增加,或者由于药水的破坏),用户的法术清单才会改变,所以为什么要一次又一次地调用这个函数呢所以:class Player {
protected:
int magic;
std::vector<const spell&> spell_inventory;
// ...
void set_magic_level(int newMagicLevel) {
if(this->magic != newMagicLevel) { // do nothing if no change
this->magic = newMagicLevel;
getSpellsForMagicLevel(this->magic, this->spell_inventory);
}
}
// ...
public:
// ...
int get_magic_level() const {
return this->magic;
}
};
class User : public Player {
//...
public:
void newExperience(const Event& somethingThatHappened)
{
switch(somethingThatHappened.type) {
case EXPERIENCE_THRESHOLD_REACHED:
this->set_magic_level(this->get_magic_level()+1);
break;
case DUMBING_POTION:
this->set_magic_level(
this->get_magic_level()-somethingThatHappened.get_damage()
);
break;
// etc...
}
}
};
class NonPlayerCharacter : public Player {
//...
public:
// NPC-es don't evolve, they are just spawned
// So no newExperience method for them.
};
关于c++ - 我如何等待变量达到一定数量才能执行某项操作? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39681851/
10-11 19:11