refactor: move hardcoded positions into config

This commit is contained in:
2021-07-08 14:35:17 -04:00
parent 46fb038b52
commit 4e1c3a7eee
2 changed files with 56 additions and 28 deletions

View File

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

View File

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