make starting_player a property of instances, not games
This commit is contained in:
parent
3ab35eb10d
commit
722838243f
4 changed files with 18 additions and 11 deletions
|
@ -116,7 +116,8 @@ class HanabiInstance:
|
|||
clue_starved: bool = False, # if true, discarding and playing fives only gives back half a clue
|
||||
fives_give_clue: bool = True, # if false, then playing a five will not change the clue count
|
||||
deck_plays: bool = False,
|
||||
all_or_nothing: bool = False
|
||||
all_or_nothing: bool = False,
|
||||
starting_player: int = 0 # defines index of player that starts the game
|
||||
):
|
||||
# defining properties
|
||||
self.deck = deck
|
||||
|
@ -128,6 +129,7 @@ class HanabiInstance:
|
|||
self.deck_plays = deck_plays,
|
||||
self.all_or_nothing = all_or_nothing
|
||||
assert not self.all_or_nothing, "All or nothing not implemented"
|
||||
self.starting_player = starting_player
|
||||
|
||||
# normalize deck indices
|
||||
for (idx, card) in enumerate(self.deck):
|
||||
|
@ -170,7 +172,7 @@ class HanabiInstance:
|
|||
|
||||
|
||||
class GameState:
|
||||
def __init__(self, instance: HanabiInstance, starting_player: int = 0):
|
||||
def __init__(self, instance: HanabiInstance):
|
||||
# will not be modified
|
||||
self.instance = instance
|
||||
|
||||
|
@ -181,7 +183,7 @@ class GameState:
|
|||
self.stacks = [0 for i in range(0, self.instance.num_suits)]
|
||||
self.strikes = 0
|
||||
self.clues = 8
|
||||
self.turn = starting_player
|
||||
self.turn = self.instance.starting_player
|
||||
self.pace = self.instance.initial_pace
|
||||
self.remaining_extra_turns = self.instance.num_players + 1
|
||||
self.trash = []
|
||||
|
|
|
@ -19,7 +19,7 @@ from hanabi.solvers import sat
|
|||
def check_game(game_id: int) -> Tuple[int, hanab_game.GameState]:
|
||||
logger.debug("Analysing game {}".format(game_id))
|
||||
with database.conn.cursor() as cur:
|
||||
cur.execute("SELECT games.num_players, deck, actions, score, games.variant_id FROM games "
|
||||
cur.execute("SELECT games.num_players, deck, actions, score, games.variant_id, starting_player FROM games "
|
||||
"INNER JOIN seeds ON seeds.seed = games.seed "
|
||||
"WHERE games.id = (%s)",
|
||||
(game_id,)
|
||||
|
@ -27,11 +27,16 @@ def check_game(game_id: int) -> Tuple[int, hanab_game.GameState]:
|
|||
res = cur.fetchone()
|
||||
if res is None:
|
||||
raise ValueError("No game associated with id {} in database.".format(game_id))
|
||||
(num_players, compressed_deck, compressed_actions, score, variant_id) = res
|
||||
(num_players, compressed_deck, compressed_actions, score, variant_id, starting_player) = res
|
||||
deck = compress.decompress_deck(compressed_deck)
|
||||
actions = compress.decompress_actions(compressed_actions)
|
||||
|
||||
instance = hanab_live.HanabLiveInstance(deck, num_players, variant_id=variant_id)
|
||||
instance = hanab_live.HanabLiveInstance(
|
||||
deck,
|
||||
num_players,
|
||||
variant_id=variant_id,
|
||||
starting_player=starting_player
|
||||
)
|
||||
|
||||
# check if the instance is already won
|
||||
if instance.max_score == score:
|
||||
|
|
|
@ -118,9 +118,9 @@ def detailed_export_game(
|
|||
deck_plays=deck_plays,
|
||||
one_less_card=one_less_card,
|
||||
one_extra_card=one_extra_card,
|
||||
all_or_nothing=all_or_nothing
|
||||
),
|
||||
starting_player
|
||||
all_or_nothing=all_or_nothing,
|
||||
starting_player=starting_player
|
||||
)
|
||||
)
|
||||
for action in actions:
|
||||
game.make_action(action)
|
||||
|
|
|
@ -41,8 +41,8 @@ class HanabLiveInstance(hanab_game.HanabiInstance):
|
|||
|
||||
|
||||
class HanabLiveGameState(hanab_game.GameState):
|
||||
def __init__(self, instance: HanabLiveInstance, starting_player: int = 0):
|
||||
super().__init__(instance, starting_player)
|
||||
def __init__(self, instance: HanabLiveInstance):
|
||||
super().__init__(instance)
|
||||
self.instance: HanabLiveInstance = instance
|
||||
|
||||
def make_action(self, action):
|
||||
|
|
Loading…
Reference in a new issue