Пример #1
0
        public bool MatchCard(WitchCard cardToMatch, Direction directionToMatch)
        {
            if (cardToMatch == null)
            {
                return(true);
            }

            CardEdge edgeToCompare = null;

            switch (directionToMatch)
            {
            case Direction.Down:
                edgeToCompare = cardToMatch.Edges[Direction.Up];
                break;

            case Direction.Up:
                edgeToCompare = cardToMatch.Edges[Direction.Down];
                break;

            case Direction.Right:
                edgeToCompare = cardToMatch.Edges[Direction.Left];
                break;

            case Direction.Left:
                edgeToCompare = cardToMatch.Edges[Direction.Right];
                break;
            }

            return(Edges[directionToMatch].WitchColor == edgeToCompare.WitchColor &&
                   Edges[directionToMatch].WitchPart != edgeToCompare.WitchPart);
        }
Пример #2
0
        private void innerSolver(List <WitchCard> leftCards, Board board)
        {
            if (board.IsBoardCompleted())
            {
                print(board);
                return;
            }

            for (int i = 0; i < leftCards.Count; i++)
            {
                WitchCard chosenCard = leftCards[i];
                leftCards.RemoveAt(i);

                for (int j = 0; j < WitchCard.MAX_ROTATIONS; j++)
                {
                    if (board.TryAddNextCard(chosenCard))
                    {
                        innerSolver(leftCards, board);
                        board.RemoveLastCardFromBoard();
                    }

                    chosenCard.RotateCardClockwise();
                }

                leftCards.Insert(0, chosenCard);
            }
        }