Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 25.11.2010, 05:09   #1
AleD
AnyKey`щик
 
Аватар для AleD
 
Регистрация: 25.11.2010
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
Рекурсия в MP

Привет boolean.name! Решил посмсотреть MP и для теста начал писать сапёра, проблема вот в чём. Когда открываешь клетку, а там пусто, то, как и в MS Сапёре, открываются все смежные клетки, для этого использовал рекурсивную функцию:
procedure OpenEmpty(x, y: Integer);
begin
  if(x>=0)and(y>=0)and(x<=8)and(y<=8)and(space[x,y].tp=S_EMPTY)and(space[x,y].hidden>0)then
  begin
    space[x,y].hidden := 0;
    OpenEmpty(x, y-1);
    OpenEmpty(x-1, y);
    OpenEmpty(x, y+1);
    OpenEmpty(x+1, y);
  end;
end;
Но процедура просто зависает вроде бы есть 2 ограничения - размер поля и клетки только со свойством hidden>0.
=====Thread[Thread-4,1,main]=====
M.think(I)V
  M.openfield(II)V
    M.openempty(II)V
      M.openempty(II)V
        M.openempty(II)V
          M.openempty(II)V
            M.openempty(II)V
MP вообще поддерживает рекурсивные функции?
(Offline)
 
Ответить с цитированием
Старый 25.11.2010, 12:32   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Рекурсия в MP

Вообще поддерживает, но не уверен, что алгоритм работает корректно, когда функция вызывается внутри себя несколько раз подряд.
(Offline)
 
Ответить с цитированием
Старый 25.11.2010, 12:43   #3
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: Рекурсия в MP

Проблем быть не должно. У меня в последней игре процедура нанесения урона, натыкаясь на бочку, вызывает себя же еще 9 раз. К зависанию не приводит.
(Offline)
 
Ответить с цитированием
Старый 25.11.2010, 19:06   #4
AleD
AnyKey`щик
 
Аватар для AleD
 
Регистрация: 25.11.2010
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Рекурсия в MP

Нашёл в чём проблема была. MP проверяет сразу все условия в if'ах, что впринципе не нужно, если уже есть хотя бы одно true
if(false)or(false)or(true)or({это выражение уже можно и не вычислять}false)or(false)then ...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 14:58.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com