Доброго времени суток, all.
На днях начал писать мини-движок для игры в шашки/шахматы/нарды/... (в-общем, любые игры, использующие поле). Всё бы ничего, дело продвигалось, но возникла проблема, самостоятельно которую решить у меня так и не получилось.
Код:
// Объявляем свою структуру для игровых объектов со ссылками на предыдущий и следующий
typedef struct CGameObject* GameObjectPtr;
typedef struct CGameObject
{
int x;
int y;
GameObjectPtr prev;
GameObjectPtr next;
} GameObject;
// ----------------------------------
// Сравниваем x и y двух объектов. При совпадении, возвращаем указатель на первый
static GameObjectPtr comparexy(GameObjectPtr go, GameObjectPtr goxy)
{
if((go->x == goxy->x) && (go->y == goxy->y))
{
return go;
}
return NULL;
}
// Собственно, итератор с callback-функцией, принимающей два параметра - текущий объект и дополнительный.
GameObjectPtr iterate(GameObjectPtr begin, GameObjectPtr callback(GameObjectPtr, GameObjectPtr), GameObjectPtr additional)
{
GameObjectPtr gocur = begin, goret = NULL;
while(gocur->next != NULL)
{
gocur = gocur->next;
if((goret = callback(gocur, additional)) != NULL)
{
return goret;
}
}
return NULL;
}
// Функция поиска объекта по его x и y
GameObjectPtr gofindbyxy(GameObjectPtr begin, int x, int y)
{
GameObjectPtr gonew = goalloc(NULL);
gonew->x = x;
gonew->y = y;
return iterate(begin, comparexy, gonew);
}
При вызове gofindbyxy(begin, 1, 1); объекта, который существует он просто не находит. :(
Не знаю, где собака порылась, не могу найти ошибку, если надо могу привести код аллокатора и деструктора.
---
С Уважением,