Esempio n. 1
0
 def place_bet(self,
               total_num_of_dice,
               bet_history,
               prob=.1,
               bluff=.1,
               last_bet=None):
     print("Your dice are: " +
           ", ".join(str(die) for die in self.dice_list))
     current_bet = None
     while True:
         entered_value = input("Place your bet or call: ")
         print()
         if entered_value.lower() == "call":
             if last_bet is not None:
                 return "call"
             else:
                 print("Cannot call on first bet")
                 continue
         else:
             current_bet = [int(x) for x in entered_value.split()]
             if len(current_bet) != 2:
                 print(
                     "Bet is misformatted. Should be n d (n dice of value d)"
                 )
                 continue
             current_bet = Bet(current_bet[1], current_bet[0])
             if current_bet.verify_bet(total_num_of_dice,
                                       previous_bet=last_bet):
                 return current_bet
Esempio n. 2
0
    def gen_bets(self, total_dice, bet_history, last_bet=None, num_bets=30):
        if last_bet:
            bets = set()
            i = 0
            probs = skewnorm.pdf(range(last_bet.num_of_dice, total_dice + 1),
                                 5, .5, 4)
            probs = probs / sum(probs)
            dice_probs = [1 / 5 for _ in range(5)]
            for die in bet_history.keys():
                dice_probs[i - 2] += bet_history[die] / 100
            dice_probs = [x / sum(dice_probs) for x in dice_probs]
            while len(bets) != num_bets and i < 150:
                die_value = int(
                    np.random.choice(np.arange(2, 7), 1, p=dice_probs)[0])
                die_amount = int(
                    np.random.choice(np.arange(last_bet.num_of_dice,
                                               total_dice + 1),
                                     1,
                                     p=probs)[0])
                bet = Bet(die_value, die_amount)
                if bet.verify_bet(total_dice, last_bet, verbose=False):
                    bets.add(bet)

                i += 1

            return list(bets)

        return [Bet(x, y) for x in range(2, 7) for y in range(1, 4)]
Esempio n. 3
0
async def parseBet(ctx):
    cmdBase = botPrefix + "bet "
    author = ctx.author.name
    message = ctx.message.content[len(cmdBase):]
    if Bet.doesUserBetExist(author, con):
        await Bet.closeBet(ctx, Bet.popBet(author), message)
    else:
        await Bet.createBet(ctx, author, message)
Esempio n. 4
0
 def place_bet(self,
               total_number_of_dice,
               bet_history,
               prob=.1,
               bluff=.1,
               last_bet=None):
     if not last_bet:
         return Bet(randint(2, 6), randint(1, total_number_of_dice))
     while True:
         bet = Bet(randint(2, 6),
                   randint(last_bet.num_of_dice, total_number_of_dice))
         if bet.verify_bet(total_number_of_dice, last_bet, verbose=False):
             return np.random.choice([bet, 'call'], 1)[0]
Esempio n. 5
0
    def get_best(self, total_dice, bet_history, prob, bluff, last_bet):
        if not last_bet and len(self.dice_list) == 1:
            return Bet(self.dice_list[0], 1)
        elif len(self.dice_list) == 1:
            return "call"
        else:
            bet, _ = self.minimax(float('-inf'), float('inf'), total_dice,
                                  bet_history, last_bet)
            bet_prob = super().calc_prob(total_dice, bet.dice_value,
                                         bet.num_of_dice)

            if bet_prob < prob:
                return 'call'
            elif randint(1, int(1 / bluff)) == 1:
                bets = super().gen_bets(total_dice, bet_history, last_bet)
                probs = [
                    self.calc_prob(total_dice, bet.dice_value, bet.num_of_dice)
                    for bet in bets
                ]
                if not probs:
                    return "call"

                sorted_bets = [(x, y)
                               for x, y in sorted(list(zip(probs, bets)),
                                                  key=lambda pair: -pair[0])]

                return sorted_bets[randint(0, int(len(sorted_bets) / 3))][1]

            return bet
Esempio n. 6
0
async def showPogs(ctx):
    retVals = Bet.selectAllPogs(con)
    embed = discord.Embed(
        color=CoreColors.LeaderboardColor, title="Pog Leaderboard")
    embed.set_thumbnail(url=pogUrl)
    for row in retVals:
        embed.add_field(name=row[2], value=row[3], inline=True)
    print("Pogs: " + str(retVals))
    channel = ctx.message.channel
    await channel.send(embed=embed)
Esempio n. 7
0
    def get_best(self, total_dice, prob, bluff, bet_history, last_bet):

        if not last_bet and len(self.dice_list) == 1:
            return Bet(self.dice_list[0], 1)
        else:
            bets = super().gen_bets(total_dice, bet_history, last_bet)
            probs = [
                self.calc_prob(total_dice, bet.dice_value, bet.num_of_dice)
                for bet in bets
            ]
            if not probs:
                return "call"
            sorted_bets = [(x, y)
                           for x, y in sorted(list(zip(probs, bets)),
                                              key=lambda pair: -pair[0])]
            if sorted_bets[0][0] < prob:
                return "call"
            else:
                if randint(1, int(1 / bluff)) == 1:
                    return sorted_bets[randint(0, int(len(bets) / 3))][1]

                return sorted_bets[0][1]
Esempio n. 8
0
    def play_round(self, prob=.1, bluff=.1):
        '''
        prob: cutoff probability for deciding to place or call a bet
        bluff: probability to place a random bet

        Play a round of Perudo
        '''
        if not self.out:
            self.receive_info()
            while True:
                response = pickle.loads(self.sock.recv(24))
                self.sock.sendall(pickle.dumps("OK"))
                if response == 'S':
                    self.called = self.place_bet(prob, bluff)
                    self.went_previously = True
                    if self.called:
                        self.all_bets = []
                        self.bet_history = dict(zip(range(2, 7), [0 for _ in range(5)]))
                        return
                elif response == 'call':
                    print("Someone has called")
                    self.opp_called = True
                    self.all_bets = []
                    self.bet_history = dict(zip(range(2, 7), [0 for _ in range(5)]))
                    return
                else:
                    self.opp_called = False
                    self.went_previously = False
                    print("The previous bet is: ", end='')
                    response = response.split()
                    bet = Bet(int(response[1]), int(response[0]))
                    print(repr(bet))
                    print()
                    self.all_bets.append(bet)
                    self.bet_history[bet.dice_value] = bet.num_of_dice
        else:
            print("You are out")
            pass
Esempio n. 9
0
def make_bet(participant_OD, bet_data):
    new_bet = Bet("Bet 1: Dem Nomination", participant_OD, bet_data)
    return new_bet