-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExceptionsTask.txt
More file actions
89 lines (70 loc) · 4.71 KB
/
ExceptionsTask.txt
File metadata and controls
89 lines (70 loc) · 4.71 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
Задание: "Система крафта с защитой от ошибок игрока"
Контекст:
Ты делаешь игру, где игрок может крафтить предметы из ресурсов.
Но игроки — существа хитрые: пытаются скрафтить то, чего нет,
использовать сломанные рецепты, забирать ресурсы, которых не хватает.
Твоя задача — сделать систему, которая не упадет, что бы игрок ни ввел.
Что нужно сделать:
1. Класс Item (предмет)
- int Id, string Name, ItemRarity Rarity (enum: Common, Rare, Epic, Legendary)
- private static int _nextId = 0;
- Конструктор
- Проверка имени предмета string.IsNullOrWhiteSpace(name)
которая выбрасывает исключение "Имя предмета не может быть пустым"
2. Класс Recipe (рецепт крафта)
- Item Result - что получаем
Dictionary<Item, int> Ingredients - что нужно и в каком количестве
- Конструктор
Проверка 1: результат не null
Проверка 2: ингредиенты не null и не пустые
Проверка 3: количество ингредиентов > 0
Если что-то не так - бросать исключения
3. Класс Inventory (инвентарь игрока)
- Хранит List<Item> (все предметы, которые есть).
- Метод AddItem(Item item) — добавляет предмет.
- Метод RemoveItem(Item item, int count) — удаляет предмет (или уменьшает количество).
- Метод HasItems(Dictionary<Item, int> requiredItems) — проверяет, хватает ли ресурсов.
4. Класс CraftingSystem — здесь вся обработка ошибок
- Метод Craft(Recipe recipe)
- Должен обрабатывать:
- ArgumentNullException — если рецепт null.
- KeyNotFoundException — если в ингредиентах есть предмет, которого нет в словаре (логическая ошибка).
- InvalidOperationException — если не хватает ресурсов.
- ArgumentException — если количество ингредиента <= 0.
- Любое другое исключение — ловить и писать в лог.
- Если крафт успешен:
- Забрать ресурсы.
- Добавить результат.
- Вызвать событие OnItemCrafted.
5. Событие OnItemCrafted
- Событие срабатывает, когда предмет успешно скрафчен.
- В обработчике выводить сообщение: "Вы скрафтили {item.Name}!"
6. Класс Game (или Main)
- Создай несколько предметов и рецептов.
- Создай инвентарь и добавь туда ресурсы.
- Попроси игрока ввести название предмета, который он хочет скрафтить.
- Найди рецепт по названию (если нет — сообщи).
- Попробуй скрафтить.
- Обработай все возможные ошибки ввода (пустая строка, неверное имя, неправильный формат).
Бонус-задание:
Добавь метод BulkCraft(string recipeName, int times),
который пытается скрафтить предмет несколько раз подряд.
Если на каком-то шаге ресурсы заканчиваются — крафт должен остановиться,
а игроку показать, сколько успели скрафтить.
Пример работы программы:
Ваш инвентарь:
- Дерево: 5 шт
- Камень: 3 шт
- Железо: 1 шт
Доступные рецепты:
1. Топор (2 дерева + 1 камень)
2. Меч (2 железа + 1 камень)
Что крафтим? Меч
Ошибка: не хватает железа (нужно 2, есть 1)
Что крафтим? Топор
Вы скрафтили Топор! (событие)
Ваш инвентарь:
- Дерево: 3 шт
- Камень: 2 шт
- Железо: 1 шт
- Топор: 1 шт