def from_json(cls, obj): board = cls() board.links = [tuple(link) for link in obj["links"]] board.remaining_bombs = obj["remaining_bombs"] board.game_over = obj["game_over"] board.max_turns = obj["max_turns"] board.current_turn = obj["current_turn"] board.num_factories = obj["num_factories"] board.min_dist = obj["min_dist"] board.max_dist = obj["max_dist"] board.stock_range_player = tuple(obj["stock_range_player"]) board.stock_range_neutral = tuple(obj["stock_range_neutral"]) board.max_turns = obj["max_turns"] board.factories = [Factory.from_json(fac) for fac in obj["factories"]] board.troops = [] for troop_json in obj["troops"]: troop = Troop( troop_json["strength"], board.get_factory(troop_json["source"]), board.get_factory(troop_json["destination"]), ) troop.active = troop_json["active"] troop.team = troop_json["team"] troop.distance = troop_json["distance"] troop.travelled = troop_json["travelled"] board.troops.append(troop) board.bombs = [] for bomb_json in obj["bombs"]: bomb = Bomb( bomb_json["strength"], board.get_factory(bomb_json["source"]), board.get_factory(bomb_json["destination"]), ) bomb.active = bomb_json["active"] bomb.team = bomb_json["team"] bomb.distance = bomb_json["distance"] bomb.travelled = bomb_json["travelled"] board.bombs.append(bomb) return board