From ca8aeafed3105ad7f246b889f1d4ed337a5f817f Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 1 Jan 2024 23:16:24 +0200 Subject: [PATCH] feat(game): add `Label` --- pyproject.toml | 3 +-- requirements.txt | 1 + src/py2048/screens/elements/label.py | 34 ++++++++++++++++++++++++++++ src/py2048/screens/header.py | 13 +++++++++-- 4 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 src/py2048/screens/elements/label.py diff --git a/pyproject.toml b/pyproject.toml index 9648960..69e430c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,8 +6,7 @@ authors = [{ name = "Kristofers Solo", email = "dev@kristofers.xyz" }] readme = "README.md" requires-python = ">=3.11" license = { text = "GPLv3" } -dependencies = ["pygame-ce==2.3.2", "loguru==0.7.2"] - +dependencies = ["pygame-ce==2.3.2", "loguru==0.7.2", "attrs==23.1.0"] [tool.mypy] check_untyped_defs = true diff --git a/requirements.txt b/requirements.txt index 0959348..9c0c746 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ pygame-ce>=2.3.2 loguru>=0.7.2 +attrs>=23.1.0 . diff --git a/src/py2048/screens/elements/label.py b/src/py2048/screens/elements/label.py new file mode 100644 index 0000000..68228b4 --- /dev/null +++ b/src/py2048/screens/elements/label.py @@ -0,0 +1,34 @@ +import pygame +from attrs import define, field +from py2048.color import ColorScheme +from py2048.config import Config + + +@define +class Label: + text: str + position: tuple[int, int] + bg_color: ColorScheme + font_family: str + font_color: ColorScheme + font_size: int + font: pygame.font.Font = field(init=False) + rendered_text: pygame.Surface = field(init=False) + rect: pygame.Rect = field(init=False) + + def __attrs_post_init__(self): + self.font = pygame.font.SysFont(self.font_family, self.font_size) + self._draw_text() + + def _draw_text(self) -> None: + self.rendered_text = self.font.render( + self.text, True, self.font_color, self.bg_color + ) + self.rect = self.rendered_text.get_rect(topleft=self.position) + + def update(self, new_text: str) -> None: + self.text = new_text + self._draw_text() + + def draw(self, screen): + screen.blit(self.rendered_text, self.position) diff --git a/src/py2048/screens/header.py b/src/py2048/screens/header.py index b0b98c9..c918d7f 100644 --- a/src/py2048/screens/header.py +++ b/src/py2048/screens/header.py @@ -1,13 +1,22 @@ import pygame +from py2048.config import Config -from ..config import Config +from .elements.label import Label class Header: def __init__(self) -> None: self.rect = pygame.Rect(0, 0, Config.HEADER_WIDTH, Config.HEADER_HEIGHT) self.score = 0 # TODO: Implement score + self.highscore = 0 # TODO: Implement highscore def draw(self, screen: pygame.Surface) -> None: """Draw the header.""" - pygame.draw.rect(screen, "#ff00ee", self.rect, 2) + score = Label( + text=f"SCORE\n{self.score}", + position=(10, 10), + bg_color=Config.COLORSCHEME.BOARD_BG, + font_family=Config.FONT_FAMILY, + font_color=Config.COLORSCHEME.DARK_TEXT, + font_size=Config.FONT_SIZE, + ).draw(screen)