29.11.2011, 19:25. Просмотров 832. Ответов 0
Доброго времени суток!

Взялся за консольный морской бой. Сейчас на стадии расстановки компьютером кораблей.
Одним из условий является то, что нельзя ставить два корабля впритык. То есть, вокруг него должны быть свободные клетки.
C++ |
1
2
3
4
5
| while(b[cifra1][cifra_bukva1] != ' ' || b[cifra1 + 1][cifra_bukva1] != ' ' || b[cifra1 - 1][cifra_bukva1] != ' ' || b[cifra1][cifra_bukva1+1] != ' ' || b[cifra1 ][cifra_bukva1-1] != ' ' || b[cifra1+1][cifra_bukva1+1] != ' ' || b[cifra1-1][cifra_bukva1-1] != ' ' || b[cifra1-1][cifra_bukva1+1] != ' ' || b[cifra1+1][cifra_bukva1-1] != ' ')
{
cifra1 = 1 + rand() % 10;
cifra_bukva1 = 1 + rand() % 8;
} |
|
Делаем проверку всех клеток вокруг корабля. Если где-нибудь в центре поля, то все ок. Но если мы поставим, например, в верхний левый угол, то происходит зацикливание.
Вероятно из-за того, что мы хотим проверить клетки левее и выше (а выше и левее нету - использовано двумерный массив и выходит, что верхний левый элемент [0][0] и если отнимим -1, то будем искать непонятно где)
Посоветуйте, пожалуйста, как бы избежать подобную ошибку?