From 9d6b3a412b078bea109fbbbb6fa6e5df5d96f3b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0?= Date: Sat, 26 Aug 2023 23:30:57 +0300 Subject: [PATCH] asd --- .vscode/settings.json | 4 + graphic_arts/start_game_banner.py | 46 +++++++++++ main.py | 133 ++++++++++++++++++++++-------- 3 files changed, 149 insertions(+), 34 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 graphic_arts/start_game_banner.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..33fe63f7c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "python.linting.flake8Enabled": true, + "python.linting.enabled": true +} \ No newline at end of file diff --git a/graphic_arts/start_game_banner.py b/graphic_arts/start_game_banner.py new file mode 100644 index 000000000..3cbdef0fd --- /dev/null +++ b/graphic_arts/start_game_banner.py @@ -0,0 +1,46 @@ +from asciimatics.renderers import FigletText, Fire +from asciimatics.renderers import SpeechBubble +from asciimatics.scene import Scene +from asciimatics.screen import Screen +from asciimatics.effects import Print +from asciimatics.exceptions import ResizeScreenError +from pyfiglet import Figlet +import sys + + +def animation(screen): + scenes = [] + + text = Figlet(font="banner", width=200).renderText("START GAME") + print(text) + effects = [ + Print(screen, + Fire(screen.height, 80, text, 0.4, 40, screen.colours), + 0, + speed=1, + transparent=False, + ), + Print(screen, + FigletText("Real Practic Game", "banner"), + screen.height - 15, + colour=Screen.COLOUR_WHITE, + bg=Screen.COLOUR_WHITE, + speed=1), + Print(screen, + SpeechBubble("Please press X - start game"), + screen.height-5, + speed=1, transparent=False) + + ] + scenes.append(Scene(effects, -1)) + + screen.play(scenes, stop_on_resize=True) + + +def run_screensaver(): + Screen.wrapper(animation) + + +if __name__ == "__main__": + run_screensaver() + sys.exit(0) diff --git a/main.py b/main.py index 1f468d66e..01499d92a 100644 --- a/main.py +++ b/main.py @@ -1,42 +1,96 @@ from random import randint +from graphic_arts.start_game_banner import run_screensaver -def attack(char_name, char_class): +def attack(char_name: str, char_class: str) -> str: + """Выполняет атаку игрока в зависимости от выбранного класса. + + Args: + char_name: Имя персонажа. + char_class: Класс персонажа. + + Returns: + Строка с описанием атаки. + + """ if char_class == 'warrior': - return (f'{char_name} нанёс урон противнику равный {5 + randint(3, 5)}') + return f'{char_name} нанес удар с \ + помощью меча и нанес {10 + randint(5, 10)} урона' if char_class == 'mage': - return (f'{char_name} нанёс урон противнику равный {5 + randint(5, 10)}') + return f'{char_name} использовал магическую \ + атаку и нанес {10 + randint(-2, 2)} урона' if char_class == 'healer': - return (f'{char_name} нанёс урон противнику равный {5 + randint(-3, -1)}') -def defence(char_name, char_class): + return f'{char_name} нанес удар своим \ + жезлом и нанес {10 + randint(2, 5)} урона' + + +def defence(char_name: str, char_class: str) -> str: + """Выполняет блокировку атаки игрока в зависимости от выбранного класса. + + Args: + char_name: Имя персонажа. + char_class: Класс персонажа. + + Returns: + Строка с описанием блокировки атаки. + + """ if char_class == 'warrior': - return (f'{char_name} блокировал {10 + randint(5, 10)} урона') + return f'{char_name} блокировал {10 + randint(5, 10)} урона' if char_class == 'mage': - return (f'{char_name} блокировал {10 + randint(-2, 2)} урона') + return f'{char_name} блокировал {10 + randint(-2, 2)} урона' if char_class == 'healer': - return (f'{char_name} блокировал {10 + randint(2, 5)} урона') -def special(char_name, char_class): - if char_class == 'warrior': - return (f'{char_name} применил специальное умение «Выносливость {80 + 25}»') + return f'{char_name} блокировал {10 + randint(2, 5)} урона' + + +def special(char_name: str, char_class: str) -> str: + """Выполняет специальное умение игрока в зависимости от выбранного класса. + + Args: + char_name: Имя персонажа. + char_class: Класс персонажа. + + Returns: + Строка с описанием специального умения. + + """ + if char_class == 'warrior': + return f'{char_name} применил \ + специальное умение «Выносливость {80 + 25}»' if char_class == 'mage': - return (f'{char_name} применил специальное умение «Атака {5 + 40}»') + return f'{char_name} применил \ + специальное умение «Атака {5 + 40}»' if char_class == 'healer': - return (f'{char_name} применил специальное умение «Защита {10 + 30}»') + return f'{char_name} применил \ + специальное умение «Защита {10 + 30}»' + +def start_training(char_name: str, char_class: str) -> str: + """Запускает тренировку игрока в зависимости от выбранного класса. + Args: + char_name: Имя персонажа. + char_class: Класс персонажа. + Returns: + Сообщение о завершении тренировки. -def start_training(char_name, char_class): + """ if char_class == 'warrior': - print(f'{char_name}, ты Воитель — отличный боец ближнего боя.') + print(f'{char_name}, ты Воитель — \ + отличный боец ближнего боя.') if char_class == 'mage': - print(f'{char_name}, ты Маг — превосходный укротитель стихий.') + print(f'{char_name}, ты Маг — \ + превосходный укротитель стихий.') if char_class == 'healer': - print(f'{char_name}, ты Лекарь — чародей, способный исцелять раны.') + print(f'{char_name}, ты Лекарь — чародей, \ + способный исцелять раны.') print('Потренируйся управлять своими навыками.') - print('Введи одну из команд: attack — чтобы атаковать противника, defence — чтобы блокировать атаку противника или special — чтобы использовать свою суперсилу.') + print('Введи одну из команд: attack — чтобы атаковать противника, \ + defence — чтобы блокировать атаку \ + противника или special — чтобы использовать свою суперсилу.') print('Если не хочешь тренироваться, введи команду skip.') - cmd = None + cmd: str = None while cmd != 'skip': cmd = input('Введи команду: ') if cmd == 'attack': @@ -47,31 +101,42 @@ def start_training(char_name, char_class): print(special(char_name, char_class)) return 'Тренировка окончена.' -def choice_char_class(): - approve_choice = None - char_class = None + +def choice_char_class() -> str: + """Позволяет игроку выбрать класс персонажа. + + Returns: + Выбранный класс персонажа. + + """ + approve_choice: str = '' + char_class: str = '' while approve_choice != 'y': - char_class = input('Введи название персонажа, за которого хочешь играть: Воитель — warrior, Маг — mage, Лекарь — healer: ') + char_class = input('Введи название персонажа, за которого хочешь \ + играть: Воитель — warrior, Маг — mage, Лекарь — healer: ') if char_class == 'warrior': - print('Воитель — дерзкий воин ближнего боя. Сильный, выносливый и отважный.') + print('Воитель — дерзкий воин ближнего боя. \ + Сильный, выносливый и отважный.') if char_class == 'mage': - print('Маг — находчивый воин дальнего боя. Обладает высоким интеллектом.') + print('Маг — находчивый воин дальнего боя. \ + Обладает высоким интеллектом.') if char_class == 'healer': - print('Лекарь — могущественный заклинатель. Черпает силы из природы, веры и духов.') - approve_choice = input('Нажми (Y), чтобы подтвердить выбор, или любую другую кнопку, чтобы выбрать другого персонажа ').lower() + print('Лекарь — могущественный заклинатель. \ + Черпает силы из природы, веры и духов.') + approve_choice = input('Нажми (Y), чтобы подтвердить выбор, \ + или любую другую кнопку,\ + чтобы выбрать другого персонажа ').lower() return char_class -def main(): +if __name__ == '__main__': + run_screensaver() print('Приветствую тебя, искатель приключений!') print('Прежде чем начать игру...') - char_name = input('...назови себя: ') + char_name: str = input('...назови себя: ') print(f'Здравствуй, {char_name}! ' 'Сейчас твоя выносливость — 80, атака — 5 и защита — 10.') print('Ты можешь выбрать один из трёх путей силы:') print('Воитель, Маг, Лекарь') - char_class = choice_char_class() - print(start_training(char_name, char_class)) - - -main() \ No newline at end of file + char_class: str = choice_char_class() + print(start_training(char_name, char_class)) \ No newline at end of file