romanilyin

DevToDev Fight1

Apr 8th, 2024
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.87 KB | Gaming | 0 0
  1. -- параметры испытаний
  2. iterations = 1500000; -- число испытаний
  3. timeout_limit = 1000; -- число попыток, если не убили за это число ходов то ничья
  4.  
  5. -- статы персонажей
  6. char = {};
  7. char [1] = {};
  8. char [2] = {};
  9.  
  10. char[1]["health"] = 110;
  11. char[1]["damage"] = 11;
  12. char[1]["chancetohit"] = 0.75;
  13.  
  14. char[2]["health"] = 100;
  15. char[2]["damage"] = 10;
  16. char[2]["chancetohit"] = 0.80;
  17.  
  18. -- обнуляем переменные
  19. char_A_wins = 0;
  20. char_B_wins = 0;
  21. char_AB_wins = 0;
  22. timeout_count = 0;
  23.  
  24. -- функция проверки шанса попасть
  25. IsDamage = function(chance)
  26.    local isdamage1 = false;
  27.    local r = math.random();
  28.    if (r<chance) then
  29.       isdamage1 = true;
  30.    end
  31.    return isdamage1;
  32. end
  33.  
  34. -- инициализация генератора случайных чисел
  35. math.randomseed(os.time());
  36.  
  37. -- основной цикл
  38. for i = 1, iterations do
  39.    local char_A_health = char[1].health;
  40.    local char_B_health = char[2].health;
  41.    local char_A_dead = false;
  42.    local char_B_dead = false;
  43.    -- i2 = число попыток, если не убили за это число ходов то ничья
  44.    for i2 = 1, timeout_limit do
  45.          if (IsDamage (char[2].chancetohit)) then char_A_health = char_A_health  - char[2].damage; end
  46.          if (IsDamage (char[1].chancetohit)) then char_B_health = char_B_health  - char[1].damage; end
  47.          if (char_A_health<=0) then
  48.             char_A_dead = true;
  49.          end
  50.          if (char_B_health<=0) then
  51.             char_B_dead = true;
  52.          end
  53.          if (char_A_dead or char_B_dead) then
  54.             break;
  55.          end
  56.    end 
  57.    if (not(char_A_dead)) and( not(char_B_dead)) then
  58.          -- считаем ничьи по таймауту отдельно
  59.          timeout_count = timeout_count +1;
  60.       else
  61.          if (char_A_dead and char_B_dead) then
  62.              -- ничья без таймаута
  63.              char_AB_wins = char_AB_wins + 1;  
  64.          else
  65.             if (char_A_dead) then
  66.              -- победил B
  67.              char_B_wins = char_B_wins + 1;  
  68.             end
  69.             if (char_B_dead) then
  70.              -- победил A
  71.              char_A_wins = char_A_wins + 1;  
  72.             end
  73.          end
  74.       end
  75. end
  76. print ("A wins =" .. char_A_wins .. " (" .. (100*char_A_wins/(char_A_wins+char_B_wins+char_AB_wins+timeout_count)) .. "%)");
  77. print ("B wins =" .. char_B_wins .. " (" .. (100*char_B_wins/(char_A_wins+char_B_wins+char_AB_wins+timeout_count)) .. "%)");
  78. print ("AB wins =" .. char_AB_wins .. " (" .. (100*char_AB_wins/(char_A_wins+char_B_wins+char_AB_wins+timeout_count)) .. "%)");
  79. print ("timeout =" .. timeout_count .. " (" .. (100*timeout_count/(char_A_wins+char_B_wins+char_AB_wins+timeout_count)) .. "%)");
  80.  
  81.  
Add Comment
Please, Sign In to add comment