Files
henan-backend/olympus-py/olympus/models.py
T
2026-09-21 19:21:35 +08:00

58 lines
1.3 KiB
Python

from __future__ import annotations
from dataclasses import dataclass, field
from decimal import Decimal
from typing import Dict, List, Tuple
@dataclass(frozen=True)
class Bomb:
bomb_id: str
value: int
position: int | None = None
@dataclass(frozen=True)
class Elimination:
symbol: str
count: int
positions: Tuple[int, ...]
payout_multiplier: Decimal
@dataclass(frozen=True)
class CascadeResult:
cascade_index: int
eliminations: Tuple[Elimination, ...]
bombs: Tuple[Bomb, ...]
base_win: Decimal
accumulated_symbols: Dict[str, int]
@dataclass(frozen=True)
class SpinResult:
spin_index: int
cascades: Tuple[CascadeResult, ...]
base_win: Decimal
multiplier_before: int
bombs_added: int
multiplier_after: int
effective_multiplier: int
total_win: Decimal
accumulated_symbols: Dict[str, int]
win_capped: bool = False # 本回合赢奖因 1000x 封顶被截断
@dataclass
class SessionState:
next_spin_index: int = 1
accumulated_multiplier: int = 0
total_win: Decimal = Decimal("0")
spins: List[SpinResult] = field(default_factory=list)
def reset(self) -> None:
self.next_spin_index = 1
self.accumulated_multiplier = 0
self.total_win = Decimal("0")
self.spins.clear()