示例#1
0
        // 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);
        }
示例#2
0
        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();
            }
        }