mirror of
https://github.com/kristoferssolo/Tetris.git
synced 2025-10-21 20:00:35 +00:00
`Preview` `Game` `Score` `Tetromino` `Timer` style(docs): adhere to Google docstring style
103 lines
2.1 KiB
Python
103 lines
2.1 KiB
Python
import random
|
|
from enum import Enum
|
|
from pathlib import Path
|
|
from typing import NamedTuple
|
|
|
|
import pygame
|
|
from attr import define
|
|
from pygame import Vector2 as Vec2
|
|
|
|
from .colors import TokyoNightNight
|
|
from .path import BASE_PATH
|
|
|
|
|
|
class FigureConfig(NamedTuple):
|
|
shape: list[Vec2]
|
|
color: str
|
|
image: pygame.Surface
|
|
|
|
|
|
def _load_image(filename: str) -> pygame.Surface:
|
|
return pygame.image.load(
|
|
BASE_PATH / "assets" / "figures" / filename
|
|
) # TODO: add `.convert_alpha()``
|
|
# TODO: change colors of images
|
|
|
|
|
|
class Figure(Enum):
|
|
I = FigureConfig(
|
|
[
|
|
Vec2(0, 0),
|
|
Vec2(0, -1),
|
|
Vec2(0, -2),
|
|
Vec2(0, 1),
|
|
],
|
|
TokyoNightNight().cyan,
|
|
_load_image("I.png"),
|
|
)
|
|
O = FigureConfig(
|
|
[
|
|
Vec2(0, 0),
|
|
Vec2(0, -1),
|
|
Vec2(1, 0),
|
|
Vec2(1, -1),
|
|
],
|
|
TokyoNightNight().yellow,
|
|
_load_image("O.png"),
|
|
)
|
|
T = FigureConfig(
|
|
[
|
|
Vec2(0, 0),
|
|
Vec2(-1, 0),
|
|
Vec2(1, 0),
|
|
Vec2(0, -1),
|
|
],
|
|
TokyoNightNight().purple,
|
|
_load_image("T.png"),
|
|
)
|
|
|
|
S = FigureConfig(
|
|
[
|
|
Vec2(0, 0),
|
|
Vec2(-1, 0),
|
|
Vec2(0, -1),
|
|
Vec2(1, -1),
|
|
],
|
|
TokyoNightNight().green,
|
|
_load_image("S.png"),
|
|
)
|
|
Z = FigureConfig(
|
|
[
|
|
Vec2(0, 0),
|
|
Vec2(1, 0),
|
|
Vec2(0, -1),
|
|
Vec2(-1, -1),
|
|
],
|
|
TokyoNightNight().red,
|
|
_load_image("Z.png"),
|
|
)
|
|
J = FigureConfig(
|
|
[
|
|
Vec2(0, 0),
|
|
Vec2(0, -1),
|
|
Vec2(0, 1),
|
|
Vec2(-1, 1),
|
|
],
|
|
TokyoNightNight().blue,
|
|
_load_image("J.png"),
|
|
)
|
|
L = FigureConfig(
|
|
[
|
|
Vec2(0, 0),
|
|
Vec2(0, -1),
|
|
Vec2(0, 1),
|
|
Vec2(1, 1),
|
|
],
|
|
TokyoNightNight().orange,
|
|
_load_image("L.png"),
|
|
)
|
|
|
|
@classmethod
|
|
def random(cls) -> "Figure":
|
|
return random.choice(list(Figure))
|