-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCommandTask.txt
More file actions
79 lines (57 loc) · 4.16 KB
/
CommandTask.txt
File metadata and controls
79 lines (57 loc) · 4.16 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Система управления с отменой действий (Undo System)
Контекст
Ты разрабатываешь консольную RPG. Геймдизайнер хочет добавить возможность отмены последнего действия игрока
(на случай, если игрок случайно выпил не то зелье или продал не тот предмет).
Нужно реализовать систему, которая запоминает действия игрока и позволяет их отменить.
Техническое задание
Создай систему, где:
1. Есть интерфейс ICommand с двумя методами:
- void Execute() - выполняет действие
- void Undo() - отменяет действие
2. Есть конкретные команды:
- MoveCommand - перемещает игрока по карте (координаты X, Y)
- AttackCommand - наносит урон врагу (уменьшает его здоровье)
3. Есть класс InputHandler (или CommandManager), который:
- Хранит историю выполненных команд в Stack<ICommand>
- Имеет метод ExecuteCommand(ICommand command) - выполняет команду и добавляет её в историю
- Имеет метод UndoLastCommand() - отменяет последнюю команду (удаляет из стека)
4. Есть простые классы:
- Player - с полями X, Y и методом Move(int dx, int dy)
- Enemy - с полем Health и методом TakeDamage(int damage)
5. В методе Main продемонстрируй:
- Выполнение нескольких команд
- Отмену последней команды
- Отмену ещё одной команды
Требования к реализации
- Классы должны быть независимы:
Команды не должны напрямую знать о существовании InputHandler.
Они получают нужные объекты через конструктор.
Пример ожидаемого вывода в консоли
=== ИГРОК ===
Позиция: X=0, Y=0
> Игрок перемещается на север
Позиция: X=0, Y=1
> Игрок атакует врага
Враг получил 15 урона. Здоровье врага: 85
> Игрок перемещается на восток
Позиция: X=1, Y=1
> ОТМЕНА последнего действия
Отменено: перемещение на восток
Позиция: X=0, Y=1
> ОТМЕНА последнего действия
Отменено: атака
Враг восстановил 15 здоровья. Здоровье врага: 100
> ОТМЕНА последнего действия
Отменено: перемещение на север
Позиция: X=0, Y=0
> НЕЧЕГО ОТМЕНЯТЬ
Бонус (если захочешь усложнить)
Добавь команду HealCommand, которая восстанавливает здоровье игроку
(создай класс Player с полем Health), и реализуй для неё отмену.
Покажи, что система работает с любыми командами, не требуя изменений в InputHandler.
Что этот паттерн дает в реальной разработке игр:
1. Undo/Redo - в редакторах уровней, в стратегиях
2. Запись макросов - запись последовательности действий игрока
3. Сетевая синхронизация - команды удобно передавать по сети
4. AI decision-making - ИИ может выбирать и выполнять команды
5. Отложенное выполнение - команды можно ставить в очередь и выполнять позже