53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
"""Contains board class"""
|
|
import enum
|
|
from typing import Union, Tuple, List
|
|
from dataclasses import dataclass
|
|
|
|
|
|
class SpecialCard(enum.Enum):
|
|
"""Different types of special cards"""
|
|
Zhong = enum.auto()
|
|
Bai = enum.auto()
|
|
Fa = enum.auto()
|
|
Hua = enum.auto()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class NumberCard:
|
|
"""Different number cards"""
|
|
class Suit(enum.Enum):
|
|
"""Different colors number cards can have"""
|
|
Red = enum.auto()
|
|
Green = enum.auto()
|
|
Black = enum.auto()
|
|
suit: Suit
|
|
number: int
|
|
|
|
|
|
Card = Union[NumberCard, SpecialCard]
|
|
|
|
|
|
class Position(enum.Enum):
|
|
"""Possible Board positions"""
|
|
Field = enum.auto()
|
|
Bunker = enum.auto()
|
|
Goal = enum.auto()
|
|
|
|
|
|
class BunkerStatus(enum.Enum):
|
|
"""States a bunker can be in, if it not holding a card"""
|
|
Empty = enum.auto()
|
|
Dragon = enum.auto()
|
|
|
|
|
|
@dataclass
|
|
class Board:
|
|
"""Solitaire board"""
|
|
field: List[List[Card]] = []
|
|
bunker: Tuple[Union[BunkerStatus, Card],
|
|
Union[BunkerStatus, Card],
|
|
Union[BunkerStatus, Card]] = (BunkerStatus.Empty,
|
|
BunkerStatus.Empty, BunkerStatus.Empty,)
|
|
goal: List[Tuple[NumberCard.Suit, int]] = []
|
|
flowerGone: bool = False
|