public void Next(ushort[] state) { this.state = state; explorer.ApplyState(state); if (!FillStatesNew()) { return; } FillAvaliable(); }
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)); } }