Я добавил в свою программу Zork метод случайного перемещения врагов в игре, когда бы ни двигался игрок. Я сделал это, сначала проверив, может ли враг бродить. Метод перемещения перемещает массив направлений и проходит через массив, и враг идет в этом направлении, если он не приводит к nullptr (стене). Но после пары ходов программа завершается. Все еще довольно плохо знаком с C ++ и всем его этикетом распределения памяти. Также ищем лучший способ случайного перемещения врагов. Спасибо! Метод go читает в каком-то направлении и меняет текущую комнату игроков на комнату в этом направлении, если это не nullptr.
void Game::go(string direction) {
Room *next = player.getCurrentRoom()->getExit(direction);
if (next != nullptr) {
if (!next->lockCheck(next)) { //check for no lock on door
player.setCurrentRoom(next);
player.setStamina(player.getStamina() - 1);
EventManager::getInstance().trigger("enterRoom", next);
for (auto &enemy : enemies) {
if (enemy->roamingCheck(enemy)) {
enemy->Move(enemy);
enemy->setStamina(enemy->getStamina() - 1);
}
}
void Character::Move(Character *enemy) {
srand(time(NULL));
Room *next;
for(int i = 0; i < directions->size() - 1; i++) {
int j = i + rand() % (directions->size() - i); //Shuffle array of directions
std::swap(directions[i], directions[j]);
}
for(int i = 0; i < directions->size(); i++) {
if(enemy->getCurrentRoom()->getExit(directions[i]) != nullptr) {
next = enemy->getCurrentRoom()->getExit(directions[i]);
enemy->setCurrentRoom(next);
break;
}
}
}