Exemple #1
0
class SetupGame:
    def __init__(self):

        # game logic related
        self.pot = 0
        self.player = Player()
        self.dealer = Dealer()

        # interface related - add interface elements here
        self.root = Tk()
        self.root.title('Casino')
        self.root.iconbitmap(
            'C:/Users/SavSamuShaman/Desktop/blackjack/pkc2.ico')
        # labels
        self.header_label = Label(
            self.root,
            text="You walk to the table and the dealer ask for your name")
        self.message_label = Label(
            self.root, text='Best of luck a the blackjack table ;)')
        self.error_message_label = Label(self.root)
        self.player_money_label = Label(
            self.root, text=f'Your money : {self.player.chips}')
        self.dealer_money_label = Label(
            self.root, text=f'Dealer money : {self.dealer.chips}')
        self.pot_label = Label(self.root, text=f'Pot : 0')
        self.current_score_label = Label(self.root, text=f'Current score : 0')
        # buttons
        self.hit_me_button = Button(self.root,
                                    text='Hit me',
                                    command=self.hit_me)
        self.stay_button = Button(self.root, text='Stay', command=self.stay)
        self.bet_button = Button(self.root, text='Bet', command=self.bet)
        self.start_button = Button(self.root,
                                   text='Tell the dealer your name',
                                   command=self.set_up_environ)
        # input box
        self.entry = Entry(self.root, width=30)

        # element placement
        self.header_label.grid(row=0, column=1)
        self.entry.grid(row=1, column=1, columnspan=3)
        self.start_button.grid(row=2, column=1, padx=15, pady=20)

        self.root.mainloop()

    def set_up_environ(self):

        name_input = self.entry.get()
        if name_input:
            self.player.name = name_input
        self.entry.delete(0, END)

        self.entry.grid_forget()
        self.start_button.grid_forget()

        # reusing existing elements
        self.header_label[
            'text'] = 'The Red Sparrow welcomes you, {name}'.format(
                name=self.player.name)
        self.start_button['text'] = 'Begin'
        self.start_button['command'] = self.new_round

        self.start_button.grid(row=4, column=1)
        self.message_label.grid(row=2, column=1)
        self.player_money_label.grid(row=3, column=2)
        self.dealer_money_label.grid(row=3, column=0)
        self.pot_label.grid(row=3, column=1)
        return

    def bet(self):
        """Clears variables and starts a new round on valid bet"""
        try:
            amount = int(self.entry.get())
            if amount > self.player.chips:
                self.error_message_label['text'] = 'Not enough money'
                self.error_message_label.grid(row=6, column=1)
                return

            self.clear_game()
            self.pot += self.player.bet(amount) + self.dealer.bet(amount)

            self.entry.grid_forget()
            self.bet_button.grid_forget()
            self.error_message_label.grid_forget()
            self.entry.delete(0, END)

            self.current_score_label['text'] = 'Current score : 0'
            self.message_label[
                'text'] = 'Best of luck a the blackjack table ;)'
            self.pot_label['text'] = 'Pot :{pot}'.format(pot=self.pot)
            self.update_money_labels()

            self.current_score_label.grid(row=4, column=1)
            self.stay_button.grid(row=4, column=0)
            self.hit_me_button.grid(row=4, column=2)

        except ValueError:
            self.error_message_label['text'] = 'Invalid bet'
            self.error_message_label.grid(row=6, column=1)

        return

    def hit_me(self):
        # hit me --> deal me a card in blackjack
        card = self.dealer.deal_card()
        self.player.add_to_score(card)
        player_score = self.player.current_score

        if player_score < 21:
            pass
        elif player_score == 21:
            self.player.win(self.pot)
            self.message_label['text'] = f'{self.player.name} has Blackjack !'
            self.conclude_round()
        else:
            self.dealer.win(self.pot)
            self.message_label['text'] = f'{self.player.name} busted out'
            self.conclude_round()

        self.current_score_label['text'] = 'Current score : {score}'.format(
            score=player_score)
        return

    def stay(self):
        player_score = self.player.current_score
        player_points = abs(21 - player_score)
        dealer_points = abs(21 - conclude_game(self.dealer))

        if dealer_points < player_points:
            self.dealer.win(self.pot)
            self.message_label[
                'text'] = f'The dealer was closer to 21. You lose'
        elif dealer_points == player_points:
            self.dealer.win(self.pot / 2)
            self.player.win(self.pot / 2)
            self.message_label['text'] = "It's a tie"
        else:
            self.player.win(self.pot)
            self.message_label['text'] = f"You win ${self.pot}"

        self.current_score_label[
            'text'] = f'Your score : {player_score} \nDealer score {self.dealer.current_score}'

        self.conclude_round()
        return

    def new_round(self):
        self.start_button.grid_forget()

        self.entry.grid(row=5, column=1)
        self.bet_button.grid(row=5, column=2)
        return

    def conclude_round(self):
        self.update_money_labels()
        self.hit_me_button.grid_forget()
        self.stay_button.grid_forget()
        self.new_round()
        return

    def clear_game(self):
        self.dealer.clear_score()
        self.player.clear_score()
        self.pot = 0
        return

    def update_money_labels(self):
        self.dealer_money_label['text'] = f'Dealer money : {self.dealer.chips}'
        self.player_money_label['text'] = f'Player money : {self.player.chips}'
        return