feat: add soft drop and exit on full well

This commit is contained in:
2021-06-10 18:25:54 -04:00
parent 65f2d299b9
commit 4cd6b606f3
4 changed files with 35 additions and 17 deletions

View File

@@ -41,6 +41,8 @@ class Tetris:
pygame.display.set_caption(win_title)
pygame.display.set_icon(loaded_icon)
self.is_pressing_down = False # TODO move into control util later
main_music_file = ConfigurationManager.configuration["sound"]["main-music"]
self.main_music.set_volume(0.7) # TODO add volume to the config
self.main_music.play(mixer.Sound(main_music_file), -1)
@@ -54,6 +56,9 @@ class Tetris:
self.current_piece.update(elapsed_time, self)
else:
self.current_piece = PieceGenerator.get_piece((360, 100)) # TODO calculate spawn position
if self.stack and self.current_piece.collide(self.stack):
pygame.quit()
sys.exit()
if self.stack:
self.stack.update(elapsed_time)
@@ -84,11 +89,21 @@ class Tetris:
if self.stack and self.current_piece.collide(self.stack):
self.current_piece.revert()
if event.key == pygame.K_DOWN:
self.current_piece.move((0, self.tile_size))
if self.well and self.current_piece.collide(self.well):
self.current_piece.revert()
if self.stack and self.current_piece.collide(self.stack):
self.current_piece.revert()
self.is_pressing_down = True
if self.current_piece:
self.current_piece.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8
self.current_piece.set_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8
if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN:
self.is_pressing_down = False
if self.current_piece:
self.current_piece.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"]
self.current_piece.set_time = ConfigurationManager.configuration["engine"]["piece-set-time"]
if self.is_pressing_down:
if self.current_piece:
self.current_piece.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8
self.current_piece.set_time = ConfigurationManager.configuration["engine"]["piece-set-time"] / 8
def draw(self) -> None:

View File

@@ -12,6 +12,8 @@ sound:
engine:
fps: 60
tile-size: 20
piece-gravity-time: 400
piece-set-time: 600
color:
window-bg: "#000000"

View File

@@ -12,15 +12,16 @@ from util.ConfigurationManager import ConfigurationManager
'''
class Piece(Entity):
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):
super().__init__(self.__get_points(shape, position), color, border_color)
self.inner_border_color = inner_border_color
self.center = self.__get_center(shape, position)
self.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"]
self.current_gravity_time = 0
self.set_time = ConfigurationManager.configuration["engine"]["piece-set-time"]
self.current_set_time = 0
self.piece_set_sound = mixer.Channel(2)
self.piece_set_time = 0
self.previous_points = None
self.previous_center = None
@@ -32,20 +33,20 @@ class Piece(Entity):
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
if self.elapsed_time >= self.gravity_time and self.current_set_time == 0:
self.elapsed_time = 0
self.move((0, tile_size))
if well and self.collide(well) or stack and self.collide(stack):
self.revert()
self.piece_set_time += elapsed_time
self.current_set_time += elapsed_time
if self.piece_set_time > 0:
self.piece_set_time += elapsed_time
if self.current_set_time > 0:
self.current_set_time += elapsed_time
if self.piece_set_time >= Piece.PIECE_SET:
if self.current_set_time >= self.set_time:
self.__play_piece_set_sound()
self.piece_set_time = 0
self.current_set_time = 0
stack.add_piece(self)
tetris.current_piece = None

0
util/ControlsManger.py Normal file
View File