fork download
  1. <?php
  2. header("Content-Type: text/plain; charset=utf-8");
  3. class Hero
  4. {
  5. public $name;
  6. public $health;
  7. public $armorLow;
  8. public $armorHigh;
  9. public $block;
  10. public $dodgeCrit;
  11. public $crit;
  12. public $attackLow;
  13. public $attackHigh;
  14. public $charisma;
  15. public $doubleHit = 0;
  16.  
  17. public function __construct($name, $attackLow, $attackHigh, $health, $armorLow, $armorHigh, $block, $dodgeCrit, $crit, $charisma)
  18. {
  19. $this->name = $name;
  20. $this->attackLow = $attackLow;
  21. $this->attackHigh = $attackHigh;
  22. $this->health = $health;
  23. $this->armorLow = $armorLow;
  24. $this->armorHigh = $armorHigh;
  25. $this->block = $block;
  26. $this->dodgeCrit = $dodgeCrit;
  27. $this->crit = $crit;
  28. $this->charisma = $charisma;
  29. }
  30. public function getAverageDmg() //средний урон персонажа
  31. {
  32. $damage = mt_rand($this->attackLow, $this->attackHigh);
  33. return $damage;
  34. }
  35. public function getAverageDmgReduction() //среднее число блокируемое доспехами урона
  36. {
  37. $reduction = mt_rand($this->armorLow, $this->armorHigh);
  38. return $reduction;
  39. }
  40. public function getCrit() // рассчет шанса критического урона с возвратом модификатора атаки
  41. {
  42. $roll = mt_rand(1, 100);
  43. if ($roll <= $this->crit) {
  44. $roll = mt_rand(1, 100);
  45. if ($roll > $this->dodgeCrit) {
  46. $critAmplify = 2;
  47. return $critAmplify;
  48. }
  49. }
  50. $critAmplify = 1;
  51.  
  52. return $critAmplify;
  53. }
  54. public function getBlock() //рассчет блока наподобие крита выше.
  55. {
  56. $roll = mt_rand(1, 100);
  57. if ($roll <= $this->block) {
  58. $blockAmplify = 0;
  59. } else {
  60. $blockAmplify = 1;
  61. }
  62. return $blockAmplify;
  63. }
  64.  
  65. }
  66. class Game
  67. {
  68. public $heroFirst;
  69. public $heroSecond;
  70. public function __construct($heroFirst, $heroSecond)
  71. {
  72. $this->heroFirst = $heroFirst;
  73. $this->heroSecond = $heroSecond;
  74. }
  75. private function makeOneHitFirstHero() // урон первого героя по второму
  76. {
  77.  
  78. $block = $this->heroFirst->getBlock();
  79. $crit = $this->heroFirst->getCrit();
  80.  
  81. $damage1 = ($this->heroFirst->getAverageDmg() - $this->heroSecond->getAverageDmgReduction()) * $crit * $block;
  82. if ($block == 1) {
  83. if ($crit == 2) {
  84. echo "{$this->heroFirst->name} наносит критический урон \n";
  85. }
  86. } else {
  87. echo "Урон {$this->heroFirst->name} заблокирован щитом {$this->heroSecond->name} \n";
  88. }
  89. echo "{$this->heroFirst->name} наносит $damage1 урона. \n";
  90. if ($this->heroFirst->doubleHit != 0) {
  91. $roll = mt_rand(1, 100);
  92. if ($roll <= $this->heroFirst->doubleHit) {
  93. echo "Вторая атака за счет преимущества в харизме: \n";
  94. $block = $this->heroFirst->getBlock();
  95. $crit = $this->heroFirst->getCrit();
  96. $damage2 = ($this->heroFirst->getAverageDmg() - $this->heroFirst->getAverageDmgReduction()) * $crit * $block;
  97. if ($block == 1) {
  98. if ($crit == 2) {
  99. echo "{$this->heroFirst->name} наносит критический урон \n";
  100. }
  101. } else {
  102. echo "Урон {$this->heroFirst->name} заблокирован щитом {$this->heroSecond->name} \n";
  103. }
  104.  
  105. echo "{$this->heroFirst->name} наносит $damage2 урона. \n";
  106. }
  107. }
  108. if (!isset($damage2)) {
  109. $damage = $damage1;
  110. } else {
  111. $damage = $damage1 + $damage2;
  112. }
  113. return $damage;
  114. }
  115. private function makeOneHitSecondHero() //урон второго героя по первому
  116. {
  117. $block = $this->heroSecond->getBlock();
  118. $crit = $this->heroSecond->getCrit();
  119.  
  120. $damage1 = ($this->heroSecond->getAverageDmg() - $this->heroSecond->getAverageDmgReduction()) * $crit * $block;
  121. if ($block == 1) {
  122. if ($crit == 2) {
  123. echo "{$this->heroSecond->name} наносит критический урон \n";
  124. }
  125. } else {
  126. echo "Урон {$this->heroSecond->name} заблокирован щитом {$this->heroFirst->name} \n";
  127. }
  128. echo "{$this->heroSecond->name} наносит $damage1 урона. \n";
  129. if ($this->heroSecond->doubleHit != 0) {
  130. $roll = mt_rand(1, 100);
  131. if ($roll <= $this->heroSecond->doubleHit) {
  132. echo "Вторая атака за счет преимущества в харизме: \n";
  133. $block = $this->heroSecond->getBlock();
  134. $crit = $this->heroSecond->getCrit();
  135. $damage2 = ($this->heroSecond->getAverageDmg() - $this->heroFirst->getAverageDmgReduction()) * $crit * $block;
  136. if ($block == 1) {
  137. if ($crit == 2) {
  138. echo "{$this->heroSecond->name} наносит критический урон \n";
  139. }
  140. } else {
  141. echo "Урон {$this->heroSecond->name} заблокирован щитом {$this->heroFirst->name} \n";
  142. }
  143.  
  144. echo "{$this->heroSecond->name} наносит $damage2 урона. \n";
  145. }
  146. }
  147. if (!isset($damage2)) {
  148. $damage = $damage1;
  149. } else {
  150. $damage = $damage1 + $damage2;
  151. }
  152.  
  153. return $damage;
  154. }
  155.  
  156.  
  157. public function fillDoubleHitString() //присвоить героям шанс на вторую атаку исходя из разницы в харизме
  158. {
  159. $charAbs = abs($this->heroFirst->charisma - $this->heroSecond->charisma);
  160. if ($charAbs > 100) {
  161. $charAbs = 100;
  162. }
  163. $charOne = $this->heroFirst->charisma;
  164. $charTwo = $this->heroSecond->charisma;
  165. if ($charOne > $charTwo) {
  166. $this->heroFirst->doubleHit = $charAbs;
  167. } elseif ($charOne < $charTwo) {
  168. $this->heroSecond->doubleHit = $charAbs;
  169. }
  170. }
  171. public function makeTwentyRounds()
  172. {
  173. $firstFullDmg = 0;
  174. $secondFullDmg = 0;
  175. $this->fillDoubleHitString();
  176. $str = str_repeat('_', 42);
  177. for ($i = 1; $i <= 20; $i++) {
  178. echo "$i раунд: \n";
  179. $firstDmg = $this->makeOneHitFirstHero();
  180. $firstFullDmg += $firstDmg;
  181. $secondDmg = $this->makeOneHitSecondHero();
  182. $secondFullDmg += $secondDmg;
  183. if ($this->heroFirst->health <= $secondDmg) {
  184. $secondDmg = $this->heroFirst->health - 1;
  185. }
  186. if ($this->heroSecond->health <= $firstDmg) {
  187. $firstDmg = $this->heroSecond->health - 1;
  188. }
  189. $this->heroFirst->health -= $secondDmg;
  190. $this->heroSecond->health -= $firstDmg;
  191.  
  192. echo $str . "\n";
  193. if ($this->heroFirst->health == 1) {
  194. echo "{$this->heroSecond->name} победил \n";
  195. break;
  196. }
  197. if ($this->heroSecond->health == 1) {
  198. echo "{$this->heroFirst->name} победил \n";
  199. break;
  200. }
  201.  
  202. }
  203. if ($firstFullDmg > $secondFullDmg) {
  204. echo $this->heroFirst->name . " побеждает в поединке. \n {$this->heroSecond->name} пал на землю без сил. \n";
  205. } elseif ($firstFullDmg < $secondFullDmg) {
  206. echo "{$this->heroSecond->name} побеждает в поединке. \n {$this->heroFirst->name} пал на землю без сил. \n";
  207. }
  208. if ($firstFullDmg == $secondFullDmg) {
  209. echo "Поединок заканчивается ничьей \n.";
  210. }
  211. }
  212.  
  213. }
  214.  
  215. $hero1 = new Hero('DoctorS', 504, 563, 19520, 225, 276, 39, 25, 51, 1276);
  216. $hero2 = new Hero('Demarest', 350, 397, 14275, 214, 261, 50, 25, 41, 775);
  217. $hero11 = new Hero('DoctorS', 504, 563, 19520, 225, 276, 39, 25, 51, 1276);
  218. $hero12 = new Hero('BkHitMan', 460, 515, 18919, 216, 264, 31, 23, 28, 1072);
  219. $game = new Game($hero1, $hero2);
  220.  
  221. $game->makeTwentyRounds();
  222. $game2 = new Game($hero11, $hero12);
  223.  
  224. echo "\n\n\n\n\n";
  225. $game2->makeTwentyRounds();
Success #stdin #stdout 0.02s 24400KB
stdin
Standard input is empty
stdout
1 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 284 урона. 
Урон Demarest заблокирован щитом DoctorS 
Demarest наносит 0 урона. 
__________________________________________
2 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 586 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 332 урона. 
Demarest наносит критический урон 
Demarest наносит 234 урона. 
__________________________________________
3 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Demarest наносит критический урон 
Demarest наносит 284 урона. 
__________________________________________
4 раунд: 
DoctorS наносит 297 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Demarest наносит 118 урона. 
__________________________________________
5 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Demarest наносит 152 урона. 
__________________________________________
6 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 574 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Demarest наносит 142 урона. 
__________________________________________
7 раунд: 
DoctorS наносит 284 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 236 урона. 
Урон Demarest заблокирован щитом DoctorS 
Demarest наносит 0 урона. 
__________________________________________
8 раунд: 
DoctorS наносит 291 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 264 урона. 
Demarest наносит 160 урона. 
__________________________________________
9 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 626 урона. 
Demarest наносит критический урон 
Demarest наносит 324 урона. 
__________________________________________
10 раунд: 
DoctorS наносит 330 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Demarest наносит 98 урона. 
__________________________________________
11 раунд: 
DoctorS наносит 340 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 229 урона. 
Урон Demarest заблокирован щитом DoctorS 
Demarest наносит 0 урона. 
__________________________________________
12 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 542 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 534 урона. 
Урон Demarest заблокирован щитом DoctorS 
Demarest наносит 0 урона. 
__________________________________________
13 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 282 урона. 
Demarest наносит критический урон 
Demarest наносит 338 урона. 
__________________________________________
14 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Урон Demarest заблокирован щитом DoctorS 
Demarest наносит 0 урона. 
__________________________________________
15 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 588 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 287 урона. 
Урон Demarest заблокирован щитом DoctorS 
Demarest наносит 0 урона. 
__________________________________________
16 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Урон Demarest заблокирован щитом DoctorS 
Demarest наносит 0 урона. 
__________________________________________
17 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 562 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Demarest наносит критический урон 
Demarest наносит 274 урона. 
__________________________________________
18 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 638 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 590 урона. 
Demarest наносит 145 урона. 
__________________________________________
19 раунд: 
Урон DoctorS заблокирован щитом Demarest 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 554 урона. 
Demarest наносит 122 урона. 
__________________________________________
20 раунд: 
DoctorS наносит 295 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 632 урона. 
Demarest наносит 147 урона. 
__________________________________________
DoctorS побеждает в поединке. 
 Demarest пал на землю без сил. 





1 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 542 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
2 раунд: 
DoctorS наносит 332 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
BkHitMan наносит 283 урона. 
__________________________________________
3 раунд: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
BkHitMan наносит 260 урона. 
__________________________________________
4 раунд: 
DoctorS наносит 294 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
BkHitMan наносит 228 урона. 
__________________________________________
5 раунд: 
DoctorS наносит 301 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 532 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
6 раунд: 
DoctorS наносит 276 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 284 урона. 
BkHitMan наносит 267 урона. 
__________________________________________
7 раунд: 
DoctorS наносит 299 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
8 раунд: 
DoctorS наносит 327 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
9 раунд: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 283 урона. 
BkHitMan наносит критический урон 
BkHitMan наносит 526 урона. 
__________________________________________
10 раунд: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
BkHitMan наносит 237 урона. 
__________________________________________
11 раунд: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 546 урона. 
BkHitMan наносит 203 урона. 
__________________________________________
12 раунд: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 526 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
13 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 500 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 292 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
14 раунд: 
DoctorS наносит критический урон 
DoctorS наносит 576 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 281 урона. 
BkHitMan наносит 210 урона. 
__________________________________________
15 раунд: 
DoctorS наносит 329 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
BkHitMan наносит 297 урона. 
__________________________________________
16 раунд: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 546 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
17 раунд: 
DoctorS наносит 283 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
18 раунд: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит критический урон 
DoctorS наносит 600 урона. 
Урон BkHitMan заблокирован щитом DoctorS 
BkHitMan наносит 0 урона. 
__________________________________________
19 раунд: 
DoctorS наносит 294 урона. 
Вторая атака за счет преимущества в харизме: 
DoctorS наносит 261 урона. 
BkHitMan наносит 260 урона. 
__________________________________________
20 раунд: 
DoctorS наносит 266 урона. 
Вторая атака за счет преимущества в харизме: 
Урон DoctorS заблокирован щитом BkHitMan 
DoctorS наносит 0 урона. 
BkHitMan наносит 266 урона. 
__________________________________________
DoctorS побеждает в поединке. 
 BkHitMan пал на землю без сил.