Esempio n. 1
0
        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);
        }