Получение 0xC0000005 Ошибка нарушения доступа и не знаете, как ее исправить - PullRequest
0 голосов
/ 18 апреля 2020

Я добавил в свою программу 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;
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...