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; } } }