Beispiel #1
0
        public void ApplyGravity()
        {
            CheckGameState();
            var nextPiece = activePiece.MoveDown();

            if (Field.CanPlace(nextPiece))
            {
                activePiece = nextPiece;
            }
            else if (!Field.Contains(activePiece))
            {
                // Note that this is not a Tetris Guideline compatible "lock out" condition.
                // In our case, the game ends even if the piece is partially visible.
                // See https://tetris.wiki/Top_out
                IsOver = true;
            }
            else
            {
                Field.Place(activePiece);
                var numClearedLines = Field.ClearLines();
                if (numClearedLines > 0)
                {
                    Stats.Clear(numClearedLines);
                }
                nextPiece = NewPiece();
                if (Field.CanPlace(nextPiece))
                {
                    activePiece = nextPiece;
                }
                else
                {
                    // The "block out" condition.
                    IsOver = true;
                }
            }
        }