def handle_user_input(self): direction = None key_pressed = self.window.getch() if key_pressed in (ord('j'), ord('J'), curses.KEY_LEFT): direction = Direction.Left elif key_pressed in (ord('l'), ord('L'), curses.KEY_RIGHT): direction = Direction.Right elif key_pressed in (ord('i'), ord('I'), curses.KEY_UP): direction = Direction.CCW elif key_pressed in (ord('k'), ord('K'), curses.KEY_DOWN): direction = Direction.CW elif key_pressed in (ord('q'), ord('Q')): self.view_modified = True game.switch_to_state("paused") elif key_pressed == ord(' '): self.drop_current_piece() if direction is not None: if direction == Direction.CCW or direction == Direction.CW: if self.board.are_valid_coordinates( self.current_piece.rotate_result(direction)): renderer.clear_tetromino(self.current_piece, self.board_window) self.view_modified = True self.current_piece.rotate(direction) else: if self.board.are_valid_coordinates( self.current_piece.move_result(direction)): renderer.clear_tetromino(self.current_piece, self.board_window) self.view_modified = True self.current_piece.move(direction)
def update(self, delta): self.elapsed_time += delta self.handle_user_input() if self.elapsed_time >= self.drop_time: if self.board.are_valid_coordinates( self.current_piece.move_result(Direction.Down)): renderer.clear_tetromino(self.current_piece, self.board_window) self.current_piece.move(Direction.Down) else: renderer.clear_tetromino(self.next_piece, self.info_window) try: self.board.lock_tetromino(self.current_piece) self.current_piece = self.next_piece self.current_piece.set_location(5, 20) self.next_piece = random_tetromino(0, 0) rows_removed = self.board.clear_full_rows() if rows_removed: self.lines_to_next_level -= rows_removed self.score += sum(range(rows_removed + 1)) * 100 if self.lines_to_next_level <= 0: self.score += 1000 * self.level self.lines_to_next_level = 15 self.level += 1 self.drop_time *= .75 except RuntimeError: game.add_state_and_switch("game over", GameOverState(self.window, self.score)) self.view_modified = True self.elapsed_time -= self.drop_time
def drop_current_piece(self): self.view_modified = True renderer.clear_tetromino(self.current_piece, self.board_window) while self.board.are_valid_coordinates( self.current_piece.move_result(Direction.Down)): self.current_piece.move(Direction.Down)