def callBS(self,hand,num_cards,curr_card,current_card_value,curr_player,numturns,player_trackers): #call bs if the cards they say they have plus #the number of cards we have of that same vaue #is greater than the total number fo that card num_cards_deck_match = 0 num_cards_i_have = 0 for c in hand.cards: if c.name == curr_card: num_cards_i_have += 1 # if matched in hand + matched in deck + number they claim > 4 call BS for c in range(1,14): if current_card_value == c: num_card_deck_match = player_trackers[self.name].known_cards_deck[c] if num_cards + num_cards_i_have + num_card_deck_match > 4*self.numDecks: return True num_cards_hand = player_trackers[curr_player].num_cards # if player plays last card call BS if num_cards_hand == 0: return True # if player caims mre than 4 cards call BS if num_cards > 4*self.numDecks: return True # else calculate probability player has what they claim prob_has_card = player_trackers[curr_player].probability_having_cards[current_card_value] if prob_has_card == 0.0: prob_has_card = Player.getProbabilityMove(num_cards, num_cards_hand, hand, current_card_value) #calculates the rate at which other players bluff numturns = floor(numturns * ((len(player_trackers) - 1) / len(player_trackers))) bs = 0 for key in player_trackers.keys(): if key != self.name: bs += player_trackers[key].number_BS if numturns != 0: percenBS = bs / numturns else: percenBS = 0 #adjust alpha to be higher if bs rate is high, lower if low if percenBS < 0.2: adjust_alpha = (percenBS - 0.4) / 3.8 else: adjust_alpha = 0 if prob_has_card < self.alpha + adjust_alpha: return True else: return False
def callBS(self,hand,num_cards,curr_card,current_card_value,curr_player,numturns,player_trackers): num_cards_hand = player_trackers[curr_player].num_cards + num_cards # call be if last or second to last card if num_cards_hand == 0: return True if num_cards_hand == 1: return True # calculate probability that player has what they claim prob_has_card = player_trackers[curr_player].probability_having_cards[current_card_value] if prob_has_card == 0.0: prob_has_card = Player.getProbabilityMove(num_cards, num_cards_hand, hand, current_card_value) # if prob < threshold call BS if prob_has_card < self.alpha: return True else: return False