Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication97.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- //заголовочный файл, в котором я описываю вирутальный класс (класс, содержащий или наследующий без переопределения хотя бы одну чистую виртуальную функцию.)
- class Fighters// сам абстрактный класс
- {
- int x;// переменная типа private, к ней можно обратиться только внутри самого класса, она не наследуется, но к ней есть доступ благодаря функциям аксессорам
- protected:
- int y;// переменная типа protected, к ней имеют доступ только наследники и сам класс
- int uron;// переменная типа protected, к ней имеют доступ только наследники и сам класс
- public://
- Fighters() {}// конструктор по умолчанию
- Fighters(int hp, int mana, int ur) : x(hp), y(mana), uron(ur) {}// конструктор преобразования с полем инициализации.
- //Используя этот конструктор, нельзя создать объект, так как класс виртуальный
- virtual void fight(Fighters &aaa) = 0;// виртуальная чистая (=0) функция, которая может быть переопределена наследниками базового виртуального класса
- int getx() // метод аксессор для переменной типа private, позволяет обратиться к переменной вне класса
- {
- return x;
- }
- int gety() // метод аксессор для переменной типа protected, позволяет обратиться к переменной вне класса (и вне класса наследника)
- {
- return y;
- }
- int getur() // метод аксессор для переменной типа protected, позволяет обратиться к переменной вне класса (и вне класса наследника)
- {
- return uron;
- }
- void set(int a, int b, int urr)//метод аксессор для присваивания значений приватным и протектед полям класса
- {
- x = a;
- y = b;
- uron = urr;
- }
- virtual ~Fighters() {}// виртуальный деструктор. Разрушает объект, который создается с помощью виртуального класса в классе наследнике, так как объект в виртульном созать нельзя
- };
- //далее идут классы наследники с типами наследования:
- // наследование типа public -> переменные наследуются также как и были инициализированы (кроме private - они не наследуются)
- // наследование типа protected переопределяет типа переменных базового класса для наследника, то есть public -> protected ; protected-> protected (private все также не наследуется)
- // наследование типа private переопределяет типа переменных базового класса для наследника, все они становятся типа private (все кроме private он все также не наследуется)
- class Mage : public Fighters// первый класс наследник, типа паблик
- {
- int spell;//уникальная переменная типа private для каждого класса (для задания, она отвечает за определенную способность персонажа)
- public:
- Mage() {}// конструктор по умолчанию
- Mage(int hp, int mana, int damage, int cast) : Fighters(hp, mana, damage), spell(cast) {}//конструктор преобразования
- void fight(Fighters &aaa) override final; // оверрайд явно показывает, что функция переопределена; файнал говорит, что с этого этапа наслежования функция не виртуальна (то есть у всех потомков она не будет виртулаьной)
- };
- class Hero : public Fighters// второй класс наследник типа паблик
- {
- protected:
- int shield;// уникальная привтаная переменная
- public:
- Hero() {}// конструктор по умолчанию
- Hero(int hp, int mana, int damage, int shelter) : Fighters(hp, mana, damage), shield(shelter) {}//конструктор преобразования с полем инициализации
- void fight(Fighters &aaa) override final;// оверрайд явно показывает, что функция переопределена; файнал говорит, что с этого этапа наслежования функция не виртуальна (то есть у всех потомков она не будет виртулаьной)
- };
- class Rogue : public Fighters// третий класс наследник типа паблик
- {
- int v;// уникальная привтаная переменная
- public:
- Rogue() {}// конструктор по умолчанию
- Rogue(int hp, int mana, int damage, int haze) :Fighters(hp, mana, damage), v(haze) {}//конструктор преобразования с полем инициализации
- void fight(Fighters &aaa)override final;// оверрайд явно показывает, что функция переопределена; файнал говорит, что с этого этапа наслежования функция не виртуальна (то есть у всех потомков она не будет виртулаьной)
- };
- //////////////////////////////////////
- //////////////////////////////////////
- //////////////////////////////////////
- //////////////////////////////////////
- // ConsoleApplication97.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <exception>
- #include <vector>
- #include "fighters.h"
- // срр файл, в котором я подключая созданный ранее класс с помощью #include "fighters.h"
- // также здесь расписаны методы для каждого из классов
- using namespace std;
- // котортко о трех классах:
- // у каждого класса в срелневековье есть сопсобность, на которую тратится мана, которая срабатывает в момент когда здоровье ниже 0
- // у мага, например, шит который увеличивает его здоровье (но щит тратит ману и когда мана закончится, то маг погибнет)
- // у разбойника например есть есть способность убежать если он выдержит определенный мговенный удар
- // программа считает сколько "ударов" выдеривает каждый класс от другого в зависимости от заданных характеристик (в мейне уже)
- void Mage::fight(Fighters &aaa)// метод для класса Mage (принимает ссылку, т.к. FIghters абстрактны класс
- {
- cout << "Fight" << endl;
- // далее идет инициальзация переменных с помощью методов аксессоров и переменны, которые необходимы для работы программы
- int urr = aaa.getur();
- int udari = -1;
- int hp1 = getx();
- int mana1 = gety();
- cout << "zdorovie: " << hp1 << endl;
- //алгоритм, зависимый от здоровья и урона персонажа
- // если урон персонажа равен 0 то кидается исключение (или программа будет бесконечно длиться и "с помощью божьей воли" его атака становится равна 1
- // подсчет ударов до примемнения способности
- while (hp1 >= 0)
- {
- hp1 -= urr;
- try
- {
- if (urr == 0)
- throw 1;
- }
- catch (int i)
- {
- cout << "nadilm bozhie siloi" << endl;
- urr = 1;
- }
- udari++;
- cout << hp1 << " ";
- }
- cout << endl;
- cout << "do sposobnosti mag viderzhl stolko udarov: " << udari << endl;
- if (hp1 <= 0)
- {
- cout << "vkluchaem sposobnosty" << endl;
- hp1 = hp1 + 200 * mana1 / spell;
- cout << "novoe zdorovie: " << hp1 << endl;
- }
- // подсчет ударов который выдержит после приминения способности
- while (hp1 >= 0)
- {
- hp1 -= urr;
- udari++;
- }
- cout << "mag viderzhal stol'ko udarov: " << udari << endl;
- }
- void Hero::fight(Fighters &aaa)// чисто актически то же самое, что и в маге, только особый навык работает немного по-другому (тратит другое количество маны и дает броню)
- {
- cout << "Fight" << endl;
- // основные алгоритмы те же что и в методе mage
- int urr = aaa.getur();
- int hp2 = getx();
- int mana2 = gety();
- int udari = -1;
- cout << "zdorovie: " << hp2 << endl;
- while (hp2 > 0)
- {
- hp2 -= urr;
- try
- {
- if (urr == 0)
- throw 1;
- }
- catch (int i)
- {
- cout << "nadilm bozhie siloi" << endl;
- urr = 1;
- }
- udari++;
- cout << hp2 << " ";
- }
- cout << endl;
- cout << "do vklucheniya sposobnosti hero viderzhal edarov: " << udari << endl;
- if (hp2 <= 0)
- {
- cout << "vkluchaem sposobnosty" << endl;
- hp2 = hp2 + 150 * mana2 / shield;
- cout << "novoezdorovie: " << hp2 << endl;
- }
- while (hp2 > 0)
- {
- hp2 -= urr;
- udari++;
- }
- cout << "hero viderzhal stol'ko udarov: " << udari << endl;
- }
- void Rogue::fight(Fighters &aaa)
- {// фактичски то е амое что и в двух предыдущих классах
- // но добавляется еще новая свособность скрыться (ниже)
- cout << "Fight" << endl;
- int urr = aaa.getur();
- try
- {
- if (urr == 0)
- throw 1;
- }
- catch (int i)
- {
- cout << "nadilm bozhie siloi" << endl;
- urr = 1;
- }
- int hp = getx();
- int mana = gety();
- int udari = -1;
- cout << "zdorovie: ";
- while (hp > 0)
- {
- hp -= urr;
- udari++;
- cout << hp << " ";
- }
- cout << endl;
- cout << "do vklucheniya sposobnosti razboinik viderzhal edarov: " << udari << endl;
- if (hp <= 0)
- {
- cout << "vkluchaem sposobnosty" << endl;
- hp = hp + 75 * mana / v;
- cout << "novoe zdorovie: " << hp << endl;
- }
- int udari1 = udari + 3;
- if (hp - urr * 5>0)// если разбойнику удалось после применения способности выдержать пятикратный удар то он может скрыться в тени и сбежать
- {
- cout << "Razboinik unezhal i viderzhal: " << udari1 << endl;
- }
- else cout << "rogue pogib i viderzhal stol'ko udarov: " << udari1 << endl;
- }
- //////////////////////////////////////
- //////////////////////////////////////
- //////////////////////////////////////
- //////////////////////////////////////
- // ConsoleApplication98.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- #include "fighters.h"
- #include <exception>
- // мейн, здесь подключена та же библиотека #include "fighters.h" и реализованы методы из срр файла (topigra)
- using namespace std;
- int main()
- {
- //ниже для объектов здоровье/ мана/ урона/ манакост способности
- Mage mag(485, 700, 90, 100);// объект класса маг
- Hero her(1000, 120, 65, 24);// объект класса воин
- Rogue rogu(650, 375, 54, 50);// объект класса разбойнк
- // далее применяются всевозможные их комбинации схватки и пишется результат и кто сколько ударов смог выдержать
- mag.fight(her);
- mag.fight(rogu);
- mag.fight(mag);
- her.fight(mag);
- her.fight(rogu);
- her.fight(her);
- her.fight(mag);
- rogu.fight(her);
- rogu.fight(mag);
- rogu.fight(rogu);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement