コード例 #1
0
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()
コード例 #2
0
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,
    })
コード例 #3
0
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
コード例 #4
0
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,
    })
コード例 #5
0
def organize_cards(*, from_state, user, payload):
    game = Game.deserialize(from_state)
    game.organize_cards(player=user, **payload)
    return game.serialize()
コード例 #6
0
def pass_card(*, from_state, user, payload):
    game = Game.deserialize(from_state)
    game.legally_pass_cards(player=user, **payload)
    return game.serialize()
コード例 #7
0
def give_up(*, from_state, user, payload):
    game = Game.deserialize(from_state)
    game.give_up(player=user)
    return game.serialize()
コード例 #8
0
def yield_attack(*, from_state, user, payload):
    game = Game.deserialize(from_state)
    game.yield_attack(player=user, **payload)
    return game.serialize()
コード例 #9
0
def defend(*, from_state, user, payload):
    game = Game.deserialize(from_state)
    game.legally_defend(player=user, **payload)
    return game.serialize()
コード例 #10
0
def noop(*, from_state):
    return Game.deserialize(from_state).serialize()