Функции в С.Возвращаемое значение

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Ромарома
Сообщения: 1
Зарегистрирован: 26 авг 2010, 19:43

Делаю игру xonix и функция по непонятным мне причинам возвращает странное значение.Вот код
Код C

Код: Выделить всё

int Check(xx,yy,x1,x2,y1,y2)
{
        if (b[xx][yy]==1){return 0;};
        if (b[xx][yy]==0) b[xx][yy]=1;
        if (((xx==x1) &&(yy==y1)) || ((xx==x2) &&(yy==y2))){return 1;};
        Check(xx+1,yy,x1,x2,y1,y2);Check(xx-1,yy,x1,x2,y1,y2);Check(xx,yy+1,x1,x2,y1,y2);Check(xx,yy-1,x1,x2,y1,y2);
}
xx и yy координаты откуда идет волна проверки, а x1 y1 x2 y2 координаты 2х врагов, на которых идет проверка.массив b[][] содержит коды клеток, которыми представлено игровое поле.Код 1 соответствует проверенной клетке или границе, которую игрок отрезал.

Функция все время возвращает значение 4377718.Подскажите пожалуйста, в чем может быть дело?
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Ромарома
Функция вроде-бы написано верно, покажите как вы ее вызываете
Приглашаю на свой блог о программировании: pro-prof.com
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

хотя так вернее:

Код: Выделить всё

int Check(xx,yy,x1,x2,y1,y2)
{
if (b[xx][yy]==1){return 0;};
if (b[xx][yy]==0) b[xx][yy]=1;
if (((xx==x1) &&(yy==y1)) || ((xx==x2) &&(yy==y2))){return 1;};
return Check(xx+1,yy,x1,x2,y1,y2)||Check(xx-1,yy,x1,x2,y1,y2)||Check(xx,yy+1,x1,x2,y1,y2)||Check (xx,yy-1,x1,x2,y1,y2);
}
И еще надо добавить проверку выхода за пределы массива b[][]
Приглашаю на свой блог о программировании: pro-prof.com
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

вместо проверки можно заполнить массив по краям единицами:
11111111
10000001
10000001
11111111
Приглашаю на свой блог о программировании: pro-prof.com
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Все очертпросто. Вы банально не возвращаете результат.
После строки:
Check(xx+1,yy,x1,x2,y1,y2);Check(xx-1,yy,x1,x2,y1,y2);Check(xx,yy+1,x1,x2,y1,y2);Check (xx,yy-1,x1,x2,y1,y2);
отсутствует оператор return
Поэтому возвращается "мусорное" значение.
Ответить