/
haseew
/
Lab_6
Обзор
Документация
Войти
/
haseew
/
Lab_6
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.cpp
157 строк
6 KB
Egorchik
Lab_6
28 апр 2026, 17:44
28 апр 2026, 17:44
f0a1a80
Код
Авторство
О чём код?
/** * кто выполнил: Буров Егор * что делает программа: работа с исключениями (try-catch), кастомными классами ошибок и механизмы наследования классов * входные данные: пароль вводится с клавиатуры * выходные данные: логи выполнения операций и обработки ошибок */ #include <iostream> #include "Password.h" #include "Game.h" using std::cout; using std::endl; int main() { // тестирование задания 1: проверка пароля // ========================================== cout << "=== ZADANIE 1: Proverka bezopasnogo parolja ===" << endl; // цикл работает пока пользователь не введет полностью валидный пароль while (true) { try { std::string valid_pwd = get_password(); cout << "uspeh! parol prinyat i sohranen!" << endl; break; // выходим из бесконечного цикла при успешном вводе } catch (const LengthError& e) { cout << "[perehvat] " << e.what() << endl; cout << "poprobuyte eshche raz.\n" << endl; } catch (const RegisterError& e) { cout << "[perehvat] " << e.what() << endl; cout << "poprobuyte eshche raz.\n" << endl; } catch (const DigitError& e) { cout << "[perehvat] " << e.what() << endl; cout << "poprobuyte eshche raz.\n" << endl; } catch (const ForbiddenLetterError& e) { cout << "[perehvat] " << e.what() << endl; cout << "poprobuyte eshche raz.\n" << endl; } catch (const PasswordError& e) { cout << "[perehvat] obshchaya oshibka parolja: " << e.what() << endl; cout << "poprobuyte eshche raz.\n" << endl; } } // тестирование задания 2: игровая логика и бои // ========================================== cout << "\n=== ZADANIE 2: Igrovaya logika i bitva ===" << endl; try { // создание доступных видов оружия Weapon sword("Mech", 25, 2.0); Weapon bow("Luk", 15, 10.0); // создание главного героя игры cout << "\n[sozdanie geroya]:" << endl; MainHero hero(0.0, 0.0, "Arthur", 150); // проверка состояния героя без оружия hero.hit(hero); hero.next_weapon(); // подбор оружия главным героем и наполнение инвентаря cout << "\n[sbor trofeev]:" << endl; hero.add_weapon(sword); hero.next_weapon(); // проверка сообщения об одном оружии hero.add_weapon(bow); // создание противников на карте с разными координатами cout << "\n[poyavlenie vragov]:" << endl; BaseEnemy goblin(1.5, 0.0, sword, 40); // близко к герою BaseEnemy orc(8.0, 0.0, bow, 80); // далеко от героя cout << goblin << endl; cout << orc << endl; // симуляция пошагового сражения cout << "\n--- NACHALO BOYA ---" << endl; // атака ближнего врага мечом cout << "\ngeroy atakuet goblina mechom:" << endl; hero.hit(goblin); // переключение оружия на следующее по кругу hero.next_weapon(); // атака дальнего врага из лука cout << "\ngeroy atakuet orka iz luka:" << endl; hero.hit(orc); // попытка атаковать далекого орка мечом hero.next_weapon(); cout << "\ngeroy pytasya udarit orka mechom s dalekogo rasstoyaniya:" << endl; hero.hit(orc); // должен произойти автоматический промах по расстоянию // движение героя ближе к врагу cout << "\ngeroy sokrashchaet distanciyu:" << endl; hero.move(6.0, 0.0); // новая позиция (6,0), до орка расстояние теперь 2.0 cout << "\npovtornaya ataka orka mechom:" << endl; hero.hit(orc); // теперь атака проходит успешно // враг наносит ответный урон герою cout << "\nork atakuet geroya v otvet:" << endl; orc.hit(hero); // восстановление здоровья героя cout << "\ngeroy ispolzuet lechenie:" << endl; hero.heal(40); // возвращение к гоблину и его уничтожение cout << "\ngeroy dobivaet goblina:" << endl; hero.move(-5.0, 0.0); hero.hit(goblin); // изолированное тестирование обработки исключений cout << "\n--- TESTIROVANIE ISKLYUCHENIJ ---" << endl; try { cout << "popytka sozdat oruzhie s otricatelnym uronom:" << endl; Weapon cursed_weapon("Proklyatyj klinok", -10, 5.0); } catch (const InvalidStatsException& e) { cout << "[perehvat] " << e.what() << endl; } try { cout << "popytka dobit uzhe mertvogo goblina:" << endl; hero.hit(goblin); } catch (const GameException& e) { cout << "[perehvat] " << e.what() << endl; } // доведение героя до критического состояния для проверки блокировки действий cout << "\nork nanosit silnye udary po geroyu do smerti:" << endl; orc.hit(hero); orc.hit(hero); orc.hit(hero); orc.hit(hero); orc.hit(hero); // здоровье опускается до 0 try { cout << "\npopytka mertvogo geroya sdelat shag na karte:" << endl; hero.move(1.0, 1.0); } catch (const ActionByDeadException& e) { cout << "[perehvat] " << e.what() << endl; } } catch (const GameException& e) { cout << "[kriticheskaya oshibka igry]: " << e.what() << endl; } cout << "\n=== PROGRAMMA USPESHNO ZAVERSHENA ===" << endl; return 0; }