44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
"""Color and theme management."""
|
|
import curses
|
|
from dataclasses import dataclass
|
|
from typing import Dict
|
|
|
|
|
|
@dataclass
|
|
class ColorPair:
|
|
"""Represents a color pair."""
|
|
name: str
|
|
foreground: int
|
|
background: int
|
|
pair_id: int
|
|
|
|
|
|
class ThemeManager:
|
|
"""Manages colors and themes for the game."""
|
|
|
|
def __init__(self):
|
|
self.colors: Dict[str, int] = {}
|
|
self.color_pairs: Dict[str, ColorPair] = {}
|
|
|
|
def initialize(self, stdscr) -> None:
|
|
"""Initialize colors with curses."""
|
|
curses.start_color()
|
|
|
|
# Define color pairs
|
|
self.color_pairs = {
|
|
'snake': ColorPair('snake', curses.COLOR_GREEN, curses.COLOR_BLACK, 1),
|
|
'food': ColorPair('food', curses.COLOR_RED, curses.COLOR_BLACK, 2),
|
|
'text': ColorPair('text', curses.COLOR_WHITE, curses.COLOR_BLACK, 3),
|
|
}
|
|
|
|
# Initialize color pairs
|
|
for pair in self.color_pairs.values():
|
|
curses.init_pair(pair.pair_id, pair.foreground, pair.background)
|
|
|
|
self.colors = {name: pair.pair_id for name, pair in self.color_pairs.items()}
|
|
stdscr.bkgd(' ', curses.color_pair(self.colors['text']))
|
|
|
|
def get_color_pair(self, color_name: str) -> int:
|
|
"""Get color pair ID by name."""
|
|
return self.colors.get(color_name, self.colors['text'])
|