def gain_card_to_topdeck(state, player, pile): if pile.qty > 0: process_event(state, log.GainEvent(player, pile.card)) process_event(state, log.EnterContext()) process_event(state, log.TopdeckEvent(player, pile.card)) player.draw_pile.append(pile.card) pile.qty -= 1 process_event(state, log.ExitContext())
def play_inplace(state, player, card): """ Play a card without moving it. Activates the effect of the card. Wraps the card effect with a EnterContext and ExitContext event. """ process_event(state, log.PlayEvent(player, card)) process_event(state, log.EnterContext()) card.play(state, player) process_event(state, log.ExitContext())
def buy_card(state, player, card_name): """ TODO (henry-prior): assert statements break execution, can we handle w a return to decision context and warning? (will only come up when human is playing) """ assert (card_name in state.supply_piles) assert (state.supply_piles[card_name].qty > 0) pile = state.supply_piles[card_name] card = pile.card assert (player.coins >= card.cost) player.coins -= card.cost player.buys -= 1 process_event(state, log.BuyEvent(player, card)) process_event(state, log.EnterContext()) gain_card_to_discard(state, player, pile) process_event(state, log.ExitContext())
def play_inplace(state, player, card): process_event(state, log.PlayEvent(player, card)) process_event(state, log.EnterContext()) card.play(state, player) process_event(state, log.ExitContext())