-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStackTask.txt
More file actions
82 lines (68 loc) · 4.87 KB
/
StackTask.txt
File metadata and controls
82 lines (68 loc) · 4.87 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
Задача: "Memory Scrolls History"
Суть программы:
1. Игрок может выполнить одно из трех действий:
- Найти свиток (Find Scroll).
- Использовать свиток (Use Scroll).
- Выбросить свиток (Drop Scroll).
2. Каждое действие записывается в историю (Stack<string>).
3. У игрока есть возможность отменить последнее действие (Undo).
4. В конце программы выводится итоговый список действий, которые остались в истории.
Требования к реализации:
1. Главное меню (Цикл while):
Программа работает в бесконечном цикле, пока игрок не введет команду для выхода.
- Выводи на экран список доступных команд: [F]ind, [U]se, [D]rop, [Z] - Undo, [Q] - Exit.
- Используй Console.ReadKey(true) для считывания клавиши, чтобы игрок не нажимал Enter.
2. Обработка действий (switch, if, Random):
- При нажатии F (Find): Добавить в стек Stack запись Found a scroll.
- При нажатии U (Use):
- С помощью Random сгенерируй число от 0 до 1.
- Если выпало 0 — действие неудачно (Failed to use scroll),
если 1 — удачно (Successfully used scroll!).
- Добавь соответствующую запись в стек.
- При нажатии D (Drop): Добавить в стек запись Dropped the scroll.
- Важно: В случае U и D проверяй, есть ли у игрока свитки для использования.
Для этого заведи переменную int scrollCount, которая увеличивается при Find и уменьшается при Use/Drop.
Если свитков нет, не давай использовать/выбрасывать и не добавляй запись в историю.
3. Механика UNDO (Stack и Pop):
- При нажатии Z (Undo): извлеки последнее действие из стека с помощью Pop().
- Выведи на экран сообщение: Отменено действие: {действие}.
- Важно: Если в истории (Stack) нет действий, выведи сообщение История пуста, нечего отменять.
Используй свойство Count для проверки.
- При отмене действия Found a scroll нужно также уменьшить переменную scrollCount.
При отмене Use или Drop — увеличить (так как игрок как бы возвращает свиток назад).
4. Завершение и вывод:
- При нажатии Q (Exit):
- Выйди из цикла.
- Выведи на экран все оставшиеся действия в стеке.
Так как прямой итерации по Stack нет, тебе нужно преобразовать его в массив или список:
actions.ToArray() или actions.ToList(). Затем выведи их через цикл foreach.
5. Дополнительно:
Создай простой класс GameHistory, который будет содержать:
- Поле Stack<string> _actions (приватное).
- Поле int _scrollCount.
- Методы AddAction(string action), Undo(), PrintHistory(), CanUseScroll().
- Вся логика работы со стеком и счетчиком свитков должна быть внутри этих методов.
В методе Main ты будешь только вызывать методы этого класса.
Пример работы программы:
Текущие свитки: 0
Команды: [F]ind, [U]se, [D]rop, [Z] - Undo, [Q] - Exit
> F
Действие: Found a scroll
Текущие свитки: 1
Команды: [F]ind, [U]se, [D]rop, [Z] - Undo, [Q] - Exit
> F
Действие: Found a scroll
Текущие свитки: 2
Команды: [F]ind, [U]se, [D]rop, [Z] - Undo, [Q] - Exit
> U
(Рандом выпал 1) Действие: Successfully used scroll!
Текущие свитки: 1
Команды: [F]ind, [U]se, [D]rop, [Z] - Undo, [Q] - Exit
> Z
Отменено действие: Successfully used scroll!
Текущие свитки: 2
Команды: [F]ind, [U]se, [D]rop, [Z] - Undo, [Q] - Exit
> Q
История действий:
Found a scroll
Found a scroll