Estoy creando un buscaminas en pascal para una clase y solo se pueden usar variables locales, dejare mi codigo aqui el problema que tengo es que no puedo mantener las casillas ya descubiertas de la matriz y no se me ocurre como arreglarlo, en el juego el 9 representa las casillas no descubiertas. El error esta en la parte en negrita a mi parecer.
Código
Program proyecto; uses crt; procedure opcion; type matriz=array[1..9,1..9] of integer; vector=array[1..9] of integer; var mat:matriz; y,i,j,x:integer; va,vb:vector; resp:char; FUNCTION menu:integer; var opcion:integer; begin repeat begin clrscr; Writeln('Solo nros enteros.'); Writeln('1-. Comenzar el juego.'); Writeln('2-. Salir.'); read(opcion); end; until((opcion>0)and(opcion<3)); menu:=opcion; end; PROCEDURE creartablero(var mat:matriz; var va,vb:vector; var x,y:integer); var i,j:integer; resp:char; function contador(mat:matriz; var x,y:integer):integer; var cont:integer; begin if ((x=1)and(y=1)) then begin cont:=0; cont:=mat[x,y+1]+mat[x+1,y]+mat[x+1,y+1]; contador:=cont; end; if ((x=1)and(y=9)) then begin cont:=0; cont:=mat[x,y-1]+mat[x+1,y-1]+mat[x+1,y]; contador:=cont; end; if ((x=1)and(y<9)and(y>1)) then begin cont:=0; cont:=mat[x,y+1]+mat[x,y-1]+mat[x+1,y+1]+mat[x+1,y]+mat[x+1,y-1]; contador:=cont; end; if ((x=9)and(y=1)) then begin cont:=0; cont:=mat[x,y+1]+mat[x-1,y]+mat[x-1,y+1]; contador:=cont; end; if ((x=9)and(y=9)) then begin cont:=0; cont:=mat[x,y-1]+mat[x-1,y]+mat[x-1,y-1]; contador:=cont; end; if ((x=9)and(y<9)and(y>1)) then begin cont:=0; cont:=mat[x,y-1]+mat[x,y+1]+mat[x-1,y+1]+mat[x-1,y]+mat[x-1,y-1]; contador:=cont; end; if ((x>1)and(x<9)and(y=1)) then begin cont:=0; cont:=mat[x+1,y]+mat[x-1,y]+mat[x-1,y+1]+mat[x,y+1]+mat[x+1,y+1]; contador:=cont; end; if ((x>1)and(x<9)and(y=9))then begin cont:=0; cont:=mat[x+1,y]+mat[x-1,y]+mat[x-1,y-1]+mat[x,y-1]+mat[x+1,y-1]; contador:=cont; end; if ((x>1)and(x<9)and(y>1)and(y<9)) then begin cont:=0; cont:=mat[x,y+1]+mat[x,y-1]+mat[x+1,y-1]+mat[x+1,y]+mat[x+1,y+1]+mat[x-1,y+1]+mat[x-1,y]+mat[x-1,y-1]; contador:=cont; end; end; BEGIN repeat begin clrscr; gotoxy(12,1); writeln('BUSCAMINA'); i:=1; while i<=9 do begin gotoxy(4,2+i); for j:= 1 to 9 do [b] begin if ((i=x)and(j=y)) then begin mat[i,j]:=(contador(mat,x,y)div 10); write ('[',mat[i,j],']') end else write ('[',9,']');[/b] end; i:=i+1; writeln; end; gotoxy(1,3); begin for i:=1 to 9 do writeln('(',va[i],')'); end; gotoxy(4,2); for i:=1 to 9 do write('(',vb[i],')'); gotoxy (3,13); writeln('Seleccione la coordenada que desea abrir'); write(' Nro de fila: '); readln(x); write(' Nro de columna: '); readln(y); write(' Descubrir o Salir (D/S): '); readln(resp); end; until (((j>0)and(j<=9)and(i>0)and(i<=9))and((upcase(resp)='S')or(upcase(resp)='D'))); if (upcase(resp)='D') then begin if mat[x,y]=1 then writeln(' Mina encontrada.') else creartablero(mat,va,vb,x,y); end; if (upcase(resp)='S') then begin clrscr; write('Presione [ENTER] para salir.' ); end; END; BEGIN if menu=1 then begin for i:=1 to 9 do for j:=1 to 9 do mat[i,j]:=0; for j:=1 to 9 do va[j]:=j; for j:=1 to 9 do vb[j]:=j; randomize; x:=1; while x<=10 do begin i:=random (10); j:=random (10); if ((i>0)and(j>0)and(mat[i,j]<>1)) then begin mat[i,j]:=10; x:=x+1; end; end; creartablero(mat,va,vb,x,y); end else write('Presione [ENTER] para salir.' ); END; BEGIN clrscr; opcion; readkey; END.