mirror of
https://github.com/kristoferssolo/2048.git
synced 2025-10-21 15:20:35 +00:00
76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
import sys
|
|
|
|
import pygame
|
|
from loguru import logger
|
|
|
|
from .board import Board
|
|
from .color import Color
|
|
from .config import Config
|
|
from .logger import setup_logger
|
|
from .screens.header import Header
|
|
from .utils import Direction
|
|
|
|
|
|
class Game:
|
|
def __init__(self) -> None:
|
|
setup_logger()
|
|
logger.info("Initializing game")
|
|
|
|
pygame.init()
|
|
self.screen: pygame.Surface = pygame.display.set_mode(Config.SCREEN_SIZE)
|
|
pygame.display.set_caption("2048")
|
|
self.board = Board()
|
|
self.header = Header()
|
|
|
|
def run(self) -> None:
|
|
"""Run the game loop."""
|
|
while True:
|
|
self._hande_events()
|
|
self._update()
|
|
self._render()
|
|
|
|
def _update(self) -> None:
|
|
"""Update the game."""
|
|
self.board.update()
|
|
|
|
def _render(self) -> None:
|
|
"""Render the game."""
|
|
self.screen.fill(Color.BG)
|
|
self.board.draw(self.screen)
|
|
self.header.draw(self.screen)
|
|
pygame.display.flip()
|
|
|
|
def _hande_events(self) -> None:
|
|
"""Handle pygame events."""
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
self.exit()
|
|
elif event.type == pygame.KEYDOWN:
|
|
if event.key in (pygame.K_LEFT, pygame.K_a, pygame.K_h):
|
|
self.move_left()
|
|
elif event.key in (pygame.K_RIGHT, pygame.K_d, pygame.K_l):
|
|
self.move_right()
|
|
elif event.key in (pygame.K_UP, pygame.K_w, pygame.K_k):
|
|
self.move_up()
|
|
elif event.key in (pygame.K_DOWN, pygame.K_s, pygame.K_j):
|
|
self.move_down()
|
|
elif event.key == pygame.K_q:
|
|
self.exit()
|
|
|
|
def move_up(self) -> None:
|
|
self.board.move(Direction.UP)
|
|
|
|
def move_down(self) -> None:
|
|
self.board.move(Direction.DOWN)
|
|
|
|
def move_left(self) -> None:
|
|
self.board.move(Direction.LEFT)
|
|
|
|
def move_right(self) -> None:
|
|
self.board.move(Direction.RIGHT)
|
|
|
|
def exit(self) -> None:
|
|
"""Exit the game."""
|
|
pygame.quit()
|
|
sys.exit()
|