// returns the fallen distance of the piece public int Drop(Tetrimino next) { int distance = Board.DropDistance(Piece); // TODO: check this again! if (distance < 0 && Board.Intersects(Piece)) { throw new GameOverException(); } // let piece fall Piece.Fall(distance); Board.Place(Piece); Piece = null; // remove lines int lines = Board.RemoveLines(); Lines += lines; // calculate score Score += TetrisScore.GetSoftdropScore(distance); Score += TetrisScore.GetLineScore(lines, Level); if (NextPiece.HasValue) { // TODO: only generate new piece if this is explicitly wanted! Piece = new Piece(NextPiece.Value); NextPiece = next; } return(distance); }
internal void DropUnchecked(int distance) { // let piece fall Piece.Fall(distance); Board.PlaceUnchecked(Piece); Pieces.Push(new Piece(Piece)); // we need to remember the dropped pieces for the landing height feature (heuristic) Piece = null; // remove lines int lines = Board.RemoveLines(); Lines += lines; // calculate score Score += TetrisScore.GetSoftdropScore(distance); Score += TetrisScore.GetLineScore(lines, Level); if (NextPiece.HasValue) { Piece = new Piece(NextPiece.Value); NextPiece = Tetriminos.GetRandom(); } }