def displayStatus(self): txt = Font(digit_font, int(game.fontSize)).render(str(game.text), True, game.textColor) scoreText = txt.get_rect() scoreText.center = (X // 2, (Y // 2) - 60) win.blit(txt, scoreText)
class Label(Sprite): def __init__(self, text, size, text_color, background_color=None): Sprite.__init__(self) self.text = text self.previous_text = text self.size = size self.text_color = text_color self.background_color = background_color self.image = Font(FONT, size).render( text, True, text_color, background_color) self.rect = self.image.get_rect() def update(self, *args): if self.previous_text != self.text: self.image = Font(FONT, self.size).render( self.text, True, self.text_color, self.background_color) previous_center = self.rect.center self.rect = self.image.get_rect() self.rect.center = previous_center self.previous_text = self.text
class TextInput(Label): def __init__(self, size, text_color, background_color): Label.__init__(self, '', size, text_color, background_color) self.size = size self.text_color = text_color self.background_color = background_color def on_text_changed(self, newText): self.text += newText self.image = Font(FONT, self.size).render( self.text, True, self.text_color, self.background_color) previous_center = self.rect.center self.rect = self.image.get_rect() self.rect.center = previous_center
def gameOverEndScreen(self, text, color): pygame.mixer.music.pause() s = pygame.Surface((X, Y), pygame.SRCALPHA) s.fill((0, 0, 0, 200)) win.blit(s, (0, 0)) txt = Font(digit_font, 80).render(str(text), True, color) scoreText = txt.get_rect() scoreText.center = (X // 2, (Y // 2) - 70) win.blit(txt, scoreText) txt = Font(digit_font, 20).render("<Press space to restart>", True, (255, 255, 255)) scoreText = txt.get_rect() scoreText.center = (X // 2, (Y // 2) - 20) win.blit(txt, scoreText) txt = Font(digit_font, 18).render("Your high scores are saved automatically", True, (255, 255, 255)) scoreText = txt.get_rect() scoreText.center = (X // 2, (Y // 2) + 30) win.blit(txt, scoreText)
class MenuState(State): def __init__(self, game): State.__init__(self, game) # Fonts self._font1 = Font('freesansbold.ttf', 44) self._font2 = Font('freesansbold.ttf', 16) self._font3 = Font('freesansbold.ttf', 24) # Texts self._titles = [ self._font1.render(text, True, _WHITE) for text in ['Multiplayer', 'Dinosaur'] ] self._credit = Font('freesansbold.ttf', 12).render('Made by xxMrPHDxx', True, _GRAY) self._options = ['Play', 'Join', 'Help'] self._selected = 0 def draw(self, screen): # Clear screen screen.fill(_BLACK) # Draw title for i, title in enumerate(self._titles): w = title.get_rect().width screen.blit(title, ((self.game.width - w) / 2, 50 + i * 50)) # Draw credit w = self._credit.get_rect().width screen.blit(self._credit, ((self.game.width - w) / 2, 150)) # Draw options for i, option in enumerate(self._options): font, col = ((self._font3, _RED) if self._selected == i else (self._font2, _WHITE)) text = font.render(option, True, col) rect = text.get_rect() w, h = rect.width, rect.height screen.blit(text, ((self.game.width - w) / 2, 280 + i * 32 - h / 2)) def key_down(self, event): if event.key == pygame.K_DOWN: self._selected += 1 if event.key == pygame.K_UP: self._selected -= 1 if self._selected < 0: self._selected = len(self._options) - 1 elif self._selected >= len(self._options): self._selected = 0
def displayNumbers(self): gameScoreTxt = Font(digit_font, 22).render(str(game.score), True, (60, 60, 60)) gameSavedScoreTxt = Font(digit_font, 22).render(str(game.savedScore), True, (60, 60, 60)) gameLevelTxt = Font(digit_font, 22).render(str(game.level), True, (60, 60, 60)) gameScoreRect = gameScoreTxt.get_rect() gameSavedScoreRect = gameSavedScoreTxt.get_rect() gameLevelRect = gameLevelTxt.get_rect() gameScoreRect.left, gameScoreRect.top = 33, 544 gameSavedScoreRect.left, gameSavedScoreRect.top = 198, 544 gameLevelRect.left, gameLevelRect.top = 33, 597 win.blit(gameScoreTxt, gameScoreRect) win.blit(gameSavedScoreTxt, gameSavedScoreRect) win.blit(gameLevelTxt, gameLevelRect) for i in range(1, self.lives + 1): win.blit(pygame.image.load("assets/pac.png"), (X - 193 + (i * 18), 544 + 6))
class TextPane(Drawable): DEFAULTCOLOR = (0, 0, 0) DEFAULTFONTSIZE = 12 def __init__(self, text, fontsize=None, color=None): Drawable.__init__(self) self.text = str(text) self.fs = fontsize if fontsize is not None else TextPane.DEFAULTFONTSIZE self.fc = color if color is not None else TextPane.DEFAULTCOLOR self.bg = None self.textRect = None self.update() def setText(self, text): self.text = str(text) self.update() def setBGcolor(self, color=None): if color is None or len(color) == 3: self.bg = color else: self.bg = None def center(self): pass def update(self): from pygame.font import Font self.textRect = Font(None, self.fs).render(self.text, 1, self.fc) rect = self.textRect.get_rect() self.size = Vec2D(rect.width, rect.height) def draw(self, surf): if self.bg is not None: from pygame.draw import rect rect(surf, self.bg, self.getRect()) surf.blit(self.textRect, self.pos.getTuple())