feat: add set piece logic
This commit is contained in:
@@ -51,7 +51,9 @@ class Tetris:
|
|||||||
elapsed_time = self.clock.tick(self.fps)
|
elapsed_time = self.clock.tick(self.fps)
|
||||||
|
|
||||||
if self.current_piece:
|
if self.current_piece:
|
||||||
self.current_piece.update(elapsed_time, self.well, self.stack)
|
self.current_piece.update(elapsed_time, self)
|
||||||
|
else:
|
||||||
|
self.__generate_piece((300, 100))
|
||||||
|
|
||||||
if self.stack:
|
if self.stack:
|
||||||
self.stack.update(elapsed_time)
|
self.stack.update(elapsed_time)
|
||||||
@@ -87,11 +89,6 @@ class Tetris:
|
|||||||
self.current_piece.revert()
|
self.current_piece.revert()
|
||||||
if self.stack and self.current_piece.collide(self.stack):
|
if self.stack and self.current_piece.collide(self.stack):
|
||||||
self.current_piece.revert()
|
self.current_piece.revert()
|
||||||
if event.key == pygame.K_z:
|
|
||||||
if self.current_piece:
|
|
||||||
self.current_piece.play_piece_set_sound()
|
|
||||||
self.stack.add_piece(self.current_piece)
|
|
||||||
self.__generate_piece((300, 100))
|
|
||||||
|
|
||||||
|
|
||||||
def draw(self) -> None:
|
def draw(self) -> None:
|
||||||
|
|||||||
@@ -13,28 +13,42 @@ from util.ConfigurationManager import ConfigurationManager
|
|||||||
class Piece(Entity):
|
class Piece(Entity):
|
||||||
|
|
||||||
GRAVITY = 300 # A move down every 300 ms
|
GRAVITY = 300 # A move down every 300 ms
|
||||||
|
PIECE_SET = 750
|
||||||
|
|
||||||
def __init__(self, shape: Tuple, position: Tuple, color: str, inner_border_color: str, border_color: str):
|
def __init__(self, shape: Tuple, position: Tuple, color: str, inner_border_color: str, border_color: str):
|
||||||
super().__init__(self.__get_points(shape, position), color, border_color)
|
super().__init__(self.__get_points(shape, position), color, border_color)
|
||||||
self.inner_border_color = inner_border_color
|
self.inner_border_color = inner_border_color
|
||||||
self.center = self.__get_center(shape, position)
|
self.center = self.__get_center(shape, position)
|
||||||
self.piece_set_sound = mixer.Channel(2)
|
self.piece_set_sound = mixer.Channel(2)
|
||||||
|
self.piece_set_time = 0
|
||||||
|
|
||||||
self.previous_points = None
|
self.previous_points = None
|
||||||
self.previous_center = None
|
self.previous_center = None
|
||||||
|
|
||||||
def update(self, elapsed_time: int, well: Entity, stack: Entity) -> None:
|
def update(self, elapsed_time: int, tetris) -> None:
|
||||||
super().update(elapsed_time)
|
super().update(elapsed_time)
|
||||||
|
|
||||||
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
well = tetris.well
|
||||||
if self.elapsed_time >= Piece.GRAVITY:
|
stack = tetris.stack
|
||||||
|
|
||||||
|
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
||||||
|
if self.elapsed_time >= Piece.GRAVITY and self.piece_set_time == 0:
|
||||||
self.elapsed_time -= Piece.GRAVITY
|
self.elapsed_time -= Piece.GRAVITY
|
||||||
|
|
||||||
self.move((0, tile_size))
|
self.move((0, tile_size))
|
||||||
if well and self.collide(well):
|
if well and self.collide(well) or stack and self.collide(stack):
|
||||||
self.revert()
|
|
||||||
if stack and self.collide(stack):
|
|
||||||
self.revert()
|
self.revert()
|
||||||
|
self.piece_set_time += elapsed_time
|
||||||
|
|
||||||
|
if self.piece_set_time > 0:
|
||||||
|
self.piece_set_time += elapsed_time
|
||||||
|
|
||||||
|
if self.piece_set_time >= Piece.PIECE_SET:
|
||||||
|
self.__play_piece_set_sound()
|
||||||
|
self.piece_set_time = 0
|
||||||
|
|
||||||
|
stack.add_piece(self)
|
||||||
|
tetris.current_piece = None
|
||||||
|
|
||||||
def draw(self, surface: pygame.Surface) -> None:
|
def draw(self, surface: pygame.Surface) -> None:
|
||||||
super().draw(surface)
|
super().draw(surface)
|
||||||
@@ -89,8 +103,7 @@ class Piece(Entity):
|
|||||||
self.points = self.previous_points
|
self.points = self.previous_points
|
||||||
self.center = self.previous_center
|
self.center = self.previous_center
|
||||||
|
|
||||||
# TODO should be private
|
def __play_piece_set_sound(self) -> None:
|
||||||
def play_piece_set_sound(self) -> None:
|
|
||||||
piece_set_sound_file = ConfigurationManager.configuration["sound"]["piece-set"]
|
piece_set_sound_file = ConfigurationManager.configuration["sound"]["piece-set"]
|
||||||
self.piece_set_sound.play(mixer.Sound(piece_set_sound_file))
|
self.piece_set_sound.play(mixer.Sound(piece_set_sound_file))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user