-
Автор темы
- #1
К примеру есть код, который записывает игровые координаты игрока каждые две секунды в файл
То что получилось в n1ght.txt
1542.32:1275.89
1437.43:1302.65
1436.84:1321:91
Вопрос. Как читать строки одной за другой после выполнения проверки на дистанцию.
Алгоритм бота должен быть такой:
Читаем первую строку из файла;
Находим из строки два числа;
Находим эти координаты в игровом мире;
Бежим до этих координат до тех пор пока дистанция между и игроком и точкой не станет меньше 1.5;
Читаем следующую строку;
С этим кодом у меня читает только последнею строку, и дальше не работает.
C++:
{
std::ofstream File("n1ght.txt");
static std::string WriteLine;
if (isLocalPlayerMove(Forward_or_Backward) || isPlayerMove(Left_or_Right)) {
static ULONGLONG iTick = GetTickCount();
if (GetTickCount() - iTick > (ULONGLONG)2000) {
/* ":" - разделительный знак */
WriteLine += (std::to_string(GetLocalPlayerPosition().fX) + ":" + std::to_string(GetLocalPlayerPosition().fY) + "\n");
iTick = GetTickCount();
}
}
File.write(WriteLine.c_str(), WriteLine.length());
}
1542.32:1275.89
1437.43:1302.65
1436.84:1321:91
Вопрос. Как читать строки одной за другой после выполнения проверки на дистанцию.
Алгоритм бота должен быть такой:
Читаем первую строку из файла;
Находим из строки два числа;
Находим эти координаты в игровом мире;
Бежим до этих координат до тех пор пока дистанция между и игроком и точкой не станет меньше 1.5;
Читаем следующую строку;
C++:
std::cmatch result;
std::regex reg("(.*):(.*)");
float posX, posY;
//Файл откуда берутся координаты
std::ifstream fileread("n1ght.txt");
int i = 0;
for (std::string line; std::getline(fileread, line);) {
//Получаем две координаты в виде чисел из регекса и записываем их в result[1] и result[2]
std::regex_match(line.c_str(), result, reg);
//Переводим наши координаты из string в float для дальнейшей работы
posX = std::stof(result[1].str()); posY = std::stof(result[2].str());
float dist = Utils::Disatance(GetLocalPlayerPosition().fX, GetLocalPlayerPosition().fY, posX, posY);
//Если дистанция между игроком и точкой меньше 1.5 то мы должны перейти к следующей строке
if (dist <= 1.5f) {
line[i]++;
}
}