Доброго времени суток. Пишу сейчас консольный морской бой на С++ (можно даже сказать С поскольку без использования классов)ю Сделал расстановку кораблей, стрельбу за игрока, и стрельбу компьютеру. Но ломаю голову над алгоритмом добивания, то есть когда ИИ попал в корабль нужно, чтобы он продолжал стрелять в той же области. Единственное, что пришло это сохранять координаты в статическую переменную и потом циклом проверять что есть вокруг. Но идея сырая и не реализована. Хотелось бы узнать как вы решали данную проблему (код не обязательно, алгоритм подкиньте). Пишу в обычной процедурке.
Впринципе вы все правильно решили: берете координаты поподания и пытаетесь понять в какую сторону развернут корабль - для этого сгодится и обычный рандом. Когдс же направление найдено, то стрелять до тех пор, пока корабль не затонет, либо пока не выйдет за пределы коробля и стрелять в противоположную сторону для затопления. Функции rand, do while и for в помощь
Статическая переменная с координатами точки попадания (х,у). Рассмотрим точку не являющуюся концом поля. 1 Проверяем (х+1,у): - да - корабль расположен вдоль оси х, ставим соответствующий флаг. Долбим дальше пока не промахнемся, далее (х-1,у) и дальше пока не промах, после чего корабль затонул. Иначе 2 проверяем (х,у+1) все по аналогии с 1 Так же 3 (х-1,у) 4 (х,у-1) Если нет, то корабль одинарный, затонул. Для разнообразия можно произвести рандомизацию направлений поиска по некой переменной. Так же следует учитывать конец поля На сколько я понял архитектуру функция должна быть сквозная (без циклов) и исполняется во время хода компьютера, поэтому переходы внутри нее должны базироваться на статических флагах/переменных внутри нее.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей