program tabela;
uses crt;
var
i, j, k : integer;
num_linhas : integer;
num_cols : integer;
bomb_rate : integer;
bomb_num : integer;
field : array[1..10, 1..10] of integer;
temp_field : array[1..10, 1..10] of boolean;
{ desenha a tabela }
procedure desenha_tabela(line : integer; col : integer; sp : integer);
var
i : integer;
j : integer;
s : integer;
begin
writeln;
for s := 1 to sp do
write(' ');
for i := 1 to col do
write(' ', i, ' ');
writeln;
for s := 1 to sp do
write(' ');
write(char(218));
for i := 1 to (col - 1) do
write(char(196), char(196), char(196), char(194));
writeln(char(196), char(196), char(196), char(191));
for j := 1 to line do
begin
for s := 1 to sp do
write(' ');
for i := 1 to (col + 1) do
begin
write(char(179));
if (i <> col + 1) then
begin
{if (temp_field[j, i] = false) then
write(' ')
else}
write(' ', field[j, i], ' ');
end;
end;
write(j:3);
writeln;
if (j <> line) then
begin
for s := 1 to sp do
write(' ');
write(char(195));
for i := 1 to (col - 1) do
begin
write(char(196), char(196), char(196), char(197));
end;
writeln(char(196), char(196), char(196), char(180));
end;
end;
for s := 1 to sp do
write(' ');
write(char(192));
for i := 1 to (col - 1) do
write(char(196), char(196), char(196), char(193));
writeln(char(196), char(196), char(196), char(217));
end;
{ popula o vetor com bombas aleatoriamente }
procedure random_bombs(bnum : integer; l : integer; c : integer);
var
c_pos : integer;
l_pos : integer;
i : integer;
begin
randomize;
for i := 1 to bnum do
begin
c_pos := random(c) + 1;
l_pos := random(l) + 1;
while (field[l_pos, c_pos] = 9) do
begin
c_pos := random(c) + 1;
l_pos := random(l) + 1;
end;
field[l_pos, c_pos] := 9;
end;
end;
{ programa principal }
begin
{ inicializa a matriz com 0 em tudo }
for i := 1 to 10 do
for j := 1 to 10 do
field[i, j] := 0;
{ inicializa a matriz temporaria com false em tudo,
pois nenhuma posicao foi aberta até agora }
for i := 1 to 10 do
for j := 1 to 10 do
temp_field[i, j] := false;
write('Numero de linhas do campo: ');
readln(num_linhas);
write('Numero de colunas do campo: ');
readln(num_cols);
write('Porcentagem de bombas: ');
readln(bomb_rate);
{ calcula o numero de bombas no campo }
bomb_num := round((num_linhas * num_cols) * (bomb_rate / 100));
writeln('Numero de bombas: ', bomb_num);
random_bombs(bomb_num, num_linhas, num_cols);
desenha_tabela(num_linhas, num_cols, 5);
readln;
end.