php && рекурсия

msdn11

Новичок
php && рекурсия

пытаюсь написать на пхп игрушку "сапёр" для вапа. аналог стандартной виндошной...
застрял на функции которая в случае попадания игрока на пустую ячейку(без цифры и бомбы) должна "очищать" ячейки, которые тоже пустые, и касаются той в которую выстрелил юзверь. понятно что без рекурсии тут никуда.
мои попытки выглядят так:

PHP:
// это функция которая должна "очищать", но...
// $field [$x][$y]- массив с ячейками поля
// $show[$x][$y] - массив 0 и 1, показывающий можно ли показывать ячейку
// $check[$x][$y] - массив 0 и 1, показывающий проверялась ячейка или нет(что бы рек-ная функция не ушла в бесконечность)

function magic($field,$show,$x,$y,$check){
$show[$x][$y] = 1;
if ( touchcount($field,$x,$y) == 0 and !$ckeck[$x][$y] and $x > 0 and $x < 11 and $y > 0 and $y < 11 ){
    for( $i = -1; $i < 2; $i++ ){
        for( $j = -1; $j < 2; $j++ ){
            if( $i <> 1 and $j <> 1 and $x+$i > 0 and $x+$i < 11 and $y+$j > 0 and $y+$j < 11 ){
            $check[$x+$i][$y+$j] = 1;
            $show =  magic($field,$show,$x+$i,$y+$j,$check);
            }
        }
    }
}
return $show;
}

// ф-ция проверки и вычисления числа в ячейке
function touchcount($a, $x, $y){
$k = 0;
if($a[$x-1][$y-1] == 2)$k++;
if($a[$x][$y-1] == 2)$k++;
if($a[$x+1][$y-1] == 2)$k++;

if($a[$x-1][$y] == 2)$k++;
if($a[$x+1][$y] == 2)$k++;

if($a[$x-1][$y+1] == 2)$k++;
if($a[$x][$y+1] == 2)$k++;
if($a[$x+1][$y+1] == 2)$k++;
return $k;
}
прошу помощи, от тех у кого лучше с рекурсией :)
 

StUV

Rotaredom
msdn11
т.е. твои функции не работают и ты просишь их написать за тебя ?

учитывая элементарность алгоритма можешь сразу предлагать $$ =)
 

bgm

&nbsp;
Автор оригинала: msdn11
как?
Что "как"?

P.S. Учись формулировать вопросы по пунктам: хочу сделать вот это, получается вот это, где-то здесь косяк, помогите.
 

vasa_c

Новичок
В чем проблема? Д.б. функция, которая открывает ячейку. Если ячейка пустая, открываются все окружающие (т.е. для них вызывается опять-таки эта ф-я).

И чем тыщу раз вызывать touchcount, лучше сразу сделать массив, содержащий числа для каждой ячейки.
 

whirlwind

TDD infected, paranoid
1. обход матрицы по часовой стрелке с расширением радиуса
2. инкапсулировать клетку в класс, с методом open на клетку, который в свою очередь вызовет open для соседних если нужно.
 
Сверху