C++

Модификации

За вчера/сегодня полностью переписали Flash магазина, теперь покупку/продажу можно делать массово и даже одновременно, сначала прицениваясь, а потом одной кнопкой подтверждать.

магазин, лабиринты зыби, 7maze.ru

Красоту потом дорисуют - пока костяк.
В серверной части почти никаких изменений (ну кроме того что теперь обрабатывается скопом сразу).

Опять цвета и как можно все испортить

Делаем новый чат и сейчас понадобились цвета, вообще история с чатом и цветами имеет самые долгие корни, но как выяснилось – увы, но это не то что надо.

Цвета – были ужасно похожими очень многие, а потому была составлена вручную палитра цветов (пока 50 штук), для героев.
Было сделана передача в клиент, цвета героя (определяется порядковым номером в лабиринте, тупо позицией в векторе m->creatures.

Передача осуществляется как и другие параметры, при запросе getinfo.

Арена и воины

Доводим до ума арену, решил уменьшить ее размер (10x10) и сделать ее фиксированной вот, такого вида:
unsigned char pack[13]={255,7,88,111,133,149,86,90,104,191,1,254,7};

Собственно это сжатая на биты карта, для ее отображения небольшой код:
int TMap::MakeMapFromPack(unsigned char *pack)
{
int l =w*h;
int size_pack = l/8;
if (l % 8) size_pack++;
for(int j=0,i=0;i<size_pack;i++)
for(int k=0;k<8;k++)
if (j<l) Map[j++] = pack[i] & (1 << k);
}

О правильном названии функций

Делаю я арену, и натыкаюсь в одном месте на вызов не существующей функции checkMaze - подумал, нафик я ее поставил, тем более ее еще и нет, есть функция checkMazes - которая в фоне проверяет ходы, крутит таймер и все такое.
Закоментил, с надписью "что не знаю что такое".

Делаем "Лабиринт старейшины"

Это тестовый лабиринт, который создается пока - при вызове ссылки из города.
При вызове урла ?mazeid=new_test_arena создается лабиринт, получается его id и идет редирект на ?mazeid=XXXX
char data[7];
makeMaze(STD_LABIRINT_WIDTH,STD_LABIRINT_HEIGHT,&mazeid,NULL,-1,-1,data);
mazeList[mazeid].lastTime = time(0);
mazeList[mazeid].currentId = -1;
TMazeCreature c;
c.Type = 0;
c.Id = userid;
c.x = data[2];
c.y = data[3];
c.HP=1; //тут иницилизация из TUser
mazeList[mazeid].creatures.push_back(c);

Баги vs кривые руки

Два дня бился на багами, первый баг был, что после регистрации срабатывал редирект на /maze, хотя старт был явно из города и должна грузиться страница /game.
Затем пронализировал код и нашел ошибку
TUser u;
findCity(CITY_DATOR,&u.wx,&u.wy);
u.nick = l;
u.pass = p1;
u.id = max;
u.color = get_color(max);
u.email = email;
userList[max] = u;

.mazeid не иницилизировалась и была не пуста, а в /game - проверка на эту переменную и соотвественно как результат - редирект.

Регистрация в игре

Итак уже сделаны первые наброски, первый наш экран - экран привествия и заодно логгона, с него можно уйти на регистрацию или на вход в игру.
Первым делом перепишем код проверк пользователя (там любой новый логин безусловно регистрировался)
int checkUser(char *s,char *p)
{

for(map::iterator i=userList.begin();i!=userList.end();i++)
{
if (i->second.nick == s)
if (i->second.pass==string(p))
return i->second.id;
else
return -2;
}
return -1;
}

Пока оставим, что пароль у нас храниться в текстовом (plain text) виде.

RSS-материал