private bool DoesImmobileCaptureResolveOrPreventCheck(List <PieceEV> towerPieces, int tierIndex, IEntitiesDB entitiesDB) { bool returnValue = false; PreviousTowerState previousState = CreatePreviousState(towerPieces); TurnEV currentTurn = turnService.GetCurrentTurnEV(entitiesDB); PieceEV commander = pieceFindService.FindCommander(currentTurn.TurnPlayer.PlayerColor, entitiesDB); PieceEV?capturedPiece = TempImmobileCapture( towerPieces, tierIndex, currentTurn.TurnPlayer.PlayerColor, entitiesDB); // Betrayal did not cause two file move violation if (capturedPiece.HasValue) { returnValue = !checkService.IsCommanderInCheck(currentTurn.TurnPlayer.PlayerColor, entitiesDB); if (!returnValue && checkService.IsForcedRearrangementPossible(capturedPiece.Value)) { returnValue = DoesForcedRearrangementResolveOrPreventCheck(capturedPiece.Value, commander, towerPieces, entitiesDB); } } RestorePreviousState(previousState, entitiesDB); return(returnValue); }