-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPatternStrategyTask.txt
More file actions
64 lines (48 loc) · 3.69 KB
/
PatternStrategyTask.txt
File metadata and controls
64 lines (48 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Система расчета урона для RPG
Контекст
Ты получил заказ от геймдизайнера: нужно реализовать гибкую систему расчета урона в пошаговой RPG.
В игре есть разные классы персонажей, и у каждого своя формула расчета урона.
Требования геймдизайнера:
- Должна быть возможность легко добавлять новые формулы урона без изменения существующего кода бойца.
- В будущем планируется добавить: критические удары, стихийный урон, броню, баффы/дебаффы.
- Пока нужно реализовать 3 базовые стратегии урона.
Техническое задание
Тебе нужно реализовать:
1. Интерфейс IDamageStrategy с одним методом CalculateDamage(baseDamage).
2. Три конкретные стратегии:
- NormalDamageStrategy - возвращает baseDamage без изменений.
- CriticalDamageStrategy - возвращает baseDamage * 2 (вдвое больше урона).
- GlancingDamageStrategy - возвращает baseDamage / 2 (половина урона, "скользящий удар").
- (Бонус) FireDamageStrategy - возвращает baseDamage + 20%.
3. Класс Fighter (Боец), который имеет:
- Name (имя)
- BaseDamage (базовый урон)
- DamageStrategy (текущая стратегия расчета урона)
- Метод Attack() - выводит в консоль сообщение типа: "Рыцарь наносит 25 урона!"
(где урон вычисляется через стратегию).
- Метод SetStrategy(IDamageStrategy newStrategy) - позволяет сменить стратегию во время боя.
4. В методе Main продемонстрируй работу:
- Создай бойца с NormalDamageStrategy.
- Покажи 2-3 атаки.
- Смени стратегию на CriticalDamageStrategy.
- Покажи еще атаки.
- Смени на GlancingDamageStrategy.
- Покажи атаки.
Пример ожидаемого вывода:
=== БОЙ НАЧИНАЕТСЯ ===
Рыцарь Григорий (Обычный удар)
- Атака! Нанесено 35 урона.
- Атака! Нанесено 35 урона.
Рыцарь Григорий активирует КРИТИЧЕСКИЙ УДАР!
- Атака! Нанесено 70 урона. (КРИТ!)
- Атака! Нанесено 70 урона. (КРИТ!)
Рыцарь Григорий ослаблен (Скользящий удар)
- Атака! Нанесено 17 урона.
- Атака! Нанесено 17 урона.
Почему это именно Strategy?
Ты отделяешь алгоритм расчета урона от бойца, который этот урон наносит.
Боец не знает, как именно считается урон - он просто вызывает DamageStrategy.CalculateDamage().
Это позволяет:
- Менять стратегию во время боя (крит -> обычный -> скользящий).
- Легко добавлять новые стратегии (например, FireDamageStrategy, PoisonDamageStrategy), не трогая класс Fighter.
- Тестировать каждую стратегию отдельно.