public override Node GetNextState(int move) { int x = move / size; int y = move % size; int[,] nextBoard = (int[, ])board.Clone(); PerformFlipsIfLegal(x, y, 1, 0, nextBoard); PerformFlipsIfLegal(x, y, 1, 1, nextBoard); PerformFlipsIfLegal(x, y, 0, 1, nextBoard); PerformFlipsIfLegal(x, y, -1, 1, nextBoard); PerformFlipsIfLegal(x, y, -1, 0, nextBoard); PerformFlipsIfLegal(x, y, -1, -1, nextBoard); PerformFlipsIfLegal(x, y, 0, -1, nextBoard); PerformFlipsIfLegal(x, y, 1, -1, nextBoard); ReversiNode nextState = new ReversiNode(nextBoard, 1 - ActivePlayer); if (nextState.HasLegalMove()) { return(nextState); } ReversiNode alternateNextState = new ReversiNode(nextBoard, ActivePlayer); if (alternateNextState.HasLegalMove()) { return(alternateNextState); } return(nextState); }