refactor(game): setup formatter

This commit is contained in:
Kristofers Solo 2024-01-01 18:51:26 +02:00
parent abdecc36d2
commit 7d1edb3c43
6 changed files with 289 additions and 29 deletions

View File

@ -23,10 +23,16 @@ warn_unreachable = true
warn_unused_configs = true
[tool.ruff]
line-length = 160
line-length = 120
indent-width = 4
[tool.black]
line-length = 160
[tool.ruff.lint]
select = ["I"]
[tool.ruff.flake8-quotes]
docstring-quotes = "double"
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
docstring-code-format = true
docstring-code-line-length = 40

View File

@ -1,12 +1,10 @@
import random
from typing import Union
import pygame
from .colors import COLORS
from .color import Color
from .config import Config
from .utils import Direction, grid_pos
@ -25,7 +23,7 @@ class Block(pygame.sprite.Sprite):
def _draw_value(self) -> None:
"""Draw the value of the block"""
text = self.font.render(str(self.value), True, COLORS.FG)
text = self.font.render(str(self.value), True, Color.FG)
text_rect = text.get_rect(center=self.image.get_rect().center)
self.image.blit(text, text_rect)
@ -84,19 +82,19 @@ class Block(pygame.sprite.Sprite):
def _change_color(self) -> None:
"""Change the color of the block based on its value"""
color_map = {
2: COLORS.BLUE,
4: COLORS.BLUE0,
8: COLORS.BLUE1,
16: COLORS.BLUE2,
32: COLORS.DARK3,
64: COLORS.BORDER_HIGHLIGHT,
128: COLORS.BLUE5,
256: COLORS.BLUE6,
512: COLORS.BLUE7,
1024: COLORS.ORANGE,
2048: COLORS.RED,
2: Color.BLUE,
4: Color.BLUE0,
8: Color.BLUE1,
16: Color.BLUE2,
32: Color.DARK3,
64: Color.BORDER_HIGHLIGHT,
128: Color.BLUE5,
256: Color.BLUE6,
512: Color.BLUE7,
1024: Color.ORANGE,
2048: Color.RED,
}
self.image.fill(color_map.get(self.value, COLORS.ERROR))
self.image.fill(color_map.get(self.value, Color.ERROR))
def __repr__(self) -> str:
"""Return a string representation of the block"""

View File

@ -4,11 +4,18 @@ import pygame
from loguru import logger
from .block import Block
from .color import Color
from .config import Config
from .utils import Direction
class Board(pygame.sprite.Group):
def __init__(self, screen: pygame.Surface):
super().__init__()
self.generate_block(Config.INITIAL_BLOCK_COUNT)
self.screen = screen
self._draw_grid()
def move(self, direction: Direction):
blocks = self.sprites()
block: Block
@ -28,6 +35,15 @@ class Board(pygame.sprite.Group):
self.generate_block()
def _draw_grid(self) -> None:
"""Draw the grid."""
for x in range(0, Config.WIDTH + 20, Config.BLOCK_SIZE):
pygame.draw.line(
self.screen, Color.BG_HIGHLIGHT, (x, 0), (x, Config.HEIGHT)
)
for y in range(0, Config.HEIGHT + 20, Config.BLOCK_SIZE):
pygame.draw.line(self.screen, Color.BG_HIGHLIGHT, (0, y), (Config.WIDTH, y))
def generate_block(self, amount: int = 1, *pos: tuple[int, int]) -> None:
"""Generate `amount` number of blocks."""
if pos:
@ -43,7 +59,9 @@ class Board(pygame.sprite.Group):
y = random.randint(0, 3) * Config.BLOCK_SIZE
block = Block(x, y, self)
colliding_blocks = pygame.sprite.spritecollide(block, self, False) # check for collisions
colliding_blocks = pygame.sprite.spritecollide(
block, self, False
) # check for collisions
if not colliding_blocks:
self.add(block)

241
src/py2048/color.py Normal file
View File

