mirror of
https://github.com/kristoferssolo/Tetris.git
synced 2025-10-21 20:00:35 +00:00
feat(game): add Menu surface / main window
This commit is contained in:
parent
d299934e7c
commit
3b51a9a62f
7
main.py
7
main.py
@ -2,7 +2,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from utils import BASE_PATH, Config
|
from utils import BASE_PATH, CONFIG
|
||||||
|
|
||||||
|
|
||||||
def pos_int(string: str) -> int:
|
def pos_int(string: str) -> int:
|
||||||
@ -61,9 +61,9 @@ logger.add(
|
|||||||
@logger.catch
|
@logger.catch
|
||||||
def main(args: argparse.ArgumentParser) -> None:
|
def main(args: argparse.ArgumentParser) -> None:
|
||||||
if args.debug:
|
if args.debug:
|
||||||
Config.log_level = "debug"
|
CONFIG.log_level = "debug"
|
||||||
elif args.verbose:
|
elif args.verbose:
|
||||||
Config.log_level = "info"
|
CONFIG.log_level = "info"
|
||||||
|
|
||||||
import ai
|
import ai
|
||||||
import game
|
import game
|
||||||
@ -72,6 +72,7 @@ def main(args: argparse.ArgumentParser) -> None:
|
|||||||
ai.log.debug("Training the AI")
|
ai.log.debug("Training the AI")
|
||||||
else:
|
else:
|
||||||
game.log.debug("Running the game")
|
game.log.debug("Running the game")
|
||||||
|
game.Menu().run()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
from .log import log
|
from .log import log
|
||||||
|
|
||||||
__all__ = [log]
|
__all__ = ["log"]
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
from utils import BASE_PATH, Config
|
from utils import BASE_PATH, CONFIG
|
||||||
|
|
||||||
log = logger.bind(name="ai")
|
log = logger.bind(name="ai")
|
||||||
|
|
||||||
log.add(
|
log.add(
|
||||||
BASE_PATH / ".logs" / "ai.log",
|
BASE_PATH / ".logs" / "ai.log",
|
||||||
format="{time} | {level} | {message}",
|
format="{time} | {level} | {message}",
|
||||||
level=Config.log_level.upper(),
|
level=CONFIG.log_level.upper(),
|
||||||
rotation="10 MB",
|
rotation="10 MB",
|
||||||
compression="zip",
|
compression="zip",
|
||||||
filter=lambda record: record["extra"].get("name") == "ai",
|
filter=lambda record: record["extra"].get("name") == "ai",
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
from .log import log
|
from .log import log
|
||||||
|
from .menu import Menu
|
||||||
|
|
||||||
__all__ = [log]
|
__all__ = ["log", "Menu"]
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
from utils import BASE_PATH, Config
|
from utils import BASE_PATH, CONFIG
|
||||||
|
|
||||||
log = logger.bind(name="game")
|
log = logger.bind(name="game")
|
||||||
|
|
||||||
|
|
||||||
log.add(
|
log.add(
|
||||||
BASE_PATH / ".logs" / "game.log",
|
BASE_PATH / ".logs" / "game.log",
|
||||||
format="{time} | {level} | {message}",
|
format="{time} | {level} | {message}",
|
||||||
level=Config.log_level.upper(),
|
level=CONFIG.log_level.upper(),
|
||||||
rotation="10 MB",
|
rotation="10 MB",
|
||||||
compression="zip",
|
compression="zip",
|
||||||
filter=lambda record: record["extra"].get("name") == "game",
|
filter=lambda record: record["extra"].get("name") == "game",
|
||||||
|
|||||||
35
src/game/menu.py
Normal file
35
src/game/menu.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from utils import CONFIG
|
||||||
|
|
||||||
|
|
||||||
|
class Menu:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
pygame.init()
|
||||||
|
pygame.display.set_caption(CONFIG.window.title)
|
||||||
|
self.surface = pygame.display.set_mode(CONFIG.window.size)
|
||||||
|
self.clock = pygame.time.Clock()
|
||||||
|
|
||||||
|
def draw(self) -> None:
|
||||||
|
self.surface.fill(CONFIG.colors.bg)
|
||||||
|
pygame.display.update()
|
||||||
|
|
||||||
|
def run(self) -> None:
|
||||||
|
while True:
|
||||||
|
self.draw()
|
||||||
|
self.handle_events()
|
||||||
|
pygame.display.update()
|
||||||
|
self.clock.tick(CONFIG.fps)
|
||||||
|
|
||||||
|
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()
|
||||||
@ -1,5 +1,5 @@
|
|||||||
from .config import Config
|
from .config import CONFIG
|
||||||
from .log import log
|
from .log import log
|
||||||
from .path import BASE_PATH
|
from .path import BASE_PATH
|
||||||
|
|
||||||
__all__ = [BASE_PATH, Config, log]
|
__all__ = ["BASE_PATH", "CONFIG", "log"]
|
||||||
|
|||||||
62
src/utils/colors.py
Normal file
62
src/utils/colors.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
from attr import define
|
||||||
|
|
||||||
|
|
||||||
|
@define
|
||||||
|
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"
|
||||||
@ -2,6 +2,8 @@ from typing import NamedTuple
|
|||||||
|
|
||||||
from attr import define
|
from attr import define
|
||||||
|
|
||||||
|
from .colors import TokyoNightNight
|
||||||
|
|
||||||
|
|
||||||
class Size(NamedTuple):
|
class Size(NamedTuple):
|
||||||
width: int
|
width: int
|
||||||
@ -25,6 +27,7 @@ class SideBar:
|
|||||||
|
|
||||||
@define
|
@define
|
||||||
class Window:
|
class Window:
|
||||||
|
title = "Tetris"
|
||||||
padding: int = 20
|
padding: int = 20
|
||||||
size: Size = Size(
|
size: Size = Size(
|
||||||
Game().size.width + SideBar().size.width + padding * 3,
|
Game().size.width + SideBar().size.width + padding * 3,
|
||||||
@ -39,3 +42,8 @@ class Config:
|
|||||||
game: Game = Game()
|
game: Game = Game()
|
||||||
sidebar: SideBar = SideBar()
|
sidebar: SideBar = SideBar()
|
||||||
window: Window = Window()
|
window: Window = Window()
|
||||||
|
colors = TokyoNightNight()
|
||||||
|
fps: int = 60
|
||||||
|
|
||||||
|
|
||||||
|
CONFIG = Config()
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from .config import Config
|
from .config import CONFIG
|
||||||
from .path import BASE_PATH
|
from .path import BASE_PATH
|
||||||
|
|
||||||
log = logger.bind(name="utils")
|
log = logger.bind(name="utils")
|
||||||
@ -8,7 +8,7 @@ log = logger.bind(name="utils")
|
|||||||
log.add(
|
log.add(
|
||||||
BASE_PATH / ".logs" / "utils.log",
|
BASE_PATH / ".logs" / "utils.log",
|
||||||
format="{time} | {level} | {message}",
|
format="{time} | {level} | {message}",
|
||||||
level=Config.log_level.upper(),
|
level=CONFIG.log_level.upper(),
|
||||||
rotation="10 MB",
|
rotation="10 MB",
|
||||||
compression="zip",
|
compression="zip",
|
||||||
filter=lambda record: record["extra"].get("name") == "utils",
|
filter=lambda record: record["extra"].get("name") == "utils",
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
BASE_PATH = Path(__file__).resolve().parent.parent.parent.parent
|
BASE_PATH = Path(__file__).resolve().parent.parent.parent
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user