Тогда без введения поняти дом или окно, для ИИ, предлагать какой-нибудь алгоритм или какую-либо нормальную тактику боя в городе, где вокруг дома - просто безсмысленно. шаблоны там .. не шаблоны... Нужны поняти дома, в котором засели солдаты противника. без этого никак, ну вообще никак.Нет домов и окон и дверей у нас, вообще для ИИ.
У вас наверняка каждый юнит или дом или любое дерево привязано к соответвующему квадратику, так как это необходимо для рендера ландшавтов с пирамидальным отсечением зоны видимости. У меня предположение, что размер этого квадратика-ячейки равен размеру квадратиков для первоначального размещения войск.Как проверить это быстро? Есть идеи?
Худший случай - 1400 домов и 500 юнитов - каждый с каждым - 700 тыс. проверок - занимает это несколько секунд - для игры нерабочий вариант.
Значит те дома, кторые отстоят на 4 клетоки(взял с запасом) и более от клеток которым принадлежит отрезок движения - гарантированно безопасны для гранат. Если пехота там сидит - мы не будем их трогать пускай они там сидят, будем стрелять только если высунуться( как сейчас).
Если расстояние на которое можно бросить гранату неизвестно - то это фауст патрон.
Про фауст патроны с неограниченой дальностью такая тема: от них и в жизни сложно защититься. Значит подозревать, что в каждом доме сидит человек с Фауст патроном - просто бояться собственной тени танкисту. В Кенинсберге для этого просто было больше танков, кторые заменяли подбитые. Надо вести танки в окружении пехоты - они должны будут отстреливать появляющихся фаустпатронщиков.
Фаустпатроны - это совершенно другая тактика чем просто гранаты! А ведь ИИ от гранат защититься не может, вот в чем беда!
Итого, чтобы быстро проверить, сначало в отдельный список отбираем все клетки подходящие по расстоянию, потом всех энитов к ним приписанных.
Если будет понятие дом, и понятие окно, и понятие направление нормали окна, то можно говорить о применении тактики превентивной стрельбы по окнам.А если нельзя как выбрать место (шаблоны не работают)?
чтобы обстрелять окно подойдет любое место в верном полупространстве окна, такое чтобы снаряд не с срикошетил об стену, те угол выстрела 0-60 с нормалью бы был, и расстояние было безопасно для броска гранатой.
абсолютно любое место. Те любое место при угловом отклонении +/-0-60град от лучса нормали и по дальности - не дальше 8 клеток. Подьехал, подошел туда. не видно - отошел в другое место. не видно снова - отошел в третье, и так, пока безопасно не обошел дом.
Иногда ИИ заставляет(уже сейчас) свои силы обойти предполагаемы участки сопротивления. как вариант я предлагаю использова такой же алгоритм, но в меньшем пропорциональном маштабе - обходить подозрительный дом не за лесом, а за огородом, например.
странно. У меня двухядерный комп основной. Системная загрузка от винды составляет 2-4%. При игре, в бою У меня загрузка процессора не превышает 29% при скорости х1 и 44-48% при скорости х4.Асинхронный рендер
Оно и так уже лет 10 происходит
При этом, при включении режима времени х4, FPS падает в два раза.
для игры используется оба ядра.
На графике на картинке: слева хронология загрузки ЦП. серединный минимум - это я переключился Alt-Tab на игру. чуть правее минимума - это загрузка при скорости игры х1. еще правее - это при скорости х10. Также, на графике загрузки видно, что второе ядро, несмотря на то, что первое загружено значительно, занимается только тем, чем его нагружает система. Значит не используются вычисления в двух потоках, а один поток выполняет и просчет логики ИИ и регистрацию и обработку действий пользователя, и рендер. И делает он это последовательно, сначало одно, потом другое потом третье, Иначе говоря изображение формируется не параллельно с расчетом ИИ, а синхронно с ним, т.е. в одном и том же потоке (Thread). Если бы рендер был асинхронным, то при наличии двух потоков при двухядерным процессоре, один бы был занят чисто рендером, и у него ФПС не падалобы от включения скорости ни Х4, ни Х10, ни увеличивалось бы от того что нажали на паузу. Вот.
Таким образом, игра имеет значительные возможности для оптимизации по скорости, засчет использования двухпоточной(и более) схемы.
ИИ едет по участку местности. У него цель приехать в точку для захвата.ИИ выбирает маршрут(например по дороге) дорога проходит по ряду квадратиков – исходных для тактической расстановки. Если ИИ выбрал маршрут не по дороге, то вместо понятия дороги следует использовать понятие прямой отрезок движения.
---
???
По его путь до точки захвата будет состоять из отрезков - это и есть прямые отрезоки движения, рядом с которыми следует искать дома, которые надо будет зачищать.
-эти отрезки применяются если юнит едет не по дороге.
это не алгоритм, а удобство использования ускорения времени.Как-то непонятно, что и когда "отрубается",как алгоритм негодится - слишком много непонятных компьютеру терминов - лес, войско, видно/не видноНикак не определять надо просто чтобы х4 не отрубался в принципе сам, а то при появлении противника он отрубается. А если ИИ ведет свои войско через лес – их моим войскам то видно, то не видно. Если они не видят противника и потом снова видят – отрубается Х4. только и делаешь что включаешь его снова
давайте, я по другому поясню.
Кнопка х4 подкрашивается желтеньким, сразу после нажания на нее.
если вдруг появляются синие точки и треугольники которые мне раньше на экране не было видно, то кнопка Х4 перестает быть подкрашеной желтеньким. (само, без моего участия)
чтобы снова увидеть приятный, желтый цвет на этой кнопке надо снова на нее шелкнуть мышкой или нажать Ctrl+F11.
мне бы хотелось, чтобы никакие события не затавляли пропадать этот желтый свет с кнопки х4, за исключением щелчка мышки по ней.
я бы попытался сконцетрировать силы ИИ и попытаться ударить с нескольких направлений добившись одновременности нападения.А зачем? Думаете сможете что-то кардинально лучше для размещения наскриптовать? Да Вы оптимист
Хм, тогда получается еще потребуется вводить правило для ИИ, о том, что проверенными дома остаются до тех пор, пока рядом (в 6-ти клетках) находятся свои войска и противника не бегал по улице. Если противник бегал по улице, то мог забежать в уже зачищенный дом,и надо зачищать все подозрительные дома(по пути к точке захвата) снова, даже если они уже были захвачены.А если они пришли сюда "после проверки"?
Лед сдвинулся! Лед сдвинулся, Господа присяжные заседатели!! (с) О. БендерИдея понятна, алгоритм несколько неоднозначен