Exemplo n.º 1
0
    def render(self, size: screensize.ScreenSize):
        TOP_PADDING = 2
        BOTTOM_PADDING = 2
        LEFT_PADDING = 2
        RIGHT_PADDING = 2
        draw_surf = Surface((self.width, 13))
        draw.rect(draw_surf,
                  self.trim_colour,
                  (0, 0, draw_surf.get_width(), draw_surf.get_height()),
                  width=1)
        text_to_render = self.get_string()
        render_text = font_small.render(text_to_render, False,
                                        self.text_colour)
        draw_surf.blit(render_text, (TOP_PADDING, LEFT_PADDING))
        text_metrics = font_small.metrics(text_to_render)
        char_x = 0
        char_w = text_metrics[0][1] if len(text_metrics) > 0 else 4
        for c_ind in range(self.cursor_pos):
            char_w = text_metrics[c_ind][4]
            char_x += char_w

        # print(char_x, char_w, text_metrics)
        # draw.rect(draw_surf, self.text_colour, (char_x + LEFT_PADDING, TOP_PADDING + render_text.get_height(), char_w, 2))
        draw.rect(
            draw_surf, self.text_colour,
            (char_x + LEFT_PADDING, TOP_PADDING, 1, render_text.get_height()))
        return draw_surf
