From c95077baf8c1cba1fc933bf2379a51264a1e31f8 Mon Sep 17 00:00:00 2001 From: Giovani Date: Sun, 13 Jun 2021 12:17:02 -0400 Subject: [PATCH] chore: change bmp font and test text gen --- config.yaml | 6 ++- resource/font/gravity-font.bmp | Bin 196662 -> 0 bytes resource/font/retro-font.bmp | Bin 196662 -> 0 bytes resource/image/press-start-2p-font.bmp | Bin 0 -> 196662 bytes tetris/game.py | 14 +++++-- tetris/util.py | 56 +++++++++++++++++++++---- 6 files changed, 62 insertions(+), 14 deletions(-) delete mode 100644 resource/font/gravity-font.bmp delete mode 100644 resource/font/retro-font.bmp create mode 100644 resource/image/press-start-2p-font.bmp diff --git a/config.yaml b/config.yaml index 524e472..0dbc5ce 100644 --- a/config.yaml +++ b/config.yaml @@ -1,7 +1,7 @@ window: width: 800 height: 600 - icon: "resource/image/tetris_icon.png" + title: "Tetris" sound: @@ -9,6 +9,10 @@ sound: row-completion: "resource/sound/row_completion.wav" piece-set: "resource/sound/piece_set_3.wav" +image: + window-icon: "resource/image/tetris_icon.png" + font: "resource/image/press-start-2p-font.bmp" + engine: fps: 60 tile-size: 20 diff --git a/resource/font/gravity-font.bmp b/resource/font/gravity-font.bmp deleted file mode 100644 index d68393c2c668c5cc635806a5fd97e39fbc737893..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196662 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 diff --git a/resource/font/retro-font.bmp b/resource/font/retro-font.bmp deleted file mode 100644 index 3cd2d48605f30b6c6186ebbcdec38f9f2602e6b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196662 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 diff --git a/resource/image/press-start-2p-font.bmp b/resource/image/press-start-2p-font.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7ded35582d32fd51f75580ab2898f8326d77f45e GIT binary patch literal 196662 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 literal 0 HcmV?d00001 diff --git a/tetris/game.py b/tetris/game.py index dc8e6be..efc075e 100644 --- a/tetris/game.py +++ b/tetris/game.py @@ -23,12 +23,12 @@ class Game: def initialize(self) -> None: pygame.init() - TextGenerator.load("resource/font/retro-font.bmp", (20, 30)) + TextGenerator.load(ConfigurationManager.get("image", "font"), (20, 20)) win_width = ConfigurationManager.get("window", "width") win_height = ConfigurationManager.get("window", "height") - win_icon = ConfigurationManager.get("window", "icon") win_title = ConfigurationManager.get("window", "title") + win_icon = ConfigurationManager.get("image", "window-icon") self.fps = ConfigurationManager.get("engine", "fps") self.tile_size = ConfigurationManager.get("engine", "tile-size") @@ -121,9 +121,15 @@ class Game: self.stack.draw(self.screen) if self.current_piece: self.current_piece.draw(self.screen) - - TextGenerator.draw("SCORE", (0, 0), self.screen) + TextGenerator.draw("Top", (80, 120), self.screen) + TextGenerator.draw("000000", (80, 140), self.screen) + + TextGenerator.draw("Score", (80, 180), self.screen) + TextGenerator.draw("000000", (80, 200), self.screen) + + TextGenerator.draw("Lines 0000", (300, 40), self.screen) + # update display pygame.display.update() diff --git a/tetris/util.py b/tetris/util.py index 3f54741..bf42aa2 100644 --- a/tetris/util.py +++ b/tetris/util.py @@ -22,27 +22,65 @@ class ConfigurationManager: else: return cls.configuration[key] +""" + TODO description +""" class TextGenerator: sheet = None - glyph_size = -1 - letters = { } - numbers = { } + glyph_size = (-1, -1) + characters = { } @classmethod def load(cls, file: str, glyph_size: Tuple) -> None: cls.sheet = pygame.image.load(file) cls.glyph_size = glyph_size - cls.letters["S"] = (3 * glyph_size[0], 6 * glyph_size[1]) - cls.letters["C"] = (3 * glyph_size[0], 4 * glyph_size[1]) - cls.letters["O"] = (7 * glyph_size[0], 5 * glyph_size[1]) - cls.letters["R"] = (2 * glyph_size[0], 6 * glyph_size[1]) - cls.letters["E"] = (5 * glyph_size[0], 4 * glyph_size[1]) + # load character positions in bitmap into the characters dictionary + # letters + cls.characters["A"] = (9 * glyph_size[0], 2 * glyph_size[1]) + cls.characters["B"] = (10 * glyph_size[0], 2 * glyph_size[1]) + cls.characters["C"] = (11 * glyph_size[0], 2 * glyph_size[1]) + cls.characters["D"] = (0 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["E"] = (1 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["F"] = (2 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["G"] = (3 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["H"] = (4 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["I"] = (5 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["J"] = (6 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["K"] = (7 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["L"] = (8 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["M"] = (9 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["N"] = (10 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["O"] = (11 * glyph_size[0], 3 * glyph_size[1]) + cls.characters["P"] = (0 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["Q"] = (1 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["R"] = (2 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["S"] = (3 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["T"] = (4 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["U"] = (5 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["V"] = (6 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["W"] = (7 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["X"] = (8 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["Y"] = (9 * glyph_size[0], 4 * glyph_size[1]) + cls.characters["Z"] = (10 * glyph_size[0], 4 * glyph_size[1]) + + # numbers + cls.characters["0"] = (4 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["1"] = (5 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["2"] = (6 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["3"] = (7 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["4"] = (8 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["5"] = (9 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["6"] = (10 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["7"] = (11 * glyph_size[0], 1 * glyph_size[1]) + cls.characters["8"] = (0 * glyph_size[0], 2 * glyph_size[1]) + cls.characters["9"] = (1 * glyph_size[0], 2 * glyph_size[1]) @classmethod def draw(cls, text: str, position: Tuple, surface: pygame.Surface) -> None: x_position = 0 for char_ in text: - surface.blit(cls.sheet, (position[0] + x_position, position[1]), pygame.Rect(cls.letters[char_.upper()], (cls.glyph_size[0], cls.glyph_size[1]))) + if not char_.isspace(): + surface.blit(cls.sheet, (position[0] + x_position, position[1]), pygame.Rect(cls.characters[char_.upper()], (cls.glyph_size[0], cls.glyph_size[1]))) x_position += cls.glyph_size[0] \ No newline at end of file