diff --git a/config.yaml b/config.yaml index 947502f..9db7660 100644 --- a/config.yaml +++ b/config.yaml @@ -18,11 +18,23 @@ image: font: "resource/image/press-start-2p-font.bmp" position: + # title screen title-logo: [280, 125] option-one: [320, 390] option-two: [320, 440] cursor-option-one: [300, 399] cursor-option-two: [300, 449] + # single player game screen + top-label: [80, 120] + top-value: [80, 140] + score-label: [80, 180] + score-value: [80, 200] + lines-label: [300, 40] + next-label: [600, 120] + level-label: [600, 220] + well: [280, 80] + next-piece: [620, 160] + spawn-piece: [-260, -60] engine: fps: 60 diff --git a/tetri5/scene.py b/tetri5/scene.py index b92b9a7..84dcfa4 100644 --- a/tetri5/scene.py +++ b/tetri5/scene.py @@ -28,37 +28,37 @@ class TitleScene(Scene): self._tile_size = ConfigurationManager.get("engine", "tile-size") self._background_color = pygame.Color(ConfigurationManager.get("color", "window-bg")) self._logo_image = pygame.image.load(ConfigurationManager.get("image", "title-screen")) - self._cursor_position_one = ConfigurationManager.get("position", "cursor-option-one") - self._cursor_position_two = ConfigurationManager.get("position", "cursor-option-two") - self._cursor_position = self._cursor_position_one + self._cursor_pos_one = ConfigurationManager.get("position", "cursor-option-one") + self._cursor_pos_two = ConfigurationManager.get("position", "cursor-option-two") + self._cursor_pos = self._cursor_pos_one self._cursor_blink_interval = ConfigurationManager.get("engine", "cursor-blink-interval") self._cursor_blink_time = 0 self._cursor_color = pygame.Color(ConfigurationManager.get("color", "cursor")) self._cursor_off = False - self._logo_position = ConfigurationManager.get("position", "title-logo") - self._option_one_position = ConfigurationManager.get("position", "option-one") - self._option_two_position = ConfigurationManager.get("position", "option-two") + self._logo_pos = ConfigurationManager.get("position", "title-logo") + self._option_one_pos = ConfigurationManager.get("position", "option-one") + self._option_two_pos = ConfigurationManager.get("position", "option-two") self._is_multiplayer = False self._change_scence = change_scene def draw(self, surface: pygame.Surface) -> None: surface.fill(self._background_color) - surface.blit(self._logo_image, self._logo_position) + surface.blit(self._logo_image, self._logo_pos) - TextGenerator.draw(TitleScene.ONE_PLAYER, self._option_one_position, surface) - TextGenerator.draw(TitleScene.TWO_PLAYER, self._option_two_position, surface) + TextGenerator.draw(TitleScene.ONE_PLAYER, self._option_one_pos, surface) + TextGenerator.draw(TitleScene.TWO_PLAYER, self._option_two_pos, surface) if self._cursor_off: - pygame.draw.circle(surface, self._cursor_color, self._cursor_position, self._tile_size // 3) + pygame.draw.circle(surface, self._cursor_color, self._cursor_pos, self._tile_size // 3) def update(self, elapsed_time: int) -> None: option_change = False if Controller.key_pressed(pygame.K_UP) and self._is_multiplayer: - self._cursor_position = self._cursor_position_one + self._cursor_pos = self._cursor_pos_one self._is_multiplayer = False option_change = True if Controller.key_pressed(pygame.K_DOWN) and not self._is_multiplayer: - self._cursor_position = self._cursor_position_two + self._cursor_pos = self._cursor_pos_two self._is_multiplayer = True option_change = True @@ -79,15 +79,31 @@ class TitleScene(Scene): class SinglePlayerScene(Scene): def __init__(self, change_scene: FunctionType) -> None: + self._top_label_pos = ConfigurationManager.get("position", "top-label") + self._top_value_pos = ConfigurationManager.get("position", "top-value") + self._score_label_pos = ConfigurationManager.get("position", "score-label") + self._score_value_pos = ConfigurationManager.get("position", "score-value") + self._lines_label_pos = ConfigurationManager.get("position", "lines-label") + self._next_label_pos = ConfigurationManager.get("position", "next-label") + self._level_label_pos = ConfigurationManager.get("position", "level-label") + self._next_piece_pos = ConfigurationManager.get("position", "next-piece") + self._spawn_piece_shift = ConfigurationManager.get("position", "spawn-piece") + self._tile_size = ConfigurationManager.get("engine", "tile-size") self._background_color = pygame.Color(ConfigurationManager.get("color", "window-bg")) + self._points_table = ConfigurationManager.get("engine", "points-table") + self._lines_per_level = ConfigurationManager.get("engine", "lines-per-level") self._score = 0 self._previous_level = 0 - self._well = Well((280, 80), ConfigurationManager.get("color", "well-1"), ConfigurationManager.get("color", "well-border-1")) # TODO calculate position later and redo color config for well - self._stack = Stack(ConfigurationManager.get("color", "stack-1"), ConfigurationManager.get("color", "stack-border-1")) + self._current_piece = None - self._next_piece = PieceGenerator.get_piece((620, 160)) - self._points_table = ConfigurationManager.get("engine", "points-table") + self._next_piece = PieceGenerator.get_piece(self._next_piece_pos) + self._well = Well(ConfigurationManager.get("position", "well"),\ + ConfigurationManager.get("color", "well-1"),\ + ConfigurationManager.get("color", "well-border-1")) + self._stack = Stack(ConfigurationManager.get("color", "stack-1"),\ + ConfigurationManager.get("color", "stack-border-1")) + self._change_scence = change_scene SoundManager.play_theme_music() @@ -107,13 +123,13 @@ class SinglePlayerScene(Scene): lines = str(self._stack.total_lines).zfill(4) level = str(self._get_level()).zfill(2) - TextGenerator.draw("Top", (80, 120), surface) - TextGenerator.draw("000000", (80, 140), surface) - TextGenerator.draw("Score", (80, 180), surface) - TextGenerator.draw(score, (80, 200), surface) - TextGenerator.draw("Lines " + lines, (300, 40), surface) - TextGenerator.draw("Next", (600, 120), surface) - TextGenerator.draw("LVL " + level, (600, 220), surface) + TextGenerator.draw("Top", self._top_label_pos, surface) + TextGenerator.draw("000000", self._top_value_pos, surface) + TextGenerator.draw("Score", self._score_label_pos, surface) + TextGenerator.draw(score, self._score_value_pos, surface) + TextGenerator.draw("Lines " + lines, self._lines_label_pos, surface) + TextGenerator.draw("Next", self._next_label_pos, surface) + TextGenerator.draw("LVL " + level, self._level_label_pos, surface) def update(self, elapsed_time: int) -> None: if self._current_piece: @@ -124,9 +140,10 @@ class SinglePlayerScene(Scene): self._clear_current_piece) else: self._current_piece = self._next_piece - self._current_piece.move((360 - 620, 100 - 160)) # TODO calculate spawn position correctly - self._next_piece = PieceGenerator.get_piece((620, 160)) # (360, 100) - if self._stack and self._current_piece.collide(self._stack): # TODO game over redo + self._current_piece.move(self._spawn_piece_shift) + self._next_piece = PieceGenerator.get_piece(self._next_piece_pos) + # TODO create game over scene + if self._stack and self._current_piece.collide(self._stack): pygame.quit() sys.exit() @@ -140,8 +157,7 @@ class SinglePlayerScene(Scene): SoundManager.play_level_up_sfx() def _get_level(self) -> int: - lines_per_level = ConfigurationManager.get("engine", "lines-per-level") - return 0 if not self._stack else self._stack.total_lines // lines_per_level + return 0 if not self._stack else self._stack.total_lines // self._lines_per_level def _clear_current_piece(self) -> None: self._current_piece = None