Exemplo n.º 2
0
 def render(self):
     out_surface = Surface(self.pos.size)
     out_surface.fill(self.background_colour)
     button_label = font_small.render(self.label, False, self.text_colour)
     out_surface.blit(button_label, (out_surface.get_width()//2 - button_label.get_width()//2, out_surface.get_height()//2 - button_label.get_height()//2))
     shadow_colour = tuple(channel * 0.7 for channel in self.background_colour)
     draw.line(out_surface, shadow_colour, (0, 0), (0, out_surface.get_height()))
     draw.line(out_surface, shadow_colour, (0, out_surface.get_height()-1), (out_surface.get_width(), out_surface.get_height()-1))
     return out_surface
Exemplo n.º 3
0
def render(card_value: int, screen_size: ScreenSize):
    if card_value == -1:
        return card_small_back.copy()
    card_suit = Suit.from_card(card_value)
    card_power = Power.from_card(card_value)
    draw_card = card_small.copy()
    card_text_render = font_small.render(card_power.get_char(), False,
                                         card_suit.get_colour())
    card_icon = card_suit.get_icon()

    draw_card.blit(card_icon, (1, 1))
    draw_card.blit(
        card_text_render,
        (draw_card.get_width() - card_text_render.get_width(),
         draw_card.get_height() - card_text_render.get_height() + 1))
    return draw_card
Exemplo n.º 4
0
    def render(self, size: screensize.ScreenSize):
        TOP_PADDING = 2
        BOTTOM_PADDING = 2
        LEFT_PADDING = 2
        RIGHT_PADDING = 2
        out_surf = Surface((self.width, 13))

        for i in range(self.num_digits):
            char_x_start = i * (self.max_char_width + LEFT_PADDING + RIGHT_PADDING + 1)
            draw.rect(out_surf, self.trim_colour, (
            char_x_start, TOP_PADDING, LEFT_PADDING + self.max_char_width + RIGHT_PADDING,
            TOP_PADDING + self.max_char_height + BOTTOM_PADDING), 1)
            if i < len(self.chars):
                render_digit = font_small.render(self.chars[i], False, self.text_colour)
                out_surf.blit(render_digit, (char_x_start + LEFT_PADDING, TOP_PADDING + 1))
        return out_surf
Exemplo n.º 5
0
    def render(self) -> None:
        super().render()
        if self.auth is None:
            if self.username is None:
                # still have to select login or register
                self.screen.fill((0, 0, 0))
                if self.registration_qr is None:
                    self.screen.blit(self.login_button.render(), self.login_button.pos)
                    self.screen.blit(self.register_button.render(), self.register_button.pos)

                    rendered_username_prompt = self.username_field.render(ScreenSize.SMALL)

                    render_prompt = font_small.render("Login/Register", False, (255, 255, 255))
                    self.screen.blit(render_prompt, (self.screen.get_width() // 2 - render_prompt.get_width() // 2,
                                                     self.screen.get_height() // 2 - render_prompt.get_height() - rendered_username_prompt.get_height()))
                    self.screen.blit(rendered_username_prompt, (
                        self.screen.get_width() // 2 - rendered_username_prompt.get_width() // 2,
                        self.screen.get_height() // 2 - rendered_username_prompt.get_height()))
                    if self.login_error_text:
                        rendered_reason = font_small.render(self.login_error_text, False, (255, 0, 0))
                        self.screen.blit(rendered_reason, (
                            self.screen.get_width() // 2 - rendered_reason.get_width() // 2,
                            self.screen.get_height() - rendered_reason.get_height() - 1))
                else:
                    registration_qr = OCSimpleImage().deserialize(self.registration_qr, 2).get_surface()
                    draw.rect(self.screen, (255, 255, 255), (
                        self.screen.get_width() // 2 - registration_qr.get_width() // 2, 0, registration_qr.get_width(),
                        self.screen.get_height()))
                    self.screen.blit(registration_qr,
                                     (self.screen.get_width() // 2 - registration_qr.get_width() // 2, 0))

                    self.screen.blit(self.scanned_button.render(), self.scanned_button.pos)
                    # rendered_qr_label = font_mono_light.render(f"Use a 2FA app", False, (0, 0, 0))
                    # self.screen.blit(rendered_qr_label, (self.screen.get_width()//2 - rendered_qr_label.get_width()//2, self.screen.get_height() - rendered_qr_label.get_height() - 1))
            else:
                self.screen.fill((0, 0, 0))
                rendered_totp_field = self.totp_field.render(ScreenSize.SMALL)
                self.screen.blit(rendered_totp_field, (
                    self.screen.get_width() // 2 - rendered_totp_field.get_width() // 2,
                    self.screen.get_height() // 2 - rendered_totp_field.get_height() // 2))
                prompt_text = font_small.render(f"Enter the TOTP for {self.username}", False, (255, 255, 255))
                self.screen.blit(prompt_text, (self.screen.get_width() // 2 - prompt_text.get_width() // 2,
                                               self.screen.get_height() // 2 - rendered_totp_field.get_height() // 2 - prompt_text.get_height() - 1))
                self.screen.blit(self.login_submit_button.render(), self.login_submit_button.pos)
                self.screen.blit(self.cancel_totp_button.render(), self.cancel_totp_button.pos)
        else:
            self.screen.fill((0, 120, 0))
            game_data = self.game_state.split("\n")
            game_phase = self.get_game_phase()
            if game_phase != "GAME":
                bets = self.get_bets()
                if bets:
                    rendered_bet = font_small.render(f"Bets:", False, (255, 255, 255))
                    self.screen.blit(rendered_bet, (1, 1))
                    y_height = 1 + rendered_bet.get_height()
                    for i, bet in enumerate(bets):
                        rendered_bet = font_small.render(f"Hand {i+1}: {bet}", False, (255, 255, 255))
                        self.screen.blit(rendered_bet, (1, y_height))
                        y_height += rendered_bet.get_height()
            if game_phase == "betting":
                bet_amount = int(game_data[1].split(" ")[1])
                moves = game_data[2].strip().split(" ")
                num_bet_options = moves[1]
                bet_options = moves[2:]
                bet_text = font_small.render("Place a bet!", False, (255, 255, 255))
                self.screen.blit(bet_text, (self.screen.get_width() // 2 - bet_text.get_width() // 2, 5))

                bet_amount_text = font_large.render(str(bet_amount), False, (255, 255, 255))
                self.screen.blit(bet_amount_text, (
                    self.screen.get_width() // 2 - bet_amount_text.get_width() // 2, 6 + bet_text.get_height()))
                if bet_options != ['0']:
                    if 'submitbet' in bet_options:
                        self.submit_bet_button.background_colour = (255, 255, 255)
                        self.submit_bet_button.text_colour = (0, 0, 0)
                    else:
                        self.submit_bet_button.background_colour = (150, 150, 150)
                        self.submit_bet_button.text_colour = (180, 180, 180)
                    self.screen.blit(self.submit_bet_button.render(), self.submit_bet_button.pos)
                    for amount, button in zip(self.get_positive_bets(), self.add_coins):
                        button.label = f"+{amount[0]}"
                        self.screen.blit(button.render(), button.pos)

                    for amount, button in zip(self.get_negative_bets(), self.remove_coins):
                        button.label = amount[0]
                        self.screen.blit(button.render(), button.pos)
                else:
                    print("Not enough funds")
            elif game_phase == 'playermove':
                num_active_hands, hands = self.get_player_hands()
                hand_offset_x = self.screen.get_width() // (num_active_hands + 1)
                active_hand, move_buttons = self.get_move_buttons()
                for i, hand in enumerate(hands):
                    hand_center = hand_offset_x * (i + 1)
                    if hand.hand_state & HandState.ACTIVE:
                        min_hand_x = 0
                        max_hand_x = 0
                        card_height = 0
                        for j, card in enumerate(hand.cards):
                            rendered_card = blackjackcard.render(card, ScreenSize.SMALL)
                            card_offset_x = int(-len(hand.cards) / 2 * rendered_card.get_width() + (
                                    rendered_card.get_width() + 1) * j)
                            self.screen.blit(rendered_card, (hand_center + card_offset_x,
                                                             self.screen.get_height() // 2 - rendered_card.get_height() // 2 + 23))
                            min_hand_x = min(min_hand_x, card_offset_x)
                            max_hand_x = max(max_hand_x, card_offset_x + rendered_card.get_width())
                            card_height = rendered_card.get_height()
                        if not (hand.hand_state & HandState.STANDING) and i == active_hand:
                            draw.rect(self.screen, (100, 100, 255), (hand_center + min_hand_x - 2, self.screen.get_height()//2 - card_height//2 + 21, max_hand_x - min_hand_x + 4, 20), 1)
                self.draw_dealer_hand()

                for button, command, button_enabled in move_buttons:
                    self.screen.blit(button.render(), button.pos)

                current_game_phase_render = font_small.render("Your Move", False, (255, 255, 255))
                self.screen.blit(current_game_phase_render, (self.screen.get_width()//2 - current_game_phase_render.get_width()//2, 1))
            elif game_phase == 'dealermove':
                self.basic_draw_game()

                self.screen.blit(self.acknowledge_button.render(), self.acknowledge_button.pos)

                current_game_phase_render = font_small.render("Dealer's Move", False, (255, 255, 255))
                self.screen.blit(current_game_phase_render, (self.screen.get_width()//2 - current_game_phase_render.get_width()//2, 1))
            elif game_phase == 'payout':

                game_result = self.game_state.split("\n")[2].split(" ")
                if game_result[0] == 'won':
                    self.screen.fill((50, 210, 235))
                    self.screen.blit(self.acknowledge_button.render(), self.acknowledge_button.pos)

                    current_game_phase_render = font_small.render("Payout", False, (255, 255, 255))
                    self.screen.blit(current_game_phase_render, (self.screen.get_width()//2 - current_game_phase_render.get_width()//2, 1))

                    victory_text = font_large.render("You Won!", False, (255, 255, 255))
                    self.screen.blit(victory_text, (self.screen.get_width()//2 - victory_text.get_width()//2, 5 + current_game_phase_render.get_height()))

                    winnings_amount = font_large.render(game_result[1], False, (255, 255, 255))
                    self.screen.blit(winnings_amount, (self.screen.get_width()//2 - winnings_amount.get_width()//2, victory_text.get_height() + current_game_phase_render.get_height()))
                    self.screen.blit(shekel, (self.screen.get_width()//2 + winnings_amount.get_width()//2 + 2, 8 + victory_text.get_height() + current_game_phase_render.get_height()))
                elif game_result[0] == 'tie':
                    self.screen.fill((150, 150, 150))
                    self.screen.blit(self.acknowledge_button.render(), self.acknowledge_button.pos)

                    current_game_phase_render = font_small.render("Payout", False, (255, 255, 255))
                    self.screen.blit(current_game_phase_render, (self.screen.get_width()//2 - current_game_phase_render.get_width()//2, 1))

                    victory_text = font_large.render("Tie", False, (255, 255, 255))
                    self.screen.blit(victory_text, (self.screen.get_width()//2 - victory_text.get_width()//2, 5 + current_game_phase_render.get_height()))
                elif game_result[0] == 'loss':
                    self.screen.fill((150, 100, 100))
                    self.screen.blit(self.acknowledge_button.render(), self.acknowledge_button.pos)

                    current_game_phase_render = font_small.render("Payout", False, (255, 255, 255))
                    self.screen.blit(current_game_phase_render, (self.screen.get_width()//2 - current_game_phase_render.get_width()//2, 1))

                    victory_text = font_large.render("You Lose", False, (255, 255, 255))
                    self.screen.blit(victory_text, (self.screen.get_width()//2 - victory_text.get_width()//2, 5 + current_game_phase_render.get_height()))
            elif game_phase == 'continueplaying':
                self.basic_draw_game()
                gfxdraw.box(self.screen, (10, 10, self.screen.get_width() - 20 , self.screen.get_height() - 20), (0, 0, 0, 220))

                play_again_prompt = font_small.render("Play Again?", False, (255, 255, 255))
                self.screen.blit(play_again_prompt, (self.screen.get_width()//2 - play_again_prompt.get_width()//2, 22))
                self.screen.blit(self.play_again_yes_button.render(), self.play_again_yes_button.pos)
                self.screen.blit(self.play_again_no_button.render(), self.play_again_no_button.pos)
            self.screen.blit(self.exit_button.render(), self.exit_button.pos)
Exemplo n.º 6
0
 def render(self):
     out_coin = self.coin_icon.copy()
     rendered_coin_label = font_small.render(self.label, False, self.text_colour)
     out_coin.blit(rendered_coin_label, (out_coin.get_width()//2 - rendered_coin_label.get_width()//2, out_coin.get_height()//2 - rendered_coin_label.get_height()//2))
     return out_coin