класс — чтение из векторов Stack Overflow

Что не так с этим кодом? Он определяет, достигли ли я координаты монстра, но только одного из них или, по крайней мере, ближайшего. Если я путешествую по другим координатам, это не говорит мне о появлении монстра. Не знаю почему, потому что я перебираю монстр-вектор каждый раз, когда набираю «север».
Вот код

Класс монстров:

class Monster
{
public:
std::vector<std::string> names;
std::vector<double> posx; // North - South
std::vector<double> posy; // East - West

bool compareCoords(double monsterPosX, double monsterPosY);
void cMonster(std::string monsterName, double monsterPosX, double monsterPosY);
void randomSpawn();

protected:

private:
};

CompareCoords, чтобы определить, существует ли монстр с этими координатами, и функции cMonster (создать монстра):

void Monster::cMonster(std::string monsterName, double monsterPosX, double monsterPosY)
{
if (compareCoords(monsterPosX, monsterPosY) == false)
{
names.push_back(monsterName);
posx.push_back(monsterPosX);
posy.push_back(monsterPosY);
std::cout << "Monster " << monsterName << " has been created at X: " << monsterPosX << " Y: " << monsterPosY << std::endl;
}
}

bool Monster::compareCoords(double monsterPosX, double monsterPosY)
{
for (unsigned int i = 0; i < posx.size(); i++)
{
if (monsterPosX == posx[i] && monsterPosY == posy[i])
{
return true;
}
}
return false;
}

Главный:

int main()
{
srand(time(0));
Monster newenemy;
Character newplayer;

newenemy.cMonster("Weezo", 1, 0);
newenemy.cMonster("Weezo", 2, 0);

newplayer.posx.push_back(0);
newplayer.posy.push_back(0);

home:

std::cout << "-->> ";
std::string userInput;
std::cin.clear();

getline(std::cin, userInput);

if (!userInput.compare("north"))
{
newplayer.headNorth();

for (unsigned int i = 0; i < newenemy.names.size(); i++)
{
if (newplayer.posx[i] == newenemy.posx[i] && newplayer.posy[i] == newenemy.posy[i])
{
std::cout << "A " << newenemy.names[i] << " has appeared." << std::endl;
}
}
}

else if (!userInput.compare("south"))
{
newplayer.headSouth();

for (unsigned int i = 0; i < newenemy.posx.size(); i++)
{
if (newplayer.posx[i] == newenemy.posx[i] && newplayer.posy[i] == newenemy.posy[i])
{
std::cout << "A " << newenemy.names[i] << " has appeared." << std::endl;
}
}
}

else
{
std::cout << "You have entered an invalid command." << std::endl;
}
}

введите описание изображения здесь

^ Как вы можете видеть здесь, это показывает, когда я нахожусь в координатах Гориллы, но не второго монстра, Дональда Трампа. Он просто игнорирует второй.

Я застрял здесь на несколько часов, я не понимаю, что может быть не так. Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector