fork(1) download
  1. import java.util.Random;
  2.  
  3. class Monster {
  4. String name = "";
  5.  
  6. double strength; // Сила удара монстра. То, сколько силы он может вложить в удар.
  7. double dexterity; // Ловкость и координация. То как хорошо монстр сможет нанести прицельный точный удар.
  8. double endurance; // Выносливость. Как долго монстр может действовать на пределе своих физических фозможностей.
  9. double weapon_skill; // Умение владеть оружием. В этой упрощенной модели одно на все виды оружия.
  10.  
  11. double fear; // Насколько монстру страшно. Чем ему страшнее тем хуже некотрые его характеристики.
  12. double rage; // Степень ярости. Мало кто может убить живое существо будучи совершенно спокоен.
  13. double sadness; // Грусть и апатичность. При больших значениях монстру становится наплевать даже на самого себя что негативно сказывается на шансах не умереть.
  14. double happiness; // Счастие. При комбинации с яростью монстр может впасть в кровавое безумие.
  15.  
  16. double blood; // Сколько литров крови в сравнении с нормальнм объемом в организме монстра.
  17. double pain; // // Насколько серьезную боль от ударов противника испытывает монстр.
  18.  
  19. Weapon weapon; // Оружие, которым вооружен монстр.
  20. Armor armor; // Броня надетая на монстра.
  21. };
  22.  
  23. class Weapon {
  24. int type; // Режущее, Колющее, Дробящее, Хлысты, Стрелковое.
  25. double weight;// Вес - имеется ввиду вес ударной части, а не всего оружия вцелом.
  26. double contact_area; // Площадь контакта оружия с целью. Большая у дубины. Маленькая у шпаги. (мм2)
  27. double hardness; // Твердость ударной части
  28. double hits_pro_second; // Сколько ударов в секунду можно произвести этим оружием максимально. Реальное количество обычно ниже так как зависит еще от умения обращаться с этим оружием и текущего физического сосотяния монстра.
  29. };
  30.  
  31. class Armor {
  32. double hardness; // Твердость
  33. double slipperiness; // Скользкость. Шанс что оружие только заденет по косой вместо прямого удара. Большой у пластинчатых допсехов перед клинками. Маленький у кожаннй брони или перед моргенштерном.
  34. double elasticity; // Упругость. То насколько может быть продавлена броня без того чтоб быть разорванной. Большая у кожанной брони. Маленькая у железных доспехов.
  35. double thickness; // Толщина
  36. };
  37.  
  38. class LvichkaSystemDamage {
  39.  
  40. static Random rand = new Random();
  41.  
  42. public static void main(String[] args) {
  43. Monster goblin = new Monster();
  44. goblin.name = "Гоблин";
  45.  
  46. goblin.strength = rand.nextDouble();
  47. goblin.dexterity = rand.nextDouble();
  48. goblin.endurance = rand.nextDouble();
  49. goblin.weapon_skill = rand.nextDouble();
  50.  
  51. goblin.fear = 0;
  52. goblin.rage = 0;
  53. goblin.sadness = 0;
  54. goblin.happiness = 0;
  55.  
  56. goblin.blood = 1.0;
  57. goblin.pain = 0;
  58.  
  59. Weapon sword = new Weapon();
  60. sword.type = 1;
  61. sword.weight = 3.7;
  62. sword.contact_area = 100;
  63. sword.hardness = 0.5;
  64. goblin.weapon = sword;
  65.  
  66. Armor leather_armor = new Armor();
  67. leather_armor.hardness = 0.2;
  68. leather_armor.slipperiness = 0.1;
  69. leather_armor.elasticity = 0.5;
  70. leather_armor.thickness = 5.2;
  71. goblin.armor = leather_armor;
  72.  
  73.  
  74.  
  75. Monster lioness = new Monster();
  76. lioness.name = "Львица";
  77.  
  78. lioness.strength = rand.nextDouble();
  79. lioness.dexterity = rand.nextDouble();
  80. lioness.endurance = rand.nextDouble();
  81. lioness.weapon_skill = rand.nextDouble();
  82.  
  83. lioness.fear = 0;
  84. lioness.rage = 0;
  85. lioness.sadness = 0;
  86. lioness.happiness = 0;
  87.  
  88. lioness.blood = 1.0;
  89. lioness.pain = 0;
  90.  
  91. Weapon paw = new Weapon();
  92. paw.type = 1;
  93. paw.weight = 3.7;
  94. paw.contact_area = 100;
  95. paw.hardness = 0.5;
  96. lioness.weapon = paw;
  97.  
  98. Armor fur_armor = new Armor();
  99. fur_armor.hardness = 0.2;
  100. fur_armor.slipperiness = 0.1;
  101. fur_armor.elasticity = 0.5;
  102. fur_armor.thickness = 5.2;
  103. lioness.armor = fur_armor;
  104.  
  105. Monster a = goblin;
  106. Monster b = lioness;
  107.  
  108. int turn = 1;
  109.  
  110. while (!hit(a, b)) {
  111. System.out.println("-------------------------------");
  112. System.out.println("ХОД " + turn);
  113. Monster swap = b;
  114. b = a;
  115. a = swap;
  116. turn++;
  117. }
  118. System.out.println("-------------------------------");
  119. System.out.println(String.format("Бой закончен на %s ходу", turn - 1));
  120.  
  121.  
  122. }
  123.  
  124. static boolean hit(Monster src, Monster dest) {
  125. double kill_chance = get_kill_chance(src, dest);
  126. System.out.println(String.format("%s бъет %s с шансом убить %s", src.name, dest.name, (int)(kill_chance * 100)) + "%");
  127.  
  128. if (rand.nextDouble() <= kill_chance) {
  129. System.out.println(src.name + " убивает " + dest.name + " повредив ударом жизненноважные органы.");
  130. return true;
  131. } else {
  132. System.out.println("Удар не повредил жизненноважные органы");
  133. return false;
  134. }
  135.  
  136. }
  137.  
  138. static double get_kill_chance(Monster src, Monster dest) {
  139. return 0.03 + rand.nextDouble() * 0.07;
  140. }
  141. }
  142.  
Success #stdin #stdout 0.07s 380160KB
stdin
Standard input is empty
stdout
Гоблин бъет Львица с шансом убить 9%
Удар не повредил жизненноважные органы
-------------------------------
ХОД 1
Львица бъет Гоблин с шансом убить 6%
Удар не повредил жизненноважные органы
-------------------------------
ХОД 2
Гоблин бъет Львица с шансом убить 4%
Удар не повредил жизненноважные органы
-------------------------------
ХОД 3
Львица бъет Гоблин с шансом убить 5%
Удар не повредил жизненноважные органы
-------------------------------
ХОД 4
Гоблин бъет Львица с шансом убить 3%
Гоблин убивает Львица повредив ударом жизненноважные органы.
-------------------------------
Бой закончен на 4 ходу