-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEnumTask.txt
More file actions
91 lines (79 loc) · 6.61 KB
/
EnumTask.txt
File metadata and controls
91 lines (79 loc) · 6.61 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
80
81
82
83
84
85
86
87
88
89
90
91
Тема enum (перечислений) идеально подходит для описания состояний, типов,
направлений или свойств объектов. Это делает код понятнее и надежнее,
чем использование простых строк или чисел.
Задача: Система состояний врага (Enemy AI State Machine)
Контекст (Легенда заказа)
Тебе нужно запрограммировать логику поведения для простого моба — скелета-воина.
Игровой дизайнер описал три состояния, в которых может находиться скелет:
1. Патрулирование (Patrol): Скелет спокойно ходит туда-сюда и ждет.
2. Преследование (Chase): Скелет заметил игрока и бежит за ним.
3. Атака (Attack): Скелет догнал игрока и пытается его ударить.
Твоя задача — написать программу-симулятор,
которая будет управлять скелетом на основе его текущего состояния и действий игрока.
Что нужно сделать:
1. Создай enum для состояний.
Создай публичное перечисление EnemyState со значениями: Patrol, Chase, Attack.
2. Создай класс Enemy (Враг).
У этого класса должны быть:
- Поля:
- public string Name (имя врага, например "Скелет").
- private int _health (здоровье).
- private int _playerDistance (расстояние до игрока в метрах).
- private EnemyState _currentState (текущее состояние, используй твой enum).
- Конструктор:
- Принимает имя и начальное здоровье.
- Устанавливает начальное состояние в EnemyState.Patrol.
- Начальную дистанцию до игрока можно задать, например, 15 метров.
- Методы:
- public void SetPlayerDistance(int distance) — позволяет "игроку" подойти или отойти, меняя дистанцию.
- public void TakeDamage(int damage) — уменьшает здоровье врага.
- public void UpdateState() — ГЛАВНАЯ ЛОГИКА (Искуственный интеллект).
Этот метод должен имитировать "работу мозга" скелета на каждом "кадре".
Внутри него, используя switch (или if-else) по _currentState, реализуй поведение:
- Состояние Patrol:
- Выведи в консоль:
"[ИМЯ] патрулирует территорию... (Дистанция до игрока: X м)".
- Проверка на смену состояния:
- Если _playerDistance <= 5, то враг заметил игрока.
Переключи состояние на EnemyState.Chase и напиши:
"[ИМЯ] заметил игрока! Переходит в режим преследования!".
- Состояние Chase:
- Выведи в консоль: "[ИМЯ] преследует игрока! (Дистанция: X м)".
- Проверки на смену состояния:
- Если _playerDistance <= 1.5 (или любое другое число, дистанция атаки),
то враг догнал цель. Переключись в EnemyState.Attack.
- Если _playerDistance > 5, враг потерял игрока (тот убежал далеко).
Вернись в состояние Patrol.
- Состояние Attack:
- Выведи в консоль: "[ИМЯ] АТАКУЕТ игрока! (Дистанция: X м)".
- Проверка на смену состояния:
- Если _playerDistance > 1.5, игрок отбежал от атакующего врага.
Снова переключись в состояние Chase.
3. Создай класс Program с методом Main для демонстрации.
В главном методе:
1. Создай объект Enemy (скелета).
2. Запусти бесконечный цикл (while (true)), который будет симулировать игровые "тики".
3. Внутри цикла:
- Вызови метод UpdateState() у врага, чтобы он "подумал" и, возможно, сменил состояние.
- Предложи пользователю (тестеру) ввести новую дистанцию до игрока
(например, "Введите новую дистанцию до игрока (или '0' для выхода): ").
- Считай ввод с консоли и вызови enemy.SetPlayerDistance(введенное_число).
- Можно также добавить возможность ударить врага (уменьшить его здоровье) для разнообразия,
но это опционально.
- Добавь Thread.Sleep(1000); чтобы консоль не обновлялась слишком быстро.
Пример работы программы:
Создан враг: Скелет (Здоровье: 100). Начальное состояние: Patrol.
--- ТИК 1 ---
Скелет патрулирует территорию... (Дистанция до игрока: 15 м)
Введите новую дистанцию до игрока: 4
--- ТИК 2 ---
Скелет заметил игрока! Переходит в режим преследования!
Скелет преследует игрока! (Дистанция: 4 м)
Введите новую дистанцию до игрока: 1
--- ТИК 3 ---
Скелет АТАКУЕТ игрока! (Дистанция: 1 м)
Введите новую дистанцию до игрока: 10
--- ТИК 4 ---
Скелет преследует игрока! (Дистанция: 10 м)
Введите новую дистанцию до игрока:
... и так далее.