шанс = шанс + (2% - шанс / 100% * 2%) = 50% + (2% - 50% / 100% * 2%) =...
X3 Terran Conflict / X3 Земной конфликт
 
X3 Terran conflict  
 

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



 



шанс = шанс + (2% - шанс / 100% * 2%) = 50% + (2% - 50% / 100% * 2%) =...

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

Абордаж. Продолжение.
(http://x3tc.net/x3_forum/?tid=1039)
Автор: eliseeff
(29.10.2013 11:59:08)

 boojum писал(а):
шанс = шанс + (2% - шанс / 100% * 2%) = 50% + (2% - 50% / 100% * 2%) = 51%
 

Такие записи слегка надрывают мозг наличием символа "%". Делить на сто процентов - это делить на единицу. И вообще формулы какие-то сумбурные, хотя результат в табличке, вроде, почему-то правильный.

Давай, попробуем свести все к понятным этапам.



1. Высчитываем AttackLevel, для чего тупо складываем (Hacking(1) + Hacking(2)), где Hacking(1 и 2) - уровни хакерства двух лучших хакеров. Этот показатель не изменяется. Рандом позже.


2. Высчитываем пределы DefenceLevel

DefenceLevel(min) = (HackingSecurity_base)
DefenceLevel(max) = (HackingSecurity_base + HackingSecurity_random -1)

Вот здесь и зарыт наш первый рандом. Весь этот промежуток {DefenceLevel(min) ... DefenceLevel(max)} составляет все наши 100% вероятности.


3. Теперь пора смотреть, а стоит ли нам вообще считать дальше. Если AttackLevel < DefenceLevel(min), то вероятность равна нулю, а если AttackLevel > DefenceLevel(max) - вероятность 100% и считать больше ничего не надо, первый промежуточный результат готов.


4. Если же нет - тогда начинаем считать.

Шанс успеха равен дроби, в числителе которой числовой промежуток успеха (AttackLevel - DefenceLevel(min)), а в знаменателе - все возможные случаи (DefenceLevel(max) - DefenceLevel(min)).

Чтобы привести его к процентному значению, следует, конечно, помножить это все на сто и приписать знак "%", но это пока не обязательно, ведь результат - промежуточный.




Итак, в п.3 или 4 мы получили первый промежуточный результат. Назовем его "пи с дужкой". Впрочем, звучит не очень хорошо. Назовем его просто Шанс(1).

Теперь будем считать шансы с учетом топора.


5. Топор у нас включается только в случаях неудачи. Это посчитать просто, достаточно лишь от единицы отнять Шанс(1) и помножить на 0,02, поэтому:

Шанс(2) = Шанс(1) + (1 - Шанс(1))*0,02 = Шанс(1) + 0,02 - 0,02*(Шанс(1)) = 0,98*(Шанс(1)) + 0,02

Нетрудно заметить, что проверять ничего не нужно, т.к. Шанс(2) никогда не вылезет за пределы единицы, т.е. максимальной вероятности.

Осталось только посчитать вероятность финального облома и прийти к окончательному результату.


6. Тут еще проще. В 5% случаев успеха мы все равно обломимся. Если мы не двоечники, то мы не станем отнимать 0,05, а умножим все на 0,95:

Шанс(3) = 0,95*Шанс(2)






А теперь, когда все достаточно просто и понятно, можно свести все к окончательному алгоритму и добавить в него модификаторы (брандмауэр, расы).


1. AttackLevel = (Hacking(1) + Hacking(2))


2. DefenceLevel(min) = (K(Race)*HackingSecurity_base)

    DefenceLevel(max) = (K(Race)*HackingSecurity_base + HackingSecurity_random - 1),

где K(Race) = 4 для землян и АОГ, 5 для ксенонов и 1 - для всех остальных.


3. Если есть ул. брандмауэр, то DefenceLevel(min & max) = DefenceLevel(min & max) +70


4. Если AttackLevel < DefenceLevel(min), то Шанс(1) = 0; goto 7


5. Если AttackLevel > DefenceLevel(max), то Шанс(1) = 1; goto 7


6. Шанс(1) = (AttackLevel - DefenceLevel(min)) / (DefenceLevel(max) - DefenceLevel(min))


7. Шанс(total) = 0.95*(0,98*(Шанс(1)) + 0,02) = 0.931*Шанс(1) + 0.019



Вот, в принципе, и все. В седьмом пункте я избавился от еще одного промежуточного значения Шанс(2). Оно нам без надобности, можно считать сразу окончательный результат.

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