Программируем

Слегка переписал секцию enter


int wm=STD_LABIRINT_WIDTH,hm=STD_LABIRINT_HEIGHT;
makeMaze(wm,hm,&mazeid,NULL,-1,-1,data);
if (userList[userid].return_map) delete [] userList[userid].return_map;

userList[userid].return_map = new string[wm*hm];

, а еще само-собой в структуре TUser добавил string *return_map.

Также изменил код в секции getmap


int gx=params->Branch("x")->Integer(),gy=params->Branch("y")->Integer();
int mazeid = userList[userid].mazeid;
char *map = new char[SEE_RADIUS*60];
int x,y;
lockMutex(&gameMutex);
getCreaturePosition(&mazeList[mazeid],userid,&x,&y);
bool ok=false;
if (gx*xy<mazeList[mazeid].w*mazeList[mazeid].h && gx*gy>0)
if (userList[userid].return_map[gy*mazeList[mazeid].width+gx].return_map!="")
{
strcpy(map,userList[userid].return_map[gy*mazeList[mazeid].width+gx].return_map.c_str());
ok=true;
}

if (!ok)
{
ok=packMap(mazeid,x,y,map);
if (ok) userList[userid].return_map[y*mazeList[mazeid].w+x].return_map = map;
}

if (ok)
{
char *temp = new char[strlen(map)+90];
sprintf(temp,"http_done=1&http_data=error|0|mapdata|%s|",map);

out=temp;
delete [] temp;
}

Суть кода - проверяем есть ли ранее выданная карта по координатам x,y - если есть то выдаем ее, иначе - выдаем карты на текущие координаты, т.е. игнорируем приходящие параметры x и y.
Собственно может и не нужно было так усложнять, но это сделано для того, чтобы "умники" не смогли открыть карту несколькими стороними запросами. А возвращать уже открытую нужно для проигрования (рефреш) лабиринта с начала.

Разделил секцию goto и makeaction, для того чтобы делать несколько ходов за раз.
Ходы делаются в цикле пока makeAction возвращает true, а оно там следит и за AP и за границами.

Пытаюсь нарисовать "пол"