def from_state(cls, state, ais=[], shuffle=False): players = [] state_dict = json.loads(state) if len(ais) != state_dict["player_count"]: raise "Invalid game state for player count!" for ai, pstate in zip(ais, state_dict["players"]): ai.name = pstate["name"] players.append( Player(map(cards.card_by_name, pstate["deck"]), ai, pstate["name"])) players[-1].discard_pile = map(cards.card_by_name, pstate["discard_pile"]) players[-1].hand = map(cards.card_by_name, pstate["hand"]) players[-1].in_play = map(lambda c: cards.type_by_name(c["name"]).from_state(c["state"]), pstate["in_play"]) players[-1].actions = pstate["actions"] players[-1].buys = pstate["buys"] players[-1].money = pstate["money"] players[-1].reset_stats = False if shuffle: random.shuffle(players[-1].deck) result = Game(players) result.stacks = map(lambda s: cards.Stack(cards.type_by_name(s["card"]), s["count"]), state_dict["stacks"]) result.active_player = state_dict["active_player"] return result
def __init__(self, players, saveat=-1, kingdom=None): self.players = players if kingdom: cardnames = kingdom.split(";") self.stacks = cards.get_default_stacks() for c in cardnames: count = 10 card = c if ":" in c: card, count = c.split(":") self.stacks.append(cards.base.Stack(cards.type_by_name(card), int(count))) else: self.stacks = cards.make_stacks() self.trash = [] self.active_player = 0 for p in self.players: p.set_game(self) self.saveat = int(saveat)