Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.95 KB | None | 0 0
  1. // ConsoleApplication97.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string>
  7. #include <vector>
  8.  
  9. using namespace std;
  10. //заголовочный файл, в котором я описываю вирутальный класс (класс, содержащий или наследующий без переопределения хотя бы одну чистую виртуальную функцию.)
  11. class Fighters// сам абстрактный класс
  12. {
  13. int x;// переменная типа private, к ней можно обратиться только внутри самого класса, она не наследуется, но к ней есть доступ благодаря функциям аксессорам
  14. protected:
  15. int y;// переменная типа protected, к ней имеют доступ только наследники и сам класс
  16. int uron;// переменная типа protected, к ней имеют доступ только наследники и сам класс
  17. public://
  18. Fighters() {}// конструктор по умолчанию
  19. Fighters(int hp, int mana, int ur) : x(hp), y(mana), uron(ur) {}// конструктор преобразования с полем инициализации.
  20. //Используя этот конструктор, нельзя создать объект, так как класс виртуальный
  21. virtual void fight(Fighters &aaa) = 0;// виртуальная чистая (=0) функция, которая может быть переопределена наследниками базового виртуального класса
  22. int getx() // метод аксессор для переменной типа private, позволяет обратиться к переменной вне класса
  23. {
  24. return x;
  25. }
  26. int gety() // метод аксессор для переменной типа protected, позволяет обратиться к переменной вне класса (и вне класса наследника)
  27. {
  28. return y;
  29. }
  30. int getur() // метод аксессор для переменной типа protected, позволяет обратиться к переменной вне класса (и вне класса наследника)
  31. {
  32. return uron;
  33. }
  34. void set(int a, int b, int urr)//метод аксессор для присваивания значений приватным и протектед полям класса
  35. {
  36. x = a;
  37. y = b;
  38. uron = urr;
  39. }
  40. virtual ~Fighters() {}// виртуальный деструктор. Разрушает объект, который создается с помощью виртуального класса в классе наследнике, так как объект в виртульном созать нельзя
  41. };
  42.  
  43. //далее идут классы наследники с типами наследования:
  44. // наследование типа public -> переменные наследуются также как и были инициализированы (кроме private - они не наследуются)
  45. // наследование типа protected переопределяет типа переменных базового класса для наследника, то есть public -> protected ; protected-> protected (private все также не наследуется)
  46. // наследование типа private переопределяет типа переменных базового класса для наследника, все они становятся типа private (все кроме private он все также не наследуется)
  47.  
  48. class Mage : public Fighters// первый класс наследник, типа паблик
  49. {
  50. int spell;//уникальная переменная типа private для каждого класса (для задания, она отвечает за определенную способность персонажа)
  51. public:
  52. Mage() {}// конструктор по умолчанию
  53. Mage(int hp, int mana, int damage, int cast) : Fighters(hp, mana, damage), spell(cast) {}//конструктор преобразования
  54. void fight(Fighters &aaa) override final; // оверрайд явно показывает, что функция переопределена; файнал говорит, что с этого этапа наслежования функция не виртуальна (то есть у всех потомков она не будет виртулаьной)
  55. };
  56.  
  57. class Hero : public Fighters// второй класс наследник типа паблик
  58. {
  59. protected:
  60. int shield;// уникальная привтаная переменная
  61. public:
  62. Hero() {}// конструктор по умолчанию
  63. Hero(int hp, int mana, int damage, int shelter) : Fighters(hp, mana, damage), shield(shelter) {}//конструктор преобразования с полем инициализации
  64. void fight(Fighters &aaa) override final;// оверрайд явно показывает, что функция переопределена; файнал говорит, что с этого этапа наслежования функция не виртуальна (то есть у всех потомков она не будет виртулаьной)
  65. };
  66.  
  67. class Rogue : public Fighters// третий класс наследник типа паблик
  68. {
  69. int v;// уникальная привтаная переменная
  70. public:
  71. Rogue() {}// конструктор по умолчанию
  72. Rogue(int hp, int mana, int damage, int haze) :Fighters(hp, mana, damage), v(haze) {}//конструктор преобразования с полем инициализации
  73. void fight(Fighters &aaa)override final;// оверрайд явно показывает, что функция переопределена; файнал говорит, что с этого этапа наслежования функция не виртуальна (то есть у всех потомков она не будет виртулаьной)
  74.  
  75. };
  76.  
  77. //////////////////////////////////////
  78. //////////////////////////////////////
  79. //////////////////////////////////////
  80. //////////////////////////////////////
  81. // ConsoleApplication97.cpp : Defines the entry point for the console application.
  82. //
  83.  
  84. #include "stdafx.h"
  85. #include <iostream>
  86. #include <string>
  87. #include <exception>
  88. #include <vector>
  89. #include "fighters.h"
  90. // срр файл, в котором я подключая созданный ранее класс с помощью #include "fighters.h"
  91. // также здесь расписаны методы для каждого из классов
  92. using namespace std;
  93. // котортко о трех классах:
  94. // у каждого класса в срелневековье есть сопсобность, на которую тратится мана, которая срабатывает в момент когда здоровье ниже 0
  95. // у мага, например, шит который увеличивает его здоровье (но щит тратит ману и когда мана закончится, то маг погибнет)
  96. // у разбойника например есть есть способность убежать если он выдержит определенный мговенный удар
  97. // программа считает сколько "ударов" выдеривает каждый класс от другого в зависимости от заданных характеристик (в мейне уже)
  98. void Mage::fight(Fighters &aaa)// метод для класса Mage (принимает ссылку, т.к. FIghters абстрактны класс
  99. {
  100. cout << "Fight" << endl;
  101. // далее идет инициальзация переменных с помощью методов аксессоров и переменны, которые необходимы для работы программы
  102.  
  103. int urr = aaa.getur();
  104. int udari = -1;
  105. int hp1 = getx();
  106. int mana1 = gety();
  107. cout << "zdorovie: " << hp1 << endl;
  108. //алгоритм, зависимый от здоровья и урона персонажа
  109. // если урон персонажа равен 0 то кидается исключение (или программа будет бесконечно длиться и "с помощью божьей воли" его атака становится равна 1
  110. // подсчет ударов до примемнения способности
  111. while (hp1 >= 0)
  112. {
  113. hp1 -= urr;
  114. try
  115. {
  116. if (urr == 0)
  117. throw 1;
  118. }
  119. catch (int i)
  120. {
  121. cout << "nadilm bozhie siloi" << endl;
  122. urr = 1;
  123. }
  124. udari++;
  125. cout << hp1 << " ";
  126. }
  127. cout << endl;
  128. cout << "do sposobnosti mag viderzhl stolko udarov: " << udari << endl;
  129. if (hp1 <= 0)
  130. {
  131. cout << "vkluchaem sposobnosty" << endl;
  132. hp1 = hp1 + 200 * mana1 / spell;
  133. cout << "novoe zdorovie: " << hp1 << endl;
  134. }
  135. // подсчет ударов который выдержит после приминения способности
  136. while (hp1 >= 0)
  137. {
  138. hp1 -= urr;
  139. udari++;
  140. }
  141. cout << "mag viderzhal stol'ko udarov: " << udari << endl;
  142. }
  143. void Hero::fight(Fighters &aaa)// чисто актически то же самое, что и в маге, только особый навык работает немного по-другому (тратит другое количество маны и дает броню)
  144. {
  145. cout << "Fight" << endl;
  146. // основные алгоритмы те же что и в методе mage
  147. int urr = aaa.getur();
  148. int hp2 = getx();
  149. int mana2 = gety();
  150.  
  151. int udari = -1;
  152. cout << "zdorovie: " << hp2 << endl;
  153. while (hp2 > 0)
  154. {
  155. hp2 -= urr;
  156. try
  157. {
  158. if (urr == 0)
  159. throw 1;
  160. }
  161. catch (int i)
  162. {
  163. cout << "nadilm bozhie siloi" << endl;
  164. urr = 1;
  165. }
  166. udari++;
  167. cout << hp2 << " ";
  168. }
  169. cout << endl;
  170. cout << "do vklucheniya sposobnosti hero viderzhal edarov: " << udari << endl;
  171. if (hp2 <= 0)
  172. {
  173. cout << "vkluchaem sposobnosty" << endl;
  174. hp2 = hp2 + 150 * mana2 / shield;
  175. cout << "novoezdorovie: " << hp2 << endl;
  176. }
  177. while (hp2 > 0)
  178. {
  179. hp2 -= urr;
  180. udari++;
  181. }
  182. cout << "hero viderzhal stol'ko udarov: " << udari << endl;
  183. }
  184. void Rogue::fight(Fighters &aaa)
  185. {// фактичски то е амое что и в двух предыдущих классах
  186. // но добавляется еще новая свособность скрыться (ниже)
  187. cout << "Fight" << endl;
  188. int urr = aaa.getur();
  189. try
  190. {
  191. if (urr == 0)
  192. throw 1;
  193. }
  194. catch (int i)
  195. {
  196. cout << "nadilm bozhie siloi" << endl;
  197. urr = 1;
  198. }
  199. int hp = getx();
  200. int mana = gety();
  201. int udari = -1;
  202. cout << "zdorovie: ";
  203. while (hp > 0)
  204. {
  205. hp -= urr;
  206. udari++;
  207. cout << hp << " ";
  208. }
  209. cout << endl;
  210. cout << "do vklucheniya sposobnosti razboinik viderzhal edarov: " << udari << endl;
  211. if (hp <= 0)
  212. {
  213. cout << "vkluchaem sposobnosty" << endl;
  214. hp = hp + 75 * mana / v;
  215. cout << "novoe zdorovie: " << hp << endl;
  216. }
  217. int udari1 = udari + 3;
  218. if (hp - urr * 5>0)// если разбойнику удалось после применения способности выдержать пятикратный удар то он может скрыться в тени и сбежать
  219. {
  220.  
  221. cout << "Razboinik unezhal i viderzhal: " << udari1 << endl;
  222. }
  223. else cout << "rogue pogib i viderzhal stol'ko udarov: " << udari1 << endl;
  224. }
  225. //////////////////////////////////////
  226. //////////////////////////////////////
  227. //////////////////////////////////////
  228. //////////////////////////////////////
  229. // ConsoleApplication98.cpp : Defines the entry point for the console application.
  230. //
  231.  
  232. #include "stdafx.h"
  233. #include <iostream>
  234. #include "fighters.h"
  235. #include <exception>
  236. // мейн, здесь подключена та же библиотека #include "fighters.h" и реализованы методы из срр файла (topigra)
  237. using namespace std;
  238.  
  239. int main()
  240. {
  241. //ниже для объектов здоровье/ мана/ урона/ манакост способности
  242. Mage mag(485, 700, 90, 100);// объект класса маг
  243. Hero her(1000, 120, 65, 24);// объект класса воин
  244. Rogue rogu(650, 375, 54, 50);// объект класса разбойнк
  245. // далее применяются всевозможные их комбинации схватки и пишется результат и кто сколько ударов смог выдержать
  246. mag.fight(her);
  247. mag.fight(rogu);
  248. mag.fight(mag);
  249. her.fight(mag);
  250. her.fight(rogu);
  251. her.fight(her);
  252. her.fight(mag);
  253. rogu.fight(her);
  254. rogu.fight(mag);
  255. rogu.fight(rogu);
  256. return 0;
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement