def CheckActionsPerTurn(g, low, high=None): ret = [] for turn in g.get_turns(): action_count = 0 for card in turn.plays: if card_info.is_action(card): action_count += 1 if action_count >= low and (high is None or action_count < high): ret.append(achievement(turn.player.player_name, "Played %d or more actions in one turn" % low, action_count)) return ret
def CheckActionsPerTurn(g, low, high=None): ret = [] for turn in g.get_turns(): action_count = 0 for card in turn.plays: if card_info.is_action(card): action_count += 1 if action_count >= low and (high is None or action_count < high): ret.append( achievement(turn.player.player_name, "Played %d or more actions in one turn" % low, action_count)) return ret
def CheckMatchOneTrickPony(g): accumed_per_player = g.cards_accumalated_per_player() ret = [] for player, card_dict in accumed_per_player.iteritems(): if g.get_player_deck(player).WinPoints() > 1.0: actions_quants = [(c, q) for c, q in card_dict.iteritems() if card_info.is_action(c)] if len(actions_quants) != 1: continue if actions_quants[0][1] < 7: continue action, quant = actions_quants[0] ret.append({'player': player, 'reason': 'Bought no action other than %d %s' % ( quant, card_info.pluralize(action, quant))}) return ret
def CheckMatchOneTrickPony(g): """Bought only one type of action""" accumed_per_player = g.cards_accumalated_per_player() ret = [] for player, card_dict in accumed_per_player.iteritems(): if g.get_player_deck(player).WinPoints() > 1.0: actions_quants = [(c, q) for c, q in card_dict.iteritems() if card_info.is_action(c)] if len(actions_quants) != 1: continue if actions_quants[0][1] < 7: continue action, quant = actions_quants[0] ret.append( achievement( player, 'Bought no action other than %d %s' % (quant, card_info.pluralize(action, quant)), action)) return ret
def CheckMatchBOM(g): """Bought only money and Victory.""" ret = [] cards_per_player = g.cards_accumalated_per_player() for player, card_list in cards_per_player.iteritems(): treasures = [] bad = False if g.get_player_deck(player).Resigned(): continue for card in card_list: if card_info.is_action(card): bad = True break if card_info.is_treasure(card): treasures.append(card) if not bad: reason = 'Bought only money and vp : %s' % (', '.join(treasures)) ret.append(achievement(player, reason)) return ret
def CheckMatchOneTrickPony(g): """Bought only one type of action""" if g.any_resigned(): return [] accumed_per_player = g.cards_accumalated_per_player() ret = [] for player, card_dict in accumed_per_player.iteritems(): if g.get_player_deck(player).WinPoints() > 1.0: actions_quants = [(c, q) for c, q in card_dict.iteritems() if card_info.is_action(c)] if len(actions_quants) != 1: continue if actions_quants[0][1] < 7: continue action, quant = actions_quants[0] ret.append( achievement( player, "Bought no action other than %d %s" % (quant, card_info.pluralize(action, quant)), action ) ) return ret
new_cards = [] new_mat = np.zeros((num_rows, existing_matrix.shape[1])) for card, row in zip(existing_card_names, existing_matrix): if acceptable_func(card): new_mat[len(new_cards)] = row new_cards.append(card) return new_mat, new_cards # http://forum.dominionstrategy.com/index.php?topic=647.msg8951#msg8951 bonus_feature_funcs = [ lambda x: 2 * card_info.coin_cost(x), lambda x: 3 * card_info.potion_cost(x), lambda x: 3 * card_info.num_plus_actions(x), lambda x: 4 * card_info.num_plus_cards(x), lambda x: 4 * card_info.is_action(x), lambda x: 4 * card_info.is_victory(x), lambda x: 4 * card_info.is_treasure(x), lambda x: 5 * card_info.is_attack(x), lambda x: 1 * card_info.is_reaction(x), lambda x: 2 * card_info.vp_per_card(x), lambda x: 1 * card_info.money_value(x), lambda x: 1 * card_info.num_plus_buys(x), # 1 * gains (remodel, upgrade, workshop, ...) lambda x: 1 * max(card_info.trashes(x), 5) # 6 * pollute (can add to other deck) # 3 * combo (conspirator, peddler, ... # 3 * special (goons, gardens, uniqueness in general) # 3 * discard (militia, minion, # 1 * cycle (vault, cellar, .. ) # 100 * win rate
def score_vineyard(deck_comp): return sum(deck_comp[card] if card_info.is_action(card) else 0 for card in deck_comp) / 3 * deck_comp['Vineyard']
def action_balance_deck_extractor(deck_comp, game_state, player): ret = 0 for card, quant in deck_comp.iteritems(): ret += (ci.num_plus_actions(card) - ci.is_action(card)) * quant return [ret / (sum(deck_comp.itervalues()) or 1)]
num_rows += 1 new_cards = [] new_mat = np.zeros((num_rows, existing_matrix.shape[1])) for card, row in zip(existing_card_names, existing_matrix): if acceptable_func(card): new_mat[len(new_cards)] = row new_cards.append(card) return new_mat, new_cards # http://forum.dominionstrategy.com/index.php?topic=647.msg8951#msg8951 bonus_feature_funcs = [ lambda x: 2 * card_info.coin_cost(x), lambda x: 3 * card_info.potion_cost(x), lambda x: 3 * card_info.num_plus_actions(x), lambda x: 4 * card_info.num_plus_cards(x), lambda x: 4 * card_info.is_action(x), lambda x: 4 * card_info.is_victory(x), lambda x: 4 * card_info.is_treasure(x), lambda x: 5 * card_info.is_attack(x), lambda x: 1 * card_info.is_reaction(x), lambda x: 2 * card_info.vp_per_card(x), lambda x: 1 * card_info.money_value(x), lambda x: 1 * card_info.num_plus_buys(x), # 1 * gains (remodel, upgrade, workshop, ...) lambda x: 1 * max(card_info.trashes(x), 5) # 6 * pollute (can add to other deck) # 3 * combo (conspirator, peddler, ... # 3 * special (goons, gardens, uniqueness in general) # 3 * discard (militia, minion, # 1 * cycle (vault, cellar, .. ) # 100 * win rate
def action_balance_deck_extractor(deck_comp, game_state, player): ret = 0.0 for card, quant in deck_comp.iteritems(): ret += (ci.num_plus_actions(card) - ci.is_action(card)) * quant return [ret / (sum(deck_comp.itervalues()) or 1)]