Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2013, 14:56   #1
GHOST32
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 16
По умолчанию Xonix. Зависание.

Пишу игру Xonix на DevCpp. Игрок должен бегать по полю и отсекать его участки. Поле состоит из клеток, каждой клетке соответствует ячейка двумерного массива. В данный момент я застрял на этапе заливки поля. Алгоритм такой: сначала делим линией поле на 2 части, сравниваем их с помощью рекурсивной функции, а затем закрашиваем меньшую часть опять же с помощью рекурсивной функции.

Выглядит примерно так:

поле вначале
000000
000000
000000
000000

разделили поле на две части
000000
001111
001000
001000

закрасили часть
000000
002222
002222
002222

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


Код:
int CountMass(int Arr[][50], int i, int j)
{
 int x=0; //счетчик клеток
 if(Arr[i][j]==0) //если клетка не закрашена и не выделена
 {
  Arr[i][j]=3  //присваиваем любое значение, чтобы не посчитали повторно
  x++; 
  //уходим в 4 направления
  x += CountMass(Arr,i+1,j);  
  x += CountMass(Arr,i-1,j);
  x += CountMass(Arr,i,j+1);
  x += CountMass(Arr,i,j-1);
  Arr[i][j]=0; // присваиваем изначальное значение клетке, которой присвоили значение 3
 }
 return x; //возвращаем результат
}
Где может быть ошибка?
GHOST32 вне форума Ответить с цитированием
Старый 29.05.2013, 15:52   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от GHOST32 Посмотреть сообщение
Где может быть ошибка?
Выход за пределы поля.
Функция заполнения будет вызываться до бесконечности.

Во вторых, перейдя на клетку скажем выше текущей мы никак не помечаем текущую клетку и перейдя на клетку над нами потом вернемся назад, т.е. опять будем ходить до бесконечности.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсовая работа, Xonix. GHOST32 Помощь студентам 6 12.05.2013 22:23
игра xonix dekilo Паскаль, Turbo Pascal, PascalABC.NET 3 28.10.2012 11:13
Xonix Intess Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 02.05.2009 20:03
Исходник игры xonix! Mixonow Фриланс 4 05.05.2008 19:36