Esempio n. 1
0
        public void Next(ushort[] state)
        {
            this.state = state;
            explorer.ApplyState(state);

            if (!FillStatesNew())
            {
                return;
            }

            FillAvaliable();
        }
Esempio n. 2
0
        ushort[] BuildPath(ushort[] stateFrom, ushort[] stateTo)
        {
            ushort boxFromXY = stateTo[map.boxesCount];
            ushort boxToXY   = boxFromXY;

            for (int i = 0; i < map.boxesCount; ++i)
            {
                if (Array.BinarySearch(stateFrom, 0, map.boxesCount, stateTo[i]) < 0)
                {
                    boxToXY = stateTo[i];
                    break;
                }
            }

            int boxFromX, boxFromY;
            int boxToX, boxToY;

            map.XY2Pos(boxFromXY, out boxFromX, out boxFromY);
            map.XY2Pos(boxToXY, out boxToX, out boxToY);

            int    playerToX    = (boxFromX << 1) - boxToX;
            int    playerToY    = (boxFromY << 1) - boxToY;
            ushort playerToXY   = (ushort)(playerToX | (playerToY << 8));
            ushort playerFromXY = stateFrom[map.boxesCount];

            if (playerFromXY == playerToXY)
            {
                return new ushort[] { playerToXY }
            }
            ;

            explorer.ApplyState(stateFrom);
            explorer.Explore();

            return(explorer.GetPath(playerToXY));
        }
    }