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