"Триумф искусства и техники. Ни один корабль в мире не достигал еще такого!" Отзыв Чарльза Крампа о первом круге испытаний "Варяга". При волнение моря в 10 баллов крейсер "Варяг" показывает мировой рекорд для крейсеров своего класса по скорости - 24,59 узла.
подробнее...

О моделировании морского боя Формулы для компьтерной игры
Доброго времени суток. Мы делаем wargame, где время разбито по турам. Каждый игровой тур - пять минут реального времени. За этот тур одно орудие среднего калибра в состоянии выпустить до 15 снарядов в бою (беру статистику РЯВ). Мы не можем разделять каждый выстрел из каждого орудия в тур - игра должна быть не только реалистичной, но и простой в управлении и освоении для неспециалиста. Поэтому в интерфейсе игрок будет выбирать цель, а далее AI будет отсчитывать по секторам обстрела, те пушки, что могут стрелять в цель. Для баллистической траектории важен угол ствола орудия - как нам его задать для 15 различных вариантов, только одного орудия? Усреднять и брать всегда один для всех на одинаковой дальности? Самое сложное это распределение попаданий по частям корабля. Мы разделили 3D модель на 30 частей, где каждая имеет влияние на общие характеристики корабля - скорость, скорострельность пушек и т.д. Мы знаем сектор, в котором находится та часть корабля, которая может получить попадание снарядом. Как правильнее задать формулу распределения этих случайностей. С уважением Максим Ф. Пернатый Змей. www.totemgames.ru

Ответов - 8

