feat(game): create main menu

This commit is contained in:
Kristofers Solo 2024-01-02 15:40:14 +02:00
parent b0240d1b10
commit 61976e40aa
4 changed files with 63 additions and 6 deletions

View File

@ -7,6 +7,7 @@ from .board import Board
from .config import Config
from .logger import setup_logger
from .screens.header import Header
from .screens.menu import Menu
from .utils import Direction
@ -20,6 +21,7 @@ class Game:
pygame.display.set_caption("2048")
self.board = Board()
self.header = Header()
self.menu = Menu()
self.score = 0
def run(self) -> None:
@ -31,13 +33,14 @@ class Game:
def _update(self) -> None:
"""Update the game."""
self.board.update()
# self.board.update()
def _render(self) -> None:
"""Render the game."""
self.screen.fill(Config.COLORSCHEME.BG)
self.board.draw(self.screen)
self.header.draw(self.screen, self.score)
# self.board.draw(self.screen)
# self.header.draw(self.screen, self.score)
self.menu.draw(self.screen)
pygame.display.flip()
def _hande_events(self) -> None:
@ -56,6 +59,7 @@ class Game:
self.move_down()
elif event.key == pygame.K_q:
self.exit()
self.menu._handle_events(event)
def move_up(self) -> None:
self.score += self.board.move(Direction.UP)

View File

@ -12,7 +12,7 @@ class Label:
font_family: str
font_color: ColorScheme
font_size: int
font: pygame.font.Font = field(init=False)
font: pygame.Font = field(init=False)
rendered_text: pygame.Surface = field(init=False)
rect: pygame.Rect = field(init=False)
@ -30,5 +30,5 @@ class Label:
self.text = new_text
self._draw_text()
def draw(self, screen):
screen.blit(self.rendered_text, self.position)
def draw(self, surface: pygame.Surface) -> None:
surface.blit(self.rendered_text, self.position)

View File

@ -0,0 +1,53 @@
import pygame
from loguru import logger
from py2048.config import Config
from .elements.button import Button
class Menu:
def __init__(self):
self.buttons = [
Button(
"Play",
Config.FONT_FAMILY,
Config.FONT_SIZE,
Config.COLORSCHEME.LIGHT_TEXT,
(Config.SCREEN_WIDTH / 2 - 50, Config.SCREEN_HEIGHT / 2 - 100),
100,
50,
self.play,
Config.COLORSCHEME.BOARD_BG,
Config.COLORSCHEME.BLOCK_0,
),
Button(
"Exit",
Config.FONT_FAMILY,
Config.FONT_SIZE,
Config.COLORSCHEME.LIGHT_TEXT,
(Config.SCREEN_WIDTH / 2 - 50, Config.SCREEN_HEIGHT / 2),
100,
50,
self.exit,
Config.COLORSCHEME.BOARD_BG,
Config.COLORSCHEME.BLOCK_0,
),
]
def _handle_events(self, event: pygame.event.Event) -> None:
if event.type == pygame.MOUSEMOTION:
for button in self.buttons:
button.check_hover(event.pos)
elif event.type == pygame.MOUSEBUTTONDOWN:
for button in self.buttons:
button.check_click(event.pos)
def draw(self, surface: pygame.Surface) -> None:
for button in self.buttons:
button.draw(surface)
def play(self) -> None:
logger.debug("Play")
def exit(self) -> None:
logger.debug("Exit")

View File