我在游戏机上做了一个简单的僵尸岛游戏,我试图让僵尸在人类着陆时死亡。
为了创建僵尸,我像这样使用了我的僵尸类:
Zombies *zombie = new Zombies[4];为了检查人类和僵尸是否在同一位置,我使用了一个简单的for循环:
int zombieCount = 4;
for (int i = 0; i < 4; i++)
{
if (player.getPosX() == zombie[i].getPosX() && player.getPosY() == zombie[i].getPosY())
{
zombieCount--;
}
}除了减少zombieCount,我击中的僵尸应该从游戏中消失。我该怎么做?
发布于 2017-03-14 22:14:13
在C++11中,可以使用std::remove(first, last, value)删除数组中的某些元素。该函数返回新数组的结尾,例如使用:
auto end = std::remove(std::begin(zombie), std::end(zombie), zombie[i]);我建议使用std::vector,它是一个动态数组,更适合您的需要。
参考文献:std::remove和std::vector。
向量建议std::示例:
std::vector<Zombies> zombies;
// init with zombies.push_back(someZombie);
for (vector<Zombies>::iterator it = zombies.begin(); it != zombies.end(); /*no ++it*/) {
if (player.getPosX() == it->getPosX() && player.getPosY() == it->getPosY())
it = zombies.erase(it);
else
++it;
}
int zombieCount = zombies.size();发布于 2017-03-14 22:46:16
您可以将std::erase-remove_if与lambda一起使用,如以下一行代码所示:
zombies.erase(std::remove_if(zombies.begin(), zombies.end(),
[& player](const Zombie& z){return player.getPosX() == z.getPosX() && player.getPosY() == z.getPosY();}),
zombies.end());假设您有一个可以重新排序的vector<Zombie> zombies或list<Zombie>或另一个容器。
发布于 2017-03-14 22:14:05
使用vector容器:
Zombies zombieModel;
std::vector<Zombies> zombieVec(10, zombieModel);
int zombieCount = zombieVec.size();
for (int i = 0; i < zombieVec.size(); i++)
{
if (player.getPosX() == zombieVec[i].getPosX() && player.getPosY() == zombieVec[i].getPosY())
{
zombieCount--;
zombieVec.erase(zombieVec.begin()+i);
i--;
}
}https://stackoverflow.com/questions/42788124
复制相似问题