Кротчайший путь для поиска кораблей и тотальное уничтожение
Сегодня узнал о том, что 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 (если понадобится) |
запихнул как есть перенес тифф файл в туже папку, на всяк случай кинул туда имидж.. и всё стартую папку кнопкой X
|
Короче, я отложил написание. Туплю чего-то.
Муш, если чего - исходник прилагаю. |
сохранил на флэшку, дома гляну..
|
Вобщем ничего я пока не пишу. Нет вдохновения, да и писать особо нечего.
Для 1.5 всё что можно написано, а для 2.8 - ??? Да что там можно написать? Вся надежда на еЛоадер, а фанжита молчит. Видать SCE наколбасила реальную защиту. По поводу ООП: Оказывается, я не тот файл компилил :slow: Классы действительно не катят, причём даже в 1.5 СДК. (может нужны какие-нибудь доп директивы. в makefile?) Делать через struct тоже не выходит. МБ - пока в свободном плавании. Мне надо просто заставить себя сесть за дописание. З.Ы. Кстати, а куда пропал vAST? Давно не видел на форуме... Надеюсь что случилось лучшее ;) |
Цитата:
Никакие директивы не нужны, смена компилятора должна быть =) Я менял компилятор, но в случае с ТИФФ сдк это не катит. вАСТ в отпуске, причем он там уже с понедельника. На сколько отпуск у него я незнаю, но в любом случае минимум 2 недели. Он таакже ожидает рождение ребенка. Я думаю, что вАСТу некоторое время будет не до форума. =) |
Ты извини за назойливость, а на какой компилятор надо поменять?
Просто сейчас самому искать неохота. psp-cpp.exe? |
Цитата:
psp-cpp, psp-c++, psp-g++, psp-gcc |
Гы... ЛОЛ
Муш, забавно. Всё это делается банальной сменой расширения .c на .cpp :) Да, что-то я :slow: сегодня Уже накатал для проверки классов прогу. Всё компилится на ура. |
Ребята обьясните чё и где писать а то ничё не помню
|
Цитата:
|
это ошибка матрицы, про которую вАСТ у***** забывает уже несколько дней :)
|
Я разработчик
|
Цитата:
Цитата:
Если действительно нужно что-то узнать, то было бы не плохо излагать конкретнее. |
Текущее время: 14:30. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.