Сейчас поскриплю мозгами. Мдя... Не столько сложен расчет, сколь трудн...
X3 Terran Conflict / X3 Земной конфликт
 
X3 Terran conflict  
 

На сайте онлайн (человек): 87



 



Сейчас поскриплю мозгами. Мдя... Не столько сложен расчет, сколь трудн...

Terran Conflict (X3TC) / Форум / Форум по игре X3 Terran Conflict (X3TC) / X3 Земной конфликт / Абордаж. Продолжение.

Абордаж. Продолжение.
(http://x3tc.net/x3_forum/?tid=1039)
Автор: eliseeff
(30.10.2013 15:42:32)

 eliseeff писал(а):
Сейчас поскриплю мозгами.
 

Мдя...

Не столько сложен расчет, сколь трудно его объяснить без построения квадратиков. С квадратиками - все довольно просто, но, блин, рисовать их...


Итак, все сводится к двум числовым осям, на одной из которых защита (пусть будет по горизонтали), а на другой - атака. Нетрудно понять, что диагональ и все, что выше/левее - это успех, а то, что ниже/правее - провал. Диагональ причисляется к успеху, поскольку равенство показателей означает успешную прорезку.

Попытки наши представляют из себя прямоугольники, лежащие на этих числовых осях в зависимости от начальных значений атаки и защиты. Если атака больше защиты - прямоугольник вытянут вверх. Если наоборот - вытянут по горизонтали. И только если они равны, то мы получим квадрат, с которым проще всего, но об этом позже.

Ширина прямоугольника всегда равна (HullDefence(max) - HullDefence(min) + 1). Высота - (HullAttack(max) - HullAttack(min) + 1). А его площадь, соответственно, равна произведению ширины на высоту, а самое главное - это и есть количество всех возможных вариантов рандома на этом этапе, т.е это значение всегда будет нашим знаменателем в подсчете вероятности.

// Здесь и далее я сократил "Boarding" в своих названиях переменных, но смысл, думаю, понятен. Название переменной из таблицы, естественно, осталось без изменений.

Как же могут лежать эти прямоугольники? Я не придерживался пропорций, но схематично это выглядит примерно так (примерно в порядке сложности расчета):



Вариант 1. Удача стопроцентная, все поют и пляшут. Происходит, если HullAttack(min) больше или равно HullDefence(max). Считать ничего не нужно, Шанс = 100%.






Вариант 2. Гарантированный провал. Пичалька, переходящая в горюшко. Происходит, когда HullDefence(min) превышает HullAttack(max). Считать снова ничего не нужно, Шанс = 0.






Вариант 3. Квадрат. Происходит, когда HullDefence = HullAttack. Соответственно, минимальный и максимальный показатели у них тоже совпадают, поэтому считать можно только один из них, а подсчет вероятности совсем прост.








Варианты 4 и 5. Вот здесь будет уже посложнее, чем с квадратиком, но все равно ненамного. Мы с этим справимся.




Итак, с чего мы начнем, чтобы не делать лишних телодвижений? Прежде всего следует посчитать расовые и прочие модификаторы для базовых значений атаки и защиты. Берем из таблицы BoardingHullDefence, если земляне или АОГ, то удваиваем, а в случае наличия поляризатора еще и увеличиваем на 150. Полученное значение назовем HullDefence.


Теперь складываем механику двух лучших механиков и, если они в аб. капсуле, удваиваем результат. Результат назовем HullAttack.


Рассчитать пределы изменений хотя бы одного из базовых значений нам придется все равно. Ну, пусть это будет защита.


HullDefence(min) = HullDefence - [0.1*HullDefence]
HullDefence(max) = HullDefence + [0.1*HullDefence] - 1


ОК. Теперь сравниваем HullDefence с HullAttack. Если они равны, то все просто. Мы получили наш квадрат из первого варианта. Главное - не забывать, что это все-таки не геометрия, а квадрат - числовой.


Довольно неплохо это проиллюстрирует довольно простая табличка:

55:15:25:35:45:5
44:14:24:34:44:5
33:13:23:33:43:5
22:12:22:32:42:5
11:11:21:31:41:5
Атака/Защита12345



Сколько здесь наших непроигранных результатов (ничья ведь в нашу пользу)? Да очень просто. Посчитаем А = (Атака(max) - Атака(min) + 1). Тогда наш искомый икс равен ((А2 - А) / 2 + А). А всего сколько "розыгрышей" было? А2. И какова в итоге вероятность не проиграть? ((А2 - А) / 2 + А) / А2)



Вот так и считаем: А = (HullDefence(max) - HullDefence(min) + 1)

Шанс = ((А2 - А) / 2 + А) / А2) = ... = (A + 1) / (2 * A)

И все-таки ничто мне не заменит листок бумаги с карандашом. Посидел, помусолил и упростил...




Если же HullDefence не равен HullAttack, то нам придется уже считать пределы изменения атаки.


HullAttack(min) = HullAttack - [0.1*HullAttack]
HullAttack(max) = HullAttack + [0.1*HullAttack] - 1


Теперь следует определить, что все-таки больше, атака или защита и исходя из этого плясать дальше.


Если HullDefence больше HullAttack, то:


Если HullDefence(min) > HullAttack(max), то Шанс = 0; end (not happy)
Если HullDefence(min) =< HullAttack(max), то переходим к этапу "считаем треугольнички" (далi буде)


Если HullDefence меньше HullAttack, то:


Если HullAttack(min) >= HullDefence(max), то Шанс = 100%; [happy]end
Если же HullAttack(min) < HullDefence(max), то опять-таки переходим к этапу "считаем треугольнички" (далi буде)






А теперь, как и было обещано, считаем треугольнички.





Прямоугольники у нас хоть и не являются квадратами, но отсекаемый треугольник всегда является, так сказать, "равносторонним". И считается почти так же, как мы считали в свое время квадрат. Разница лишь в том, что в одном случае у нас треугольник (включая диагональ) является успехом, а в другом (исключая диагональ) - провалом. Начнем с первого.





Итак, если HullDefence больше HullAttack, то мы видим следующую картинку:



Несложно догадаться, что сторона треугольника равна:


А = (HullAttack(max) - HullDefence(min) + 1)


Площадь прямоугольника равна:


S = (HullDefence(max) - HullDefence(min) + 1) * (HullAttack(max) - HullAttack(min) + 1)


Тогда вероятность успеха у нас в этом случае:


Шанс = ((А2 - А) / 2 + А) / S = ... = (А2 + А) / (2 * S)





Теперь рассмотрим случай, когда HullDefence меньше HullAttack.



Здесь у нас сторона треугольника равна:

А = (HullDefence(max) - HullAttack(min) + 1)


Площадь прямоугольника по-прежнему:


S = (HullDefence(max) - HullDefence(min) + 1) * (HullAttack(max) - HullAttack(min) + 1)


А вероятность успеха:


Шанс = (S - (А2 - А) / 2) / S = ... = 1 - ((А2 - А) / (2 * S))

дерево темы → Абордаж. Продолжение. Абордаж. Продолжение. »
Список игр