|
| 1 | +# Седмица 10 - Наследяване в Elder Thing |
| 2 | + |
| 3 | +Този проект разширява системата за управление на герой от играта Elder Thing, въвеждайки концепции за наследяване. Създава се йерархия от класове, базирана на различни специализирани типове герои, които съществуват в света на играта. |
| 4 | + |
| 5 | +## Структура на проекта |
| 6 | + |
| 7 | +Проектът включва следните файлове: |
| 8 | +- `character.hpp` - декларация на базовия клас Character |
| 9 | +- `character.cpp` - имплементация на методите за базовия клас Character |
| 10 | +- `astrologer.hpp` - декларация на класа Astrologer, специализиран в магически умения |
| 11 | +- `astrologer.cpp` - имплементация на методите за класа Astrologer |
| 12 | +- `confessor.hpp` - декларация на класа Confessor, специализиран в инкантации и вяра |
| 13 | +- `confessor.cpp` - имплементация на методите за класа Confessor |
| 14 | +- `spell.hpp` - модифицирана версия на класа Spell от Седмица 7 |
| 15 | +- `spell.cpp` - имплементация на методите за класа Spell |
| 16 | +- `spell_types.hpp` - декларации на наследените класове за различни видове магии |
| 17 | +- `spell_types.cpp` - имплементация на методите за различните видове магии |
| 18 | +- `main.cpp` - главна програма, демонстрираща концепциите за наследяване |
| 19 | + |
| 20 | +## Наследяване |
| 21 | + |
| 22 | +Проектът демонстрира следните концепции: |
| 23 | + |
| 24 | +1. **Наследяване**: |
| 25 | + - Базов клас `Character` предоставя общите характеристики и функционалности |
| 26 | + - Наследените класове `Astrologer` и `Confessor` добавят специфични характеристики и поведения |
| 27 | + - Базов клас `Spell` с производни класове `SorcerySpell` и `IncantationSpell` |
| 28 | + |
| 29 | +2. **Разширяване на базовата функционалност**: |
| 30 | + - Наследниците имат достъп до protected полета и методи на базовия клас |
| 31 | + - Наследниците добавят нови полета и методи, специфични за техния тип |
| 32 | + - Наследниците могат да презапишат (redefine) методи от базовия клас според нуждите си |
| 33 | + |
| 34 | +## Базов клас Character |
| 35 | + |
| 36 | +Класът `Character` надгражда концепцията за Player от по-ранните седмици и съдържа следните характеристики: |
| 37 | + |
| 38 | +### Член данни |
| 39 | +- `name` - име на героя |
| 40 | +- `hp`, `maxHp` - текущи и максимални точки живот |
| 41 | +- `mp`, `maxMp` - текущи и максимални точки мана |
| 42 | +- `stamina`, `maxStamina` - текуща и максимална издръжливост |
| 43 | +- `runes` - валута в играта |
| 44 | +- `level` - ниво на героя |
| 45 | +- Основни характеристики: |
| 46 | + - `strength` - сила |
| 47 | + - `intelligence` - интелигентност |
| 48 | + - `dexterity` - бързина |
| 49 | + - `faith` - вяра |
| 50 | + - `endurance` - издръжливост |
| 51 | +- Ресурси: |
| 52 | + - `flaskChargesHp` - заряди за възстановяване на живот |
| 53 | + - `flaskChargesMp` - заряди за възстановяване на мана |
| 54 | +- `isAlive` - статус на героя |
| 55 | +- `spellSlots` - слотове за магии (вече във базовия клас) |
| 56 | +- `equippedSpellIndex` - индекс на текущо екипираната магия |
| 57 | + |
| 58 | +### Методи |
| 59 | +- Конструктори |
| 60 | +- Деструктор |
| 61 | +- Гетъри и сетъри |
| 62 | +- Методи за модифициране на атрибутите |
| 63 | +- Игрови механики: |
| 64 | + - `useHpFlask`, `useMpFlask` - използване на заряди |
| 65 | + - `takeDamage` - получаване на щети |
| 66 | + - `calculateAttackPower`, `calculateDefensePower` - изчисляване на сила на атака и защита |
| 67 | + - `levelUp` - повишаване на ниво |
| 68 | +- Методи за статус: |
| 69 | + - `performSpecialAction` - изпълнява специална способност |
| 70 | + - `canLearnSpell` - проверява дали героят може да научи определена магия |
| 71 | + - `getClassName` - връща името на класа на героя |
| 72 | + |
| 73 | +## Клас Astrologer (наследява Character) |
| 74 | + |
| 75 | +### Допълнителни член данни |
| 76 | +- `staffPower` - сила на жезъла |
| 77 | +- `intelligenceScaling` - скалиране на интелигентност за магии |
| 78 | +- `cosmicAffinity` - афинитет към космически магии |
| 79 | + |
| 80 | +### Допълнителни методи |
| 81 | +- Специфични за астролог методи: |
| 82 | + - `castSorcerySpell` - кастване на магия от тип Sorcery |
| 83 | + - `empowerNextSpell` - усилване на следващата магия |
| 84 | + - `predictEnemyAction` - предвиждане на следващото действие на противника |
| 85 | +- Презаписани методи от базовия клас: |
| 86 | + - `performSpecialAction` - имплементира "Cosmic Vision" за астролога |
| 87 | + - `canLearnSpell` - проверява дали магията е от тип Sorcery |
| 88 | + - `getClassName` - връща "Astrologer" |
| 89 | + |
| 90 | +## Клас Confessor (наследява Character) |
| 91 | + |
| 92 | +### Допълнителни член данни |
| 93 | +- `holySymbolPower` - сила на свещения символ |
| 94 | +- `faithScaling` - скалиране на вярата за инкантации |
| 95 | +- `divineBlessing` - божествена благословия |
| 96 | + |
| 97 | +### Допълнителни методи |
| 98 | +- Специфични за изповедник методи: |
| 99 | + - `castIncantation` - кастване на магия от тип Incantation |
| 100 | + - `blessSelf` - благославяне на себе си за временни бонуси |
| 101 | + - `healAlly` - лекуване на съюзник |
| 102 | +- Презаписани методи от базовия клас: |
| 103 | + - `performSpecialAction` - имплементира "Divine Intervention" за изповедника |
| 104 | + - `canLearnSpell` - проверява дали магията е от тип Incantation |
| 105 | + - `getClassName` - връща "Confessor" |
| 106 | + |
| 107 | +## Йерархия на магиите |
| 108 | + |
| 109 | +Разширяваме системата от магии от Седмица 7 с йерархия от наследяване: |
| 110 | + |
| 111 | +### Базов клас Spell |
| 112 | +- Основни член данни и методи от Седмица 7 |
| 113 | +- Добавен е метод `getSpellType()` |
| 114 | + |
| 115 | +### Производен клас SorcerySpell |
| 116 | +- По-голяма цена в мана, но по-големи поражения |
| 117 | +- Скалират се с интелигентност |
| 118 | + |
| 119 | +### Производен клас IncantationSpell |
| 120 | +- По-малка цена в мана, но по-дълго време за презареждане |
| 121 | +- Скалират се с вяра |
| 122 | + |
| 123 | +## Демонстрация в main.cpp |
| 124 | + |
| 125 | +Програмата включва примери за: |
| 126 | +- Създаване на обекти от различни класове герои |
| 127 | +- Специфични методи за всеки клас герой |
| 128 | +- Използване на различни видове магии |
| 129 | +- Демонстрация на различното поведение на общи методи за различните класове |
| 130 | +- Симулация на битка с герои от различни класове |
| 131 | + |
| 132 | +## Примерни разширения |
| 133 | +- Добавяне на други класове герои (Warrior, Thief, и т.н.) |
| 134 | +- Добавяне на нови типове магии (Nature, Blood Magic, и т.н.) |
| 135 | +- Създаване на система за взаимодействие между различни класове герои |
| 136 | +- Реализиране на "dual class" система, която позволява на героите да комбинират умения от различни класове |
0 commit comments