Tetris/src/game/main.py
2024-01-04 06:29:18 +02:00

64 lines
1.7 KiB
Python

import sys
import pygame
from utils import CONFIG, Figure
from .game import Game
from .log import log
from .preview import Preview
from .score import Score
from .tetromino import Tetromino
class Main:
def __init__(self) -> None:
pygame.init()
pygame.display.set_caption(CONFIG.window.title)
self.display_surface = pygame.display.set_mode(CONFIG.window.size)
self.display_surface.fill(CONFIG.colors.bg)
self.clock = pygame.time.Clock()
self.next_figures = self._generate_next_figures()
self.game = Game(self._get_next_figure, self._update_score)
self.score = Score()
self.preview = Preview()
def draw(self) -> None:
pygame.display.update()
def run(self) -> None:
while True:
self.draw()
self.handle_events()
self.game.run()
self.score.run()
self.preview.run(self.next_figures)
pygame.display.update()
self.clock.tick(CONFIG.fps)
def _update_score(self, lines: int, score: int, level: int) -> None:
self.score.update(lines, score, level)
def handle_events(self) -> None:
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
self.exit()
def exit(self) -> None:
pygame.quit()
sys.exit()
def _generate_next_figures(self, amount: int = 3) -> list[Figure]:
return [Figure.random() for _ in range(amount)]
def _get_next_figure(self) -> Figure:
next_shape = self.next_figures.pop(0)
self.next_figures.append(Figure.random())
return next_shape