У меня есть серьезная проблема, которую я пытался обойти в течение многих дней, но я не могу найти достаточно хорошее решение, чтобы ее исправить.
Проблема в моем клиенте / соединение с сервером (в частности, в коде игрового сервера), где, когда я выхожу из игры и в сети более 1 игрока, все игроки с более высоким индексом вектора, чем у вышедшего из строя игрока, теперь становятся недействительными, что приводит к сбою сервера из-за того, что вектор игрока находится за пределами диапазона.
Я попытался сократить код, чтобы вам было проще читать только наиболее подходящий код. Я не могу включить весь сетевой код, так как он был бы слишком беспорядочным
main. cpp
#include <iostream>
#include <vector>
int main() {
Player* newplayer = new Player(username, world);
//Push two players into the vector, size is 1 after 0, 1
world->players.push_back(newplayer);
world->players.push_back(newplayer);
//Log out player at index 0, then log player at index 1 out.
for (int i = 0; i < world->characters.size(); i++) {
world->Logout(world->players[0]);
world->Logout(world->players[1]);
}
}
}
World.h / world. cpp
//in world.h
std::vector<Player*> players;
//in world.cpp
void World::Logout(Player* player)
{
world->Logout(world->players[0]);this->Logout(player->character);
this->players.erase(
std::remove(UTIL_RANGE(this->players), player),
this->players.end()
);
}
Я не знаю, правильно ли я объяснил себя, поэтому, если у вас есть какие-либо отзывы о том, как я могу переформулировать свой вопрос или указать более подробную информацию, сообщите мне.
Может, мне вообще не использовать вектор? В этом случае, что мне нужно использовать? Моя программа основана на том, что игроки по-прежнему имеют одинаковый «идентификатор игрока» на протяжении всей программы. Если игрок удален, это становится свободным элементом.
Например, если в векторе 10 игроков. {игрок, игрок, игрок, игрок, игрок, игрок, игрок, игрок, игрок, игрок, игрок} и игрок с индексом 0 выходит из системы, это должно выглядеть так {ноль / бесплатно, игрок, игрок, игрок, игрок, игрок, игрок , игрок, игрок, игрок}