static int CheckTwoSquares(GameBoard board, GameBoard.MinMax child_type, Colour player_colour, int x, int y, int a, int b, int c, int d, int moves) { //check boundary of array if (a >= 0 && a <= 3 && b >= 0 && b <= 3) { //check adjacent square is empty if (board.ReturnPosition(a, b).stones == 0 || board.ReturnPosition(a, b).colour == player_colour) { if (c >= 0 && c <= 3 && d >= 0 && d <= 3) { if (board.ReturnPosition(c, d).stones == 0 || board.ReturnPosition(c, d).colour == player_colour) { //new child GameBoard child = new GameBoard(child_type, board); int stones = child.ReturnPosition(x, y).stones; child.SetStones(x, y, 0, player_colour); int original_stones = child.ReturnPosition(a, b).stones; child.SetStones(a, b, original_stones + 1, player_colour); //first square stones--; //one stone moved into a,b original_stones = child.ReturnPosition(c, d).stones; //rest of stones moved into c,d child.SetStones(c, d, stones + original_stones, player_colour); //second square //add child to parent board.AddChildren(child); //displayBoard(child); moves++; }else { moves = CheckAdjacentMove(board, child_type, player_colour, x, y, a, b, moves); } } else { moves = CheckAdjacentMove(board, child_type, player_colour, x, y, a, b, moves); } }else { moves = CheckAdjacentMove(board, child_type, player_colour, x, y, a, b, moves); } } return moves; }
static int CheckAdjacentMove(GameBoard board, GameBoard.MinMax child_type, Colour player_colour, int x, int y, int a, int b, int moves) { //check boundary of array if (a >= 0 && a <= 3 && b >= 0 && b <= 3) { //check adjacent square is empty if (board.ReturnPosition(a, b).stones == 0 || board.ReturnPosition(a, b).colour == player_colour) { //new child GameBoard child = new GameBoard(child_type, board); int stones = child.ReturnPosition(x, y).stones; child.SetStones(x, y, 0, player_colour); int original_stones = child.ReturnPosition(a, b).stones; //adjacent square child.SetStones(a, b, stones+original_stones, player_colour); //add child to parent board.AddChildren(child); //displayBoard(child); moves++; } } return moves; }