Код IT Загрузка примера кода…

Python main.py
from dataclasses import dataclass


@dataclass
class InputState:
    up: bool = False
    down: bool = False
    left: bool = False
    right: bool = False
    attack: bool = False
    attack_pressed: bool = False
    dash_pressed: bool = False
    interact_pressed: bool = False
    inventory_pressed: bool = False
    skill_pressed: str | None = None
    menu_up: bool = False
    menu_down: bool = False
    menu_confirm: bool = False
    menu_back: bool = False
    mouse_pos: tuple[int, int] = (0, 0)

    def clear_frame(self) -> None:
        self.attack_pressed = False
        self.dash_pressed = False
        self.interact_pressed = False
        self.inventory_pressed = False
        self.skill_pressed = None
        self.menu_confirm = False
        self.menu_back = False


class InputHandler:
    def __init__(self) -> None:
        self.state = InputState()

    def on_key_down(self, key: int) -> None:
        import pygame
        if key in (pygame.K_w, pygame.K_UP):
            self.state.up = True
        if key in (pygame.K_s, pygame.K_DOWN):
            self.state.down = True
        if key in (pygame.K_a, pygame.K_LEFT):
            self.state.left = True
        if key in (pygame.K_d, pygame.K_RIGHT):
            self.state.right = True
        if key == pygame.K_SPACE:
            self.state.dash_pressed = True
        if key == pygame.K_e:
            self.state.interact_pressed = True
        if key == pygame.K_i:
            self.state.inventory_pressed = True
        if key == pygame.K_RETURN:
            self.state.menu_confirm = True
        if key == pygame.K_ESCAPE:
            self.state.menu_back = True
        if key in (pygame.K_UP, pygame.K_w):
            self.state.menu_up = True
        if key in (pygame.K_DOWN, pygame.K_s):
            self.state.menu_down = True
        if key == pygame.K_1 or key == pygame.K_f:
            self.state.skill_pressed = "fireball"

    def on_key_up(self, key: int) -> None:
        import pygame
        if key in (pygame.K_w, pygame.K_UP):
            self.state.up = False
        if key in (pygame.K_s, pygame.K_DOWN):
            self.state.down = False
        if key in (pygame.K_a, pygame.K_LEFT):
            self.state.left = False
        if key in (pygame.K_d, pygame.K_RIGHT):
            self.state.right = False

    def on_mouse_down(self, button: int) -> None:
        import pygame
        if button == 1:
            self.state.attack = True
            self.state.attack_pressed = True

    def on_mouse_up(self, button: int) -> None:
        import pygame
        if button == 1:
            self.state.attack = False

    def on_mouse_motion(self, pos: tuple[int, int]) -> None:
        self.state.mouse_pos = pos

    def end_frame(self) -> None:
        self.state.clear_frame()
from dataclasses import dataclass


@dataclass
class InputState:
    up: bool = False
    down: bool = False
    left: bool = False
    right: bool = False
    attack: bool = False
    attack_pressed: bool = False
    dash_pressed: bool = False
    interact_pressed: bool = False
    inventory_pressed: bool = False
    skill_pressed: str | None = None
    menu_up: bool = False
    menu_down: bool = False
    menu_confirm: bool = False
    menu_back: bool = False
    mouse_pos: tuple[int, int] = (0, 0)

    def clear_frame(self) -> None:
        self.attack_pressed = False
        self.dash_pressed = False
        self.interact_pressed = False
        self.inventory_pressed = False
        self.skill_pressed = None
        self.menu_confirm = False
        self.menu_back = False


class InputHandler:
    def __init__(self) -> None:
        self.state = InputState()

    def on_key_down(self, key: int) -> None:
        import pygame
        if key in (pygame.K_w, pygame.K_UP):
            self.state.up = True
        if key in (pygame.K_s, pygame.K_DOWN):
            self.state.down = True
        if key in (pygame.K_a, pygame.K_LEFT):
            self.state.left = True
        if key in (pygame.K_d, pygame.K_RIGHT):
            self.state.right = True
        if key == pygame.K_SPACE:
            self.state.dash_pressed = True
        if key == pygame.K_e:
            self.state.interact_pressed = True
        if key == pygame.K_i:
            self.state.inventory_pressed = True
        if key == pygame.K_RETURN:
            self.state.menu_confirm = True
        if key == pygame.K_ESCAPE:
            self.state.menu_back = True
        if key in (pygame.K_UP, pygame.K_w):
            self.state.menu_up = True
        if key in (pygame.K_DOWN, pygame.K_s):
            self.state.menu_down = True
        if key == pygame.K_1 or key == pygame.K_f:
            self.state.skill_pressed = "fireball"

    def on_key_up(self, key: int) -> None:
        import pygame
        if key in (pygame.K_w, pygame.K_UP):
            self.state.up = False
        if key in (pygame.K_s, pygame.K_DOWN):
            self.state.down = False
        if key in (pygame.K_a, pygame.K_LEFT):
            self.state.left = False
        if key in (pygame.K_d, pygame.K_RIGHT):
            self.state.right = False

    def on_mouse_down(self, button: int) -> None:
        import pygame
        if button == 1:
            self.state.attack = True
            self.state.attack_pressed = True

    def on_mouse_up(self, button: int) -> None:
        import pygame
        if button == 1:
            self.state.attack = False

    def on_mouse_motion(self, pos: tuple[int, int]) -> None:
        self.state.mouse_pos = pos

    def end_frame(self) -> None:
        self.state.clear_frame()