first commit
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user