feat: add soft drop and exit on full well
This commit is contained in:
25
Tetris.py
25
Tetris.py
@@ -41,6 +41,8 @@ class Tetris:
|
|||||||
pygame.display.set_caption(win_title)
|
pygame.display.set_caption(win_title)
|
||||||
pygame.display.set_icon(loaded_icon)
|
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"]
|
main_music_file = ConfigurationManager.configuration["sound"]["main-music"]
|
||||||
self.main_music.set_volume(0.7) # TODO add volume to the config
|
self.main_music.set_volume(0.7) # TODO add volume to the config
|
||||||
self.main_music.play(mixer.Sound(main_music_file), -1)
|
self.main_music.play(mixer.Sound(main_music_file), -1)
|
||||||
@@ -54,6 +56,9 @@ class Tetris:
|
|||||||
self.current_piece.update(elapsed_time, self)
|
self.current_piece.update(elapsed_time, self)
|
||||||
else:
|
else:
|
||||||
self.current_piece = PieceGenerator.get_piece((360, 100)) # TODO calculate spawn position
|
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:
|
if self.stack:
|
||||||
self.stack.update(elapsed_time)
|
self.stack.update(elapsed_time)
|
||||||
@@ -84,11 +89,21 @@ class Tetris:
|
|||||||
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_DOWN:
|
if event.key == pygame.K_DOWN:
|
||||||
self.current_piece.move((0, self.tile_size))
|
self.is_pressing_down = True
|
||||||
if self.well and self.current_piece.collide(self.well):
|
if self.current_piece:
|
||||||
self.current_piece.revert()
|
self.current_piece.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8
|
||||||
if self.stack and self.current_piece.collide(self.stack):
|
self.current_piece.set_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8
|
||||||
self.current_piece.revert()
|
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:
|
def draw(self) -> None:
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ sound:
|
|||||||
engine:
|
engine:
|
||||||
fps: 60
|
fps: 60
|
||||||
tile-size: 20
|
tile-size: 20
|
||||||
|
piece-gravity-time: 400
|
||||||
|
piece-set-time: 600
|
||||||
|
|
||||||
color:
|
color:
|
||||||
window-bg: "#000000"
|
window-bg: "#000000"
|
||||||
|
|||||||
@@ -11,16 +11,17 @@ from util.ConfigurationManager import ConfigurationManager
|
|||||||
https://tetris.fandom.com/wiki/Tetromino
|
https://tetris.fandom.com/wiki/Tetromino
|
||||||
'''
|
'''
|
||||||
class Piece(Entity):
|
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):
|
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.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_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
|
||||||
@@ -32,20 +33,20 @@ class Piece(Entity):
|
|||||||
stack = tetris.stack
|
stack = tetris.stack
|
||||||
|
|
||||||
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
||||||
if self.elapsed_time >= Piece.GRAVITY and self.piece_set_time == 0:
|
if self.elapsed_time >= self.gravity_time and self.current_set_time == 0:
|
||||||
self.elapsed_time -= Piece.GRAVITY
|
self.elapsed_time = 0
|
||||||
|
|
||||||
self.move((0, tile_size))
|
self.move((0, tile_size))
|
||||||
if well and self.collide(well) or stack and self.collide(stack):
|
if well and self.collide(well) or stack and self.collide(stack):
|
||||||
self.revert()
|
self.revert()
|
||||||
self.piece_set_time += elapsed_time
|
self.current_set_time += elapsed_time
|
||||||
|
|
||||||
if self.piece_set_time > 0:
|
if self.current_set_time > 0:
|
||||||
self.piece_set_time += elapsed_time
|
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.__play_piece_set_sound()
|
||||||
self.piece_set_time = 0
|
self.current_set_time = 0
|
||||||
|
|
||||||
stack.add_piece(self)
|
stack.add_piece(self)
|
||||||
tetris.current_piece = None
|
tetris.current_piece = None
|
||||||
|
|||||||
0
util/ControlsManger.py
Normal file
0
util/ControlsManger.py
Normal file
Reference in New Issue
Block a user