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
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
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
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
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)
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