@ -0,0 +1,241 @@
class TokyoNightDay:
BG = "#E1E2E7"
BG_DARK = "#E9E9EC"
BG_FLOAT = "#E9E9EC"
BG_HIGHLIGHT = "#C4C8DA"
BG_POPUP = "#E9E9EC"
BG_SEARCH = "#7890DD"
BG_SIDEBAR = "#E9E9EC"
BG_STATUSLINE = "#E9E9EC"
BG_VISUAL = "#B6BFE2"
BLACK = "#E9E9ED"
BLUE = "#2E7DE9"
BLUE0 = "#7890DD"
BLUE1 = "#188092"
BLUE2 = "#07879D"
BLUE5 = "#006A83"
BLUE6 = "#2E5857"
BLUE7 = "#92A6D5"
BORDER = "#E9E9ED"
BORDER_HIGHLIGHT = "#2496AC"
COMMENT = "#848CB5"
CYAN = "#007197"
DARK3 = "#8990B3"
DARK5 = "#68709A"
DELTA_ADD = "#57A7BC"
DELTA_DELETE = "#D99EA2"
DIFF_ADD = "#AECDE6"
DIFF_CHANGE = "#D6D8E3"
DIFF_DELETE = "#DFCCD4"
DIFF_TEXT = "#92A6D5"
ERROR = "#C64343"
FG = "#3760BF"
FG_DARK = "#6172B0"
FG_FLOAT = "#3760BF"
FG_GUTTER = "#A8AECB"
FG_SIDEBAR = "#6172B0"
GIT_ADD = "#4197A4"
GIT_CHANGE = "#506D9C"
GIT_DELETE = "#C47981"
GIT_IGNORE = "#8990B3"
GIT_SIGNS_ADD = "#399A96"
GIT_SIGNS_CHANGE = "#6482BD"
GITSIGNS_DELETE = "#C25D64"
GREEN = "#587539"
GREEN1 = "#387068"
GREEN2 = "#38919F"
HINT = "#118C74"
INFO = "#07879D"
MAGENTA = "#9854F1"
MAGENTA2 = "#D20065"
ORANGE = "#B15C00"
PURPLE = "#7847BD"
RED = "#F52A65"
RED1 = "#C64343"
TEAL = "#118C74"
TERMINAL_BLACK = "#A1A6C5"
WARNING = "#8C6C3E"
YELLOW = "#8C6C3E"
class TokyoNightMoon:
BG = "#222436"
BG_DARK = "#1E2030"
BG_FLOAT = "#1E2030"
BG_HIGHLIGHT = "#2F334D"
BG_POPUP = "#1E2030"
BG_SEARCH = "#3E68D7"
BG_SIDEBAR = "#1E2030"
BG_STATUSLINE = "#1E2030"
BG_VISUAL = "#2D3F76"
BLACK = "#1B1D2B"
BLUE = "#82AAFF"
BLUE0 = "#3E68D7"
BLUE1 = "#65BCFF"
BLUE2 = "#0DB9D7"
BLUE5 = "#89DDFF"
BLUE6 = "#B4F9F8"
BLUE7 = "#394B70"
BORDER = "#1B1D2B"
BORDER_HIGHLIGHT = "#589ED7"
COMMENT = "#636DA6"
CYAN = "#86E1FC"
DARK3 = "#545C7E"
DARK5 = "#737AA2"
DELTA_ADD = "#305F6F"
DELTA_DELETE = "#6B2E43"
DIFF_ADD = "#273849"
DIFF_CHANGE = "#252A3F"
DIFF_DELETE = "#3A273A"
DIFF_TEXT = "#394B70"
ERROR = "#C53B53"
FG = "#C8D3F5"
FG_DARK = "#828BB8"
FG_FLOAT = "#C8D3F5"
FG_GUTTER = "#3B4261"
FG_SIDEBAR = "#828BB8"
GIT_ADD = "#B8DB87"
GIT_CHANGE = "#7CA1F2"
GIT_DELETE = "#E26A75"
GIT_IGNORE = "#545C7E"
GIT_SIGNS_ADD = "#627259"
GIT_SIGNS_CHANGE = "#485A86"
GIT_SIGNS_DELETE = "#B55A67"
GREEN = "#C3E88D"
GREEN1 = "#4FD6BE"
GREEN2 = "#41A6B5"
HINT = "#4FD6BE"
INFO = "#0DB9D7"
MAGENTA = "#C099FF"
MAGENTA2 = "#FF007C"
ORANGE = "#FF966C"
PURPLE = "#FCA7EA"
RED = "#FF757F"
RED1 = "#C53B53"
TEAL = "#4FD6BE"
TERMINAL_BLACK = "#444A73"
WARNING = "#FFC777"
YELLOW = "#FFC777"
class TokyoNightNight:
BG = "#1A1B26"
BG_DARK = "#16161E"
BG_FLOAT = "#16161E"
BG_HIGHLIGHT = "#292E42"
BG_POPUP = "#16161E"
BG_SEARCH = "#3D59A1"
BG_SIDEBAR = "#16161E"
BG_STATUSLINE = "#16161E"
BG_VISUAL = "#283457"
BLACK = "#15161E"
BLUE = "#7AA2F7"
BLUE0 = "#3D59A1"
BLUE1 = "#2AC3DE"
BLUE2 = "#0DB9D7"
BLUE5 = "#89DDFF"
BLUE6 = "#B4F9F8"
BLUE7 = "#394B70"
BORDER = "#15161E"
BORDER_HIGHLIGHT = "#27A1B9"
COMMENT = "#565F89"
CYAN = "#7DCFFF"
DARK3 = "#545C7E"
DARK5 = "#737AA2"
DELTA_ADD = "#2C5A66"
DELTA_DELETE = "#713137"
DIFF_ADD = "#20303B"
DIFF_CHANGE = "#1F2231"
DIFF_DELETE = "#37222C"
DIFF_TEXT = "#394B70"
ERROR = "#DB4B4B"
FG = "#C0CAF5"
FG_DARK = "#A9B1D6"
FG_FLOAT = "#C0CAF5"
FG_GUTTER = "#3B4261"
FG_SIDEBAR = "#A9B1D6"
GIT_ADD = "#449DAB"
GIT_CHANGE = "#6183BB"
GIT_DELETE = "#914C54"
GIT_IGNORE = "#545C7E"
GIT_SIGNS_ADD = "#266D6A"
GIT_SIGNS_CHANGE = "#536C9E"
GIT_SIGNS_DELETE = "#B2555B"
GREEN = "#9ECE6A"
GREEN1 = "#73DACA"
GREEN2 = "#41A6B5"
HINT = "#1ABC9C"
INFO = "#0DB9D7"
MAGENTA = "#BB9AF7"
MAGENTA2 = "#FF007C"
ORANGE = "#FF9E64"
PURPLE = "#9D7CD8"
RED = "#F7768E"
RED1 = "#DB4B4B"
TEAL = "#1ABC9C"
TERMINAL_BLACK = "#414868"
WARNING = "#E0AF68"
YELLOW = "#E0AF68"
class TokyoNightStorm:
BG = "#24283B"
BG_DARK = "#1F2335"
BG_FLOAT = "#1F2335"
BG_HIGHLIGHT = "#292E42"
BG_POPUP = "#1F2335"
BG_SEARCH = "#3D59A1"
BG_SIDEBAR = "#1F2335"
BG_STATUSLINE = "#1F2335"
BG_VISUAL = "#2E3C64"
BLACK = "#1D202F"
BLUE = "#7AA2F7"
BLUE0 = "#3D59A1"
BLUE1 = "#2AC3DE"
BLUE2 = "#0DB9D7"
BLUE5 = "#89DDFF"
BLUE6 = "#B4F9F8"
BLUE7 = "#394B70"
BORDER = "#1D202F"
BORDER_HIGHLIGHT = "#29A4BD"
COMMENT = "#565F89"
CYAN = "#7DCFFF"
DARK3 = "#545C7E"
DARK5 = "#737AA2"
DELTA_ADD = "#316172"
DELTA_DELETE = "#763842"
DIFF_ADD = "#283B4D"
DIFF_CHANGE = "#272D43"
DIFF_DELETE = "#3F2D3D"
DIFF_TEXT = "#394B70"
ERROR = "#DB4B4B"
FG = "#C0CAF5"
FG_DARK = "#A9B1D6"
FG_FLOAT = "#C0CAF5"
FG_GUTTER = "#3B4261"
FG_SIDEBAR = "#A9B1D6"
GIT_ADD = "#449DAB"
GIT_CHANGE = "#6183BB"
GIT_DELETE = "#914C54"
GIT_IGNORE = "#545C7E"
GIT_SIGNS_ADD = "#266D6A"
GIT_SIGNS_CHANGE = "#536C9E"
GIT_SIGNS_DELETE = "#B2555B"
GREEN = "#9ECE6A"
GREEN1 = "#73DACA"
GREEN2 = "#41A6B5"
HINT = "#1ABC9C"
INFO = "#0DB9D7"
MAGENTA = "#BB9AF7"
MAGENTA2 = "#FF007C"
ORANGE = "#FF9E64"
PURPLE = "#9D7CD8"
RED = "#F7768E"
RED1 = "#DB4B4B"
TEAL = "#1ABC9C"
TERMINAL_BLACK = "#414868"
WARNING = "#E0AF68"
YELLOW = "#E0AF68"
Color = TokyoNightNight

View File

@ -238,4 +238,4 @@ class TokyoNightStorm:
YELLOW = "#E0AF68"
COLORS = TokyoNightNight
Colors = TokyoNightNight

View File

@ -4,8 +4,7 @@ import pygame
from loguru import logger
from .board import Board
from .colors import COLORS
from .color import Color
from .config import Config
from .logger import setup_logger
from .utils import Direction
@ -19,9 +18,7 @@ class Game:
pygame.init()
self.screen: pygame.Surface = pygame.display.set_mode((Config.WIDTH, Config.HEIGHT))
pygame.display.set_caption("2048")
self.blocks = Board()
self.blocks.generate_block(Config.INITIAL_BLOCK_COUNT)
# self.blocks.generate_block(2, (1, 1), (1, 3))
self.blocks = Board(self.screen)
def run(self) -> None:
"""Run the game loop."""
@ -36,7 +33,7 @@ class Game:
def _render(self) -> None:
"""Render the game."""
self.screen.fill(COLORS.BG)
self.screen.fill(Color.BG)
self.blocks.draw(self.screen)
pygame.display.flip()