вот пример кода
r_placed =false;
if (!r_placed)
{
int room_num = rand() % 5 + 5; // число комнат
// коридоры
int r_old_center_y, r_old_center_x, r_center_y, r_center_x;
/// база даных
for (int y = 0; y < rows; y++)
{
for (int x = 0; x < cols; x++)
{
if (y == 0 || y == rows - 2 || x == 0 || x == cols - 1)
{
map[y][x] = '%'; // записываем барьер в базу
}
else
{
map[y][x] = '#'; // записываем стену в базу
}
}
}
int try_counter = 0; // изменяряет попытки генерации комнат
while (r_placed < room_num)
{
do
{
collision = false;
// делаем кординаты комнате
ry = rand() % (rows - 4) + 1;
rx = rand() % (cols - 4) + 1;
r_size_y = rand() % 5 + 4;
r_size_x = rand() % 10 + 8;
for (int y = ry; y < ry + r_size_y; y++)
{
for (int x = rx; x < rx + r_size_x; x++)
{
if (map[y][x] == '%' || map[y][x] == ' ' || map[y + 2][x] == ' ' || map[y - 2][x] == ' ' || map[y][x + 2] == ' ' || map[y][x - 2] == ' ')
{
y = ry + r_size_y;
collision = true;
break;
}
}
}
try_counter++;
if (try_counter > 100)
{
r_placed = room_num;
}
Програма входит в бесконечный цикл когда пытаеться создать >5
когда <5 тоже иногда может войти ну очень редко
я вроде поставил поставил try_counter чтоб измерять сколько попыток,и если больше выйти,програма должна была отрисовать сколько смог записать(Например надо было создать 10 комант,а получилось записать только 3,тогда 3 надо вывести),ну она так не роботате как было задумано.
Обясните что не так роботает.