Ejemplo n.º 1
0
        void AddNewState(int index, int x, int y, int dx, int dy)
        {
            int accessX = x - dx;
            int accessY = y - dy;

            int boxX = x + dx;
            int boxY = y + dy;

            ushort[] newState = new ushort[map.boxesCount + 1];

            Array.Copy(state, newState, map.boxesCount);
            newState[map.boxesCount] = newState[index];
            newState[index]          = map.Pos2XY(boxX, boxY);
            Array.Sort(newState, 0, map.boxesCount);

            newStates[newStatesCount] = newState;
            accessXYs[newStatesCount] = map.Pos2XY(accessX, accessY);

            ++newStatesCount;
        }
Ejemplo n.º 2
0
        void ExploreNext(int x, int y, ushort prevXY, int newDist)
        {
            if (x < 0 || x >= map.width || y < 0 || y >= map.height)
            {
                return;
            }

            int pos = map.XY2Pos(x, y);

            if ((cells[pos] & O_UNEXPLORABLE_MASK) != 0)
            {
                return;
            }

            cells[pos]    |= O_EXPLORED;
            distance[pos]  = newDist;
            backtrace[pos] = prevXY;

            explore.Enqueue(map.Pos2XY(x, y));
        }