public void FindAllPossibleMoves(BoardLogic startingBoardLogic, int movesAhead) { BoardLogic boardLogic = startingBoardLogic.CopyBoard(); foreach (var checker in boardLogic.Checkers) { if (checker.Color == boardLogic.Turn) { FindAllPossibleMovesForChecker(boardLogic, checker, movesAhead); } } }
public void FindAllPossibleMovesForChecker(BoardLogic startingBoardLogic, Checker checker, int movesAhead) { Vector2Int startingCoords = new Vector2Int(checker.PositionX, checker.PositionY); int k; if (checker.isQueen == true) { k = 7; } else if (startingBoardLogic.SearchForNormalAtackForChecker(startingBoardLogic.Checkers, checker) == true) { k = 2; } else { k = 1; } BoardLogic boardLogic = startingBoardLogic.CopyBoard(); checker = boardLogic.FindChecker(boardLogic.Checkers, checker.PositionX, checker.PositionY); for (int x = -k; x <= k; x += 1) { for (int y = -k; y <= k; y += 1) { if (x == 0 || y == 0) { continue; } if (Math.Abs(x) - Math.Abs(y) != 0) { continue; } int newX = checker.PositionX + x; int newY = checker.PositionY + y; if (newX < 0 || newX > 7 || newY < 0 || newY > 7) { continue; } if (boardLogic.MoveChecker(boardLogic.Checkers, checker, newX, newY) == true) { if (newX == 5 && newY == 2) { } MoveTree movement = CreateMoveTreeNode(boardLogic, checker, movesAhead, startingCoords, k); movement.EvaluateMovement(); Moves.Add(movement); //next moves if (movement.MovesAhead > 0) { movement.FindAllPossibleMoves(boardLogic, movement.MovesAhead); } //cleanup boardLogic = startingBoardLogic.CopyBoard(); checker = boardLogic.FindChecker(boardLogic.Checkers, startingCoords.x, startingCoords.y); } } } }