Skip to content

Commit 20d21f2

Browse files
committed
Add week 10
1 parent c45cdfa commit 20d21f2

File tree

2 files changed

+138
-1
lines changed

2 files changed

+138
-1
lines changed

Practicum/Week 10/README.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
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" система, която позволява на героите да комбинират умения от различни класове

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
### [:six: Constructors, exceptions](https://github.com/xKrashx/Object_Oriented_Programming/tree/main/Practicum/Week%2006)
2121
### [:seven: Move semantics, const data types](https://github.com/xKrashx/Object_Oriented_Programming/tree/main/Practicum/Week%2007)
2222
### [:eight: Static, const](https://github.com/xKrashx/Object_Oriented_Programming/tree/main/Practicum/Week%2008)
23-
### [:nine: Operator overloading part 1](https://github.com/xKrashx/Object_Oriented_Programming/tree/main/Practicum/Week%2009)
23+
### [:nine: Operator overloading](https://github.com/xKrashx/Object_Oriented_Programming/tree/main/Practicum/Week%2009)
24+
### [:one::zero: Inheritance](https://github.com/xKrashx/Object_Oriented_Programming/tree/main/Practicum/Week%2010)
2425

2526
## :pushpin: Additional materials and resources:
2627
### [:bug: How to debug multiple C++ source files in VSCode](https://github.com/xKrashx/Object_Oriented_Programming/tree/main/Misc/Tutorials)

0 commit comments

Comments
 (0)