refactor: move hardcoded positions into config
This commit is contained in:
12
config.yaml
12
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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user