ИИ. Обход территории. Дополнение

Вообще думал сам алгоритм патрулирования при открытой уже карты - легкое дело, но чуть-чуть застопорился.
Потому напишу алгоритм тут.

Для флага и индекса использую одну переменную в структуре TMazeCreature - это int cPoint.
В самом начале переменная равная 0 и означает, что существо (моб) прошел(узнал) не всю карту.
В случае когда карта пройдена выполняется инструкции:

if (!c->cPoint)
{
wPoint pt;
pt.x=c->x;
pt.y=c->y;
c->checkPoint.push_back( pt);
c->cPoint=(1<<1) + 0x1 + ((c->checkPoint.size()-1)<<2);
}

Последнюю точку(позицию) заносим как последнюю точку маршрута, флаг cPoint инициализируем (первый бит - просто включение, второй - направление обхода 0 - прямой обход, по возрастанию; 1 - обратный, по убыванию)

char d = c->cPoint & 0x2 ? 1:0;
int ind = c->cPoint>>2;
bool square=fale;
for(int i=0;i<c->checkPoint.size();i++)
if (c->checkPoint[i].x == c->x && c->checkPoint[i].y == c->y) {square=true;break;}

if (!d) //прямое перемещение
{
if (square) ind++;
*xx=c->checkPoint[ind].x;
*yy=c->checkPoint[ind].y;
if (ind==c->checkPoint.size()-1) d=1;
}
else //обратное перемещение
{
if (square) ind--;
*xx=c->checkPoint[ind].x;
*yy=c->checkPoint[ind].y;
if (ind==0)
d=0;
}

c->cPoint = 0x01 + (d<<1) + (ind<<2);

Затем уменьшаем или увеличиваем индекс точки маршрута, в зависимости от направления движение.

В переменные xx и yy записываем координаты куда идти.