Здравствуйте. Проблема моделирования арт.стрельбы в целом давно решена. И Ваш вариант мало чем отличается от остальных. Пернатый Змей пишет: Для баллистической траектории важен угол ствола орудия - как нам его задать для 15 различных вариантов, только одного орудия? Усреднять и брать всегда один для всех на одинаковой дальности? Это непонятно. Почему они РАЗНЫЕ? Из-за движения корабля в течение "тура"? Так берите по любой точке (мы вот берем на середину), или усредняйте. Или уменьшайте длину "тура". Пернатый Змей пишет: Самое сложное это распределение попаданий по частям корабля. Это безусловно. Даже не само распределение а последующая обработка. Пернатый Змей пишет: Мы знаем сектор, в котором находится та часть корабля, которая может получить попадание снарядом. Как правильнее задать формулу распределения этих случайностей. Тоже непонятно. Если вопрос о распределении в геометрическом смысле, то берите нормальное (относительно некоей средней точки" залпа") или просто равномерное распределение. Тут есть доводы за и против в ообоих случаях. Если вопрос о смысле повреждений, то Вы вроде уже знаете, как именно влияет попадание в данную "часть" на характеристики.
Спасибо, что ответили, очень хотел с Вами пообщаться. 1. Значит усреднение угла ствола орудия вполне возможно. Это многое упрощает. 2. Представьте себе сетку, где на некоем расстоянии друг от друга и под разными углами носового вектора друг другу расположены два корабля. Атакующий корабль с помощью AI проверяет дальность до корабля-цели. Затем сравнивает эту дальность с максимальной дальностью каждого орудия и отсеивает, те, что могут стрелять. После чего перебором оставшихся орудий среднего калибра или башен главного калибра проверяет, какие из них могут повернуться в сторону цели (геометрический сектор на плоскости). Отсеивает лишние. Оставшиеся орудия одновременно выпускают в сторону цели количество снарядов, определяемое боевой скорострельностью (с учётом выучки и состояния корабля и орудия). Скажем, для 6” пушки это будет 15 снарядов. Затем с учётом дальности до цели делаем поправку на точность (баллистический калькулятор мне сбросили – осваиваем). Пусть точность составила 5%, значит, в цель попало 0,75 снаряда. Конечно, такого не может быть, но мы считаем, что попал полный снаряд, однако нанёс только 75% от своего полного повреждения, если его бронепробиваемость равна и более брони той части корабля, куда он попал. Далее аналогично для всех оставшихся орудий. 3. Поскольку модель корабля математическая, а не физическая, то реальный снаряд не будет вылетать в сторону цели, и из ствола орудии не будет исходить луч, и мы будем знать лишь начальный и конечный угол для определения сектора обстрела. В течение пяти минут канониры не могут не изменять положения пушки (или могут?). Они будут целиться более в сторону корабля, нежели в его конкретную часть. Итак, по сектору стрельбы мы знаем, что 1 из 15 снарядов может попасть в 5 из 30 частей корабля. Равномерно распределить 1 снаряд на 5 частей мы не можем. Что делать? 4. Я придумал следующий вариант. Самая малая по площади часть корабля берется за единицу и ей присваивается номер 1. Все остальные части определяются по площади в нашей самой маленькой для определения, сколько цифр им нужно присвоить для моделирования площади это части. К примеру, часть, имеющая в два раза большую площадь получит цифры-номера 2 и 3. То есть если бы наш снаряд мог попасть только в две вышеуказанные части, получился бы случайный выбор из 3, но поскольку большей части присвоены две цифры, то вероятность попадания в них получается в два раза больше, чем в меньшую по площади единичку. Надеюсь, что не очень запутанно. С уважением.
А почему бы не использовать ГСЧ (генератор случайных чисел) - например от 1 до 100 например в Seekrieg 4: для малых дистанций 01-08 - палуба 09-40 - пояс 41-55 - рубка 56-65 - артиллерия 66-85 - надстройки ... расположение попадания также можно определить через ГСЧ
Значит я написал действительно путанно. Речь идёт именно о системе о которой Вы (Neil) пишите. Только деление корабля на большее количество частей, с учётом правого и левого бортов. Кстати генератор случайных чисел на компьютере пишется ручками и не такой уж он случайный как кубик на полу. Даже для хорошего программера нужен алгоритм или формула, а не просто матрица вероятностей. С уважением.
Пернатый Змей пишет: Значит я написал действительно путанно. Есть такое дело. Вы ведь уже выбрали свою процедуру (алгоритм) обработки. Как в любой модели, он предполагает пренебрежение теми или иными факторами. Какими именно - выбирает создатель. Пернатый Змей пишет: 1. Значит усреднение угла ствола орудия вполне возможно. Это многое упрощает. В принципе - возможно. Некоторые заморочки наступают на малых дистанциях при больших ходах, когда угловые скорости перемещения цели велики. Тут за "тур" вполне могут измениться сектора обстрела и т.п. Если хотите, можно усреднять 3 значения угла на цель и дистанции: на начало, конец и середину "тура". Это будет несколько более точное приближение. Пернатый Змей пишет: Пусть точность составила 5%, значит, в цель попало 0,75 снаряда. Конечно, такого не может быть, но мы считаем, что попал полный снаряд, однако нанёс только 75% от своего полного повреждения, если его бронепробиваемость равна и более брони той части корабля, куда он попал. Лучше в случае появления таких "дробей" использовать ГСЧ с выводм на выходе 0 или 1. Пернатый Змей пишет: Самая малая по площади часть корабля берется за единицу и ей присваивается номер 1. Все остальные части определяются по площади в нашей самой маленькой для определения, сколько цифр им нужно присвоить для моделирования площади это части. К примеру, часть, имеющая в два раза большую площадь получит цифры-номера 2 и 3. То есть если бы наш снаряд мог попасть только в две вышеуказанные части, получился бы случайный выбор из 3, но поскольку большей части присвоены две цифры, то вероятность попадания в них получается в два раза больше, чем в меньшую по площади единичку. Вполне нормальная (в принципе!) система. Лучше взять "самую маленькую часть" (мы ее называем "отсек") стандартной для всех кораблей. Т.е., как бы накладывать стандартную "сетку". Пернатый Змей пишет: Кстати генератор случайных чисел на компьютере пишется ручками и не такой уж он случайный как кубик на полу. Вообще-то можно пользваться и встроенными генераторами языков и приложений. Они достаточно "случайные" при дополнительном перемешивании (например, за счет привлечения одной и той же последовательности из ГСЧ для разных задач). Не забывайте так же почаще переинициализировать ГСЧ. Пернатый Змей пишет: Даже для хорошего программера нужен алгоритм или формула, Этих формул - как собак нерезанных. Все они основаны на операциях с простыми числами и имею свойство "циклиться" после генерации определенного кол-ва псевдослучайных чисел. Однако, при переинициализации и доп.перемешивании более или менее подходят.
И не забудьте про вероятность случайного попадания снаряда в соседний от цели корабль при перелете или недолете ;)
2 vov\ Спасибо, Вы очень помогли определить что, иду в правильном направлении. 2 Neil\ Боюсь, что для wargame-а - это будет крутовато. Симулятор мы не тянем :)) С уважением.
Пернатый Змей пишет: генератор случайных чисел на компьютере пишется ручками и не такой уж он случайный как кубик на полу С кубиками тоже не всё просто - очень сильно зависит от «астрального потенциала играющих. И это фактор, с которым надо считаться!