def join_game(*, from_state, user, payload): state = deepcopy(from_state) joined = set(state.get("joined", [])) | set([user]) players = state["players"] if joined != set(player["id"] for player in players): state.update(joined=joined) return state for index, player in enumerate(players): player.setdefault("hand", []) player.setdefault("order", index) player.setdefault("state", []) state.update( players=players, drawn_cards=[], pass_count=0, table=[], yielded=[], ) game = Game.deserialize(state) game.draw() return game.serialize()
def game_3p(mocked_draw_cards_3p, static_parameters): return Game.deserialize({ "drawn_cards": [], "pass_count": 0, "players": [ { "order": 0, "id": "anna", "hand": ["9H", "3S", "KH", "4C", "4H"], "state": [], "organize_strategy": "no_sort", "attacks": [], }, { "order": 1, "id": "vasyl", "hand": ["7C", "6D", "JS", "7H"], "state": [], "organize_strategy": "no_sort", "attacks": [], }, { "order": 2, "id": "igor", "hand": ["8H", "JD", "KS", "5H", "JC"], "state": [], "organize_strategy": "no_sort", "attacks": [], }, ], "trump_suit": "diamonds", **static_parameters, })
def auto_action(*, from_state, user, payload): """ Game will select an action for the user to perform. It is assumed that the "user" is a bot. """ for _ in range(100): try: game = Game.deserialize(from_state) action_type = game.auto_action(player=user, **payload) print(f"{user} {action_type}") return game.serialize() except AI.CannotPerform: pass else: raise IllegalAction
def game(mocked_draw_cards, static_parameters): return Game.deserialize({ "drawn_cards": [], "pass_count": 0, "players": [{ "id": "anna", "hand": ["10D", "10C", "2S", "5C", "8D", "2C"], "order": 0, "state": [], "organize_strategy": "no_sort", "attacks": [], }], "trump_suit": "clubs", **static_parameters, })
def organize_cards(*, from_state, user, payload): game = Game.deserialize(from_state) game.organize_cards(player=user, **payload) return game.serialize()
def pass_card(*, from_state, user, payload): game = Game.deserialize(from_state) game.legally_pass_cards(player=user, **payload) return game.serialize()
def give_up(*, from_state, user, payload): game = Game.deserialize(from_state) game.give_up(player=user) return game.serialize()
def yield_attack(*, from_state, user, payload): game = Game.deserialize(from_state) game.yield_attack(player=user, **payload) return game.serialize()
def defend(*, from_state, user, payload): game = Game.deserialize(from_state) game.legally_defend(player=user, **payload) return game.serialize()
def noop(*, from_state): return Game.deserialize(from_state).serialize()