procedure matrix.OpenCells(i,j:integer);
var t:integer;
begin
t := 0;
if (i < 1) or (j < 1) then t := 1;
if (i = n+1) or (j = n+1) then t := 1;
if t = 0 then
begin
if marked[j] = FALSE then
begin
marked[j] := TRUE;
DrawOpenedCells(i,j);
if mines[j] = FALSE then
begin
OpenCells(i-1,j);
OpenCells(i+1,j);
OpenCells(i,j-1);
OpenCells(i,j+1);
OpenCells(i-1,j-1);
OpenCells(i+1,j-1);
OpenCells(i-1,j+1);
OpenCells(i+1,j+1);
end;
end;
end;
end;
Игра "Сапёр" на Паскале
но не могу найти ошибку в рекурсивной процедуре открытия ячеек. При открытии одной ячейки открывается всё поле. Помогите, пожалуйста, найти и исправить ошибку(может быть, не одну. Исходник прикреплён к сообщению). Готовые примеры из Интернета есть, но хочется написать самостоятельно...
Код:
Код:
if mines[j] = FALSE then
нужно заменить на
Код:
if DetectMines( a , b )=0 then
P.S Код слегка запутанный - зачем, например, надо сначала переводить координаты мины в координаты пиксела, а затем назад?
Ещё логично было бы в DrawOpenedCells в случае если в ячейке бомба не печатать в неё количество бомб рядом.
Спасибо, это действительно работает! Просто эта программа писалась с перерывом в три месяца и мне было трудно даже разобраться в ней:o