def _freeze_faller(gamestate) -> None: '''freezes faller, changes cell attributes and checks gameover''' faller_cells = Helper._get_faller_cells(gamestate) for cell in faller_cells: cell.make_frozen_cell(cell._display) Match.match_cells(gamestate) if not Match.matches(gamestate): Helper.check_game_over(gamestate) Faller._faller_gone(gamestate)
def drop_faller(gamestate) -> None: '''drops faller one row if row is empty, faller landed if empty under new faller, else freeze faller''' faller_cells = Helper._get_faller_cells(gamestate) last_faller_cell = faller_cells[2] if Helper._empty_under_cell(gamestate, last_faller_cell): gamestate._last_faller_row += 1 for cell in faller_cells[::-1]: gamestate._board[cell._row+1][cell._col].make_faller_cell(cell._display) cell.make_empty_cell() if Faller._landed(gamestate): Faller._assert_landed_cells(gamestate) else: Faller._freeze_faller(gamestate)
def move_faller(gamestate, direction: int) -> None: '''moves faller left or right''' faller_cells = Helper._get_faller_cells(gamestate) bot_cell = faller_cells[2] if Faller._faller_can_move(gamestate, bot_cell, direction): if direction == MOVE_RIGHT: gamestate._faller_col += 1 else: gamestate._faller_col -= 1 for cell in faller_cells[::-1]: gamestate._board[cell._row][gamestate._faller_col].make_faller_cell(cell._display) cell.make_empty_cell() if Faller._landed(gamestate): Faller._assert_landed_cells(gamestate)
def rotate_faller(gamestate) -> None: '''rotates the faller in place''' faller_cells = Helper._get_faller_cells(gamestate) top_cell_color = faller_cells[0]._display top_cell_row = faller_cells[0]._row mid_cell_row = faller_cells[1]._row mid_cell_color = faller_cells[1]._display bot_cell_color = faller_cells[2]._display bot_cell_row = faller_cells[2]._row if Faller._landed(gamestate): gamestate._board[bot_cell_row][gamestate._faller_col].make_landed_cell(top_cell_color) gamestate._board[mid_cell_row][gamestate._faller_col].make_landed_cell(bot_cell_color) gamestate._board[top_cell_row][gamestate._faller_col].make_landed_cell(mid_cell_color) else: gamestate._board[bot_cell_row][gamestate._faller_col].make_faller_cell(top_cell_color) gamestate._board[mid_cell_row][gamestate._faller_col].make_faller_cell(bot_cell_color) gamestate._board[top_cell_row][gamestate._faller_col].make_faller_cell(mid_cell_color)
def _draw_faller_cells(self) -> None: '''draws all faller cells''' faller_cells = Helper._get_faller_cells(self._state) for cell in faller_cells: self._place_cell_in_board(cell)
def _landed(gamestate) -> bool: '''returns true if faller landed''' new_last_faller_cell = Helper._get_faller_cells(gamestate)[2] empty_under_cell = Helper._empty_under_cell(gamestate, new_last_faller_cell) return not empty_under_cell
def _assert_landed_cells(gamestate) -> None: '''changes cell attributes to landed''' faller_cells = Helper._get_faller_cells(gamestate) for cell in faller_cells: cell.make_landed_cell(cell._display)