[MOD]: Usa las etiquetas para insertar código, lee las normas del subforo.
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.
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 (pascal) [Seleccionar]
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.