Сегодня узнал о том, что
pspowner программирует "Морской бой" как сингл, тоесть для одного игрока, а в роли другого учавствует AI (тоесть искусственный интелект ЗЫЗы
)
Желаем удачи
pspowner'у !
И вот какую тему хотелось бы затронуть:
"Кротчайший путь для поиска кораблей и тотальное уничтожение"
У нас имеется матрица 10х10 (ну это для примера). В неизвестных, для нас и AI, точках находятся корабли 1-4 палуб. Мы знаем, что корабли не могут соприкосаться друг с другом, минимальный интервал между бортами двух кораблей - одна клетка.
Какой механизм поиска верного пути вы бы предложили попадая с первого выстрела во вражеский корабль (если он не однопалубный) ?
добавлено через 41 минуту
Я бы предложил следующее:
Оганизуем структуру:
typedef struct _war_ {
int x; // координаты точки поражения
int y;
int direction; //направление удара
int count; //подсчитаем кол-во палуб
} sea_war;
sea_war target;
После этого начинаем палить. Для начала мы палим по рандомной точке:
target.x = 10;
target.y = 10;
target.direction = 0;
target.count = 0;
Если target.direction нулевой, то продолжаем определять другую координату для стрельбы (это может быть простым рандомом)
И вот, при очередной стрельбе мы попадаем. Если корабль 1 балуба. убили его. Если не убит то нацеливаемся дальше.
Нацелить можно по следующей схеме:
if (target.direction == 1 ) target.next.x++;
if (target.direction == 2 ) target.next.x--;
if (target.direction == 3 ) target.next.y++;
if (target.direction == 4 ) target.next.y--;
target.direction достаточно инкреиментировать или декрементировать, чтобы выбрать другой путь при ошибочном направлении от предыдущего выстрела.
Если на пути target.direction встречается промах, а target.count > 2, то нам достаточно инвентировать target.direction и откатить координату на target.count, что бы продолжить в другом направлении от начальной точки выстрела.
Вот вобщем-то и всё!