Кротчайший путь для поиска кораблей и тотальное уничтожение
Сегодня узнал о том, что pspowner программирует "Морской бой" как сингл, тоесть для одного игрока, а в роли другого учавствует AI (тоесть искусственный интелект ЗЫЗы :) )
Желаем удачи pspowner'у ! И вот какую тему хотелось бы затронуть: "Кротчайший путь для поиска кораблей и тотальное уничтожение" У нас имеется матрица 10х10 (ну это для примера). В неизвестных, для нас и AI, точках находятся корабли 1-4 палуб. Мы знаем, что корабли не могут соприкосаться друг с другом, минимальный интервал между бортами двух кораблей - одна клетка. Какой механизм поиска верного пути вы бы предложили попадая с первого выстрела во вражеский корабль (если он не однопалубный) ? добавлено через 41 минуту Я бы предложил следующее: Оганизуем структуру: Код:
target.x = 10; target.y = 10; target.direction = 0; target.count = 0; Если target.direction нулевой, то продолжаем определять другую координату для стрельбы (это может быть простым рандомом) И вот, при очередной стрельбе мы попадаем. Если корабль 1 балуба. убили его. Если не убит то нацеливаемся дальше. Нацелить можно по следующей схеме: Код:
if (target.direction == 1 ) target.next.x++; Если на пути target.direction встречается промах, а target.count > 2, то нам достаточно инвентировать target.direction и откатить координату на target.count, что бы продолжить в другом направлении от начальной точки выстрела. Вот вобщем-то и всё! |
Я сегодня утром успел только, пока не припахали, написать начало графики. Даже полной расстановки кораблей пока нет. И нужно избавиться от мелких багов и упорядочить текст, а то каша пока :)
добавлено через 52 минуты Да, вот чё хотел спросить: ReadBufferPositive - у меня гадина отрабатывает по 5 раз на нажатие(ну в цикле когда), приходится лепить холостые циклы. Обнуление Buttons ничего не даёт. SamplingCycle(1) - я так понимаю что-то вроде typematic rate - помогает на 1.5, а как делать на 2.71-2.80? Онаж там не размечена... |
В своем СДК я определил SamplingCycle, но его работоспособность не проверял.
В своих программах я использовал простейший путь решения проблемы: Код:
int i; |
Сейчас уже разобрался со случайными числами, почти...
Во первых, имперически выяснил, что int rand(), не возвращает отрицательных значений. Соответственно, возможный диапазон 0-32767. Собственно, случайное расположение кораблей ЦПУ я делаю примерно так: Код:
int Randomize9() { |
Если ты не будешь инициализировать генератор случайного числа то по дефолту srand(1), это значит, что твои корабли все время буду выстраиваться в одну и туже позицию. =)
Что бы этого избежать иницализируй генератор вот таким образом: srand(time(0)) Для низиализации r используй простую вещь как return (rand() % 9) В ThrowCoin() тоже самое return (rand() % 1) |
Цитата:
Цитата:
|
Насчет rand() конечно мне не понятно, ведь поидеи нужно сначало инициализировать генератор, возможно это уже реализовано автоматически.
добавлено через 1 час 7 минут Код:
void DefineCPUShips() { Как я понимаю, то это функция расставляет кораблики |
Код:
void DefineCPUShips() { Как я понимаю, то это функция расставляет кораблики Код:
if (!direction && px<=6 || direction && py<=6) isOK=1; <-- Это вообще сомнительно всё. А если этому условию не будет соответствовать примерно n-ое кол-во раз? Как я понял ты старался сделать условия так, чтобы при генерации корабля, он не выпал за рамки самого поля. Код:
<-- Ясное дело заполняем поле, но почему 3-х палубным корабликом? Цитата:
|
Цитата:
Да, рекурсия простой способ получить нужный результат. Ну например: Код:
int SetOneShip(int x, int y) { Для многопалубных рекурсия немного сложнее. |
Да ничё, я ж не профи. Меня критиковать можно...
Спасиб, но я уже так расставил :) по своему. Когда закончу, пришлю те исходник. Для критики :) |
Цитата:
Исходник конечно ждём =) Ох, я в предвкушении критики =))))) |
Ню вот, с расстановкой кораблей я вроде закончил :)
(слева - расставил я в запущенной программе. справа - ЗЫЗа, САМА!) По крайней мере 2 раза подряд никаких багов в расстановке нет. Теперича переходим к самому интересному - стрельбе :) http://g.foto.radikal.ru/0610/4bf8d43c5fc5.jpg |
Цитата:
|
Ну вот, собственно. Ранняя бета (не релиз, просто для показа). Не распространяйте на форуме - пока не дописано.
Ограничения: - Пользователь сам отвечает за корректную расстановку своих кораблей. - Логика стрельбы ПСП пока не написана(т.е. никаких добиваний). Палит наугад. - Убитые/раненые не обозначаются. - Могут быть баги... Управление: Стрелки - (движение кораблей при расстановке, движение целеуказателя) R - Поворот корабля при расстановке Крест - Выстрел. Start - выход Select - Чит. Показывает корабли врага. 2.71 - Работает, 2.80 - Должна :) |
оффтоп - о, смотрю и вложениями начали пользоваться
|
а зачем ты все время лоадбинари в корень ФОТО бросаешь? сделай для удобства как мишуе
|
Ну а как? Могу запихнуть в туже папку что и seafight... Сейчас сделать?
Да, сегодня уже врятли буду доделывать - устал :) |
запихни или если это можно и мне сделать то лучше я сам, по дороге домой потестю
|
Браво!!! Работает прекрасно. Багов пока не увидел, есть только недоделки =)
|
Что-то я не понял... Запихиваю в туже папку - виснет. Mushue, как это правильно делать не подскажешь?
Я имею в виду как лучше по папкам пихать. 2вАСТ: Если сам будешь править, название проги находится в loadbinary.tiff по смещению 0DBA (если понадобится) |
Текущее время: 03:43. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.