Ejemplo n.º 1
0
        private static PuzzlePiece.Border GetFlippedBorder(PuzzlePiece.Border border)
        {
            if (border == PuzzlePiece.Border.None)
            {
                return(border);
            }

            var id = (int)border > 3 ? (int)border - 4 : (int)border + 4;

            return((PuzzlePiece.Border)id);
        }
Ejemplo n.º 2
0
        private static PuzzlePiece FindConnectingPieceByOneSideAndPlaceInCorrectPosition(IEnumerable <PuzzlePiece> piecesLeft, PuzzlePiece.Border borderToMatch, short idToMatch)
        {
            var connectingPiece      = piecesLeft.Single(p => p.BorderIds.Contains(idToMatch));
            var flippedBorderToMatch = GetFlippedBorder(borderToMatch);

            while (connectingPiece.GetBorderId(borderToMatch) != idToMatch && connectingPiece.GetBorderId(flippedBorderToMatch) != idToMatch)
            {
                connectingPiece.RotateRight();
            }

            if (connectingPiece.GetBorderId(borderToMatch) != idToMatch)
            {
                if (borderToMatch == PuzzlePiece.Border.Left || borderToMatch == PuzzlePiece.Border.Right)
                {
                    connectingPiece.MirrorVertical();
                }
                else
                {
                    connectingPiece.MirrorHorizontal();
                }
            }

            return(connectingPiece);
        }