Parte del codigo de la Batalla Naval, Pascal

Estoy hace unos dias haciendo la batalla naval, el tema es que ya pude cargar las matrices con los barcos y todo, lo unico q no me anda es el tema de "tocado" y "hundido" quiero que me digas por q no me esta andando esta condicion:
if (j2[f,c] = 's') and (not (s)) then
begin
coord:='Impacto';
t1[f,c]:='x';
j2[f,c]:='x';
imp_fs:=f;
imp_cs:=c;
s:=true;
end;
if (j2[f,c] = 's') and (s) then
begin
coord:='Hundido';
t1[f,c]:='h';
t1[imp_fs,imp_cs]:='h';
j2[f,c]:='h';
j2[imp_fs,imp_cs]:='h';
tg1:=tg1-1;
end;
Siendo:
j2[f,c] = la matriz del jugador 2 con los barcos ya cargados.
t1[f,c] = la matriz q ve el jugador 1 con los aciertos de las coordenadas de ataque que introduce.
tg1 = es un contador que llevo del total, que no viene al caso.
El tema es que me impacta y me marca la primer "x" y me cambia la condicion a "true" pero no entra al 2do If. Nose que hacer, encima tengo que llevarlo mañana je.
te paso todo el codigo si queres probarlo y fijarte:
program naval;
uses dos,crt ;
type t_matrix1 = array [1..11, 1..11] of string; //para el tablero
var
j1:t_matrix1; //tablero jugador1
j2:t_matrix1; //tablero jugador 2
t1:t_matrix1; // tablero de aciertos del j1
t2:t_matrix1; // tablero de aciertos del j2
cord,user1, user2: string;
procedure ingresar_usuarios (var user1,user2:string); //PARA INGRESAR LOS USUARIOS
begin
writeln ('Jugador 1 ingrese su nombre: '); readln (user1);
writeln ('Jugador 2 ingrese su nombre: '); readln (user2);
end;
// CARGO LAS MATRICES DE CADA TABLERO AL PRINCIPIO DEL JUEGO.
procedure cargar_j1 (var v:t_matrix1; var v2:t_matrix1; var v3:t_matrix1; var v4:t_matrix1);
var
i,j:byte;
//Cargo Matriz jugador 1
begin
for i:= 2 to 11 do
begin
for j := 2 to 11 do
v[i,j]:= ('.');
end;
v[2,1]:=(' 1');
v[3,1]:=(' 2');
v[4,1]:=(' 3');
v[5,1]:=(' 4');
v[6,1]:=(' 5');
v[7,1]:=(' 6');
v[8,1]:=(' 7');
v[9,1]:=(' 8');
v[10,1]:=(' 9');
v[11,1]:=('10');
v[1,2]:=(' A');
v[1,3]:=('B');
v[1,4]:=('C');
v[1,5]:=('D');
v[1,6]:=('E');
v[1,7]:=('F');
v[1,8]:=('G');
v[1,9]:=('H');
v[1,10]:=('I');
v[1,11]:=('J');
// Cargo matriz jugador 2
for i:= 2 to 11 do
begin
for j := 2 to 11 do
v2[i,j]:= ('.');
end;
v2[2,1]:=(' 1');
v2[3,1]:=(' 2');
v2[4,1]:=(' 3');
v2[5,1]:=(' 4');
v2[6,1]:=(' 5');
v2[7,1]:=(' 6');
v2[8,1]:=(' 7');
v2[9,1]:=(' 8');
v2[10,1]:=(' 9');
v2[11,1]:=('10');
v2[1,2]:=(' A');
v2[1,3]:=('B');
v2[1,4]:=('C');
v2[1,5]:=('D');
v2[1,6]:=('E');
v2[1,7]:=('F');
v2[1,8]:=('G');
v2[1,9]:=('H');
v2[1,10]:=('I');
v2[1,11]:=('J');
//Cargo matriz de aciertos J1
for i:= 2 to 11 do
begin
for j := 2 to 11 do
v3[i,j]:= ('.');
end;
v3[2,1]:=(' 1');
v3[3,1]:=(' 2');
v3[4,1]:=(' 3');
v3[5,1]:=(' 4');
v3[6,1]:=(' 5');
v3[7,1]:=(' 6');
v3[8,1]:=(' 7');
v3[9,1]:=(' 8');
v3[10,1]:=(' 9');
v3[11,1]:=('10');
v3[1,2]:=(' A');
v3[1,3]:=('B');
v3[1,4]:=('C');
v3[1,5]:=('D');
v3[1,6]:=('E');
v3[1,7]:=('F');
v3[1,8]:=('G');
v3[1,9]:=('H');
v3[1,10]:=('I');
v3[1,11]:=('J');
// Cargo matriz de aciertos J2
for i:= 2 to 11 do
begin
for j := 2 to 11 do
v4[i,j]:= ('.');
end;
v4[2,1]:=(' 1');
v4[3,1]:=(' 2');
v4[4,1]:=(' 3');
v4[5,1]:=(' 4');
v4[6,1]:=(' 5');
v4[7,1]:=(' 6');
v4[8,1]:=(' 7');
v4[9,1]:=(' 8');
v4[10,1]:=(' 9');
v4[11,1]:=('10');
v4[1,2]:=(' A');
v4[1,3]:=('B');
v4[1,4]:=('C');
v4[1,5]:=('D');
v4[1,6]:=('E');
v4[1,7]:=('F');
v4[1,8]:=('G');
v4[1,9]:=('H');
v4[1,10]:=('I');
v4[1,11]:=('J');
end;
procedure cargar_j2 (var v:t_matrix1);
var
i,j:byte;
begin
for i:= 2 to 11 do
begin
for j := 2 to 11 do
v[i,j]:= ('.');
end;
v[2,1]:=(' 1');
v[3,1]:=(' 2');
v[4,1]:=(' 3');
v[5,1]:=(' 4');
v[6,1]:=(' 5');
v[7,1]:=(' 6');
v[8,1]:=(' 7');
v[9,1]:=(' 8');
v[10,1]:=(' 9');
v[11,1]:=('10');
v[1,2]:=(' A');
v[1,3]:=('B');
v[1,4]:=('C');
v[1,5]:=('D');
v[1,6]:=('E');
v[1,7]:=('F');
v[1,8]:=('G');
v[1,9]:=('H');
v[1,10]:=('I');
v[1,11]:=('J');
end;
// MUESTRO LAS MATRICES DE CADA JUGADOR
procedure mostrar_j1 (var v:t_matrix1);
var
i,j:byte;
begin
writeln (' Jugador Nro 1 ' );
writeln;
for i:= 1 to 11 do
begin
for j := 1 to 11 do
begin
write (v[i,j] ,' ');
end;
writeln;
end;
writeln;
writeln;
end;
procedure mostrar_j2 (var v:t_matrix1);
var
i,j:byte;
begin
writeln (' Jugador Nro 2 ' );
writeln;
for i:= 1 to 11 do
begin
for j := 1 to 11 do
begin
write (v[i,j] ,' ');
end;
writeln;
end;
writeln;
writeln;
end;
procedure mostrar_t1 (var v:t_matrix1);
var
i,j:byte;
begin
writeln (' Jugador Nro 1 ' );
writeln;
for i:= 1 to 11 do
begin
for j := 1 to 11 do
begin
write (v[i,j] ,' ');
end;
writeln;
end;
writeln;
writeln;
end;
procedure mostrar_t2 (var v:t_matrix1);
var
i,j:byte;
begin
writeln (' Jugador Nro 2 ' );
writeln;
for i:= 1 to 11 do
begin
for j := 1 to 11 do
begin
write (v[i,j] ,' ');
end;
writeln;
end;
writeln;
writeln;
end;
// HAGO QUE UBIQUEN LOS BARCOS CADA JUGADOR EN EL TABLERO.
procedure ubicar_j1 (var v:t_matrix1; user:string);
var
i,j,k,p:byte;
f,c,lado_s,lado_a,lado_p:string;
begin
//PARA CARGAR PATRULLEROS
i:=0;
writeln (user, ' Ingrese los Patrulleros:...

1 Respuesta

Respuesta
2
Upa, no se si llevo el envio anterior, te saque bastante codigo repetido, fijate y todo caso, mandame un correo a hot mail (gabarenas) por si te quedo alguna duda
Saludos
program naval;
uses dos,crt ;
CONST
   UNDIDO='UNDIDO';
   AVERIADO='AVERIADO';
type t_matrix1 = array [1..10, 1..10] of String; //para el tablero
var
j1:t_matrix1; //tablero jugador1
j2:t_matrix1; //tablero jugador 2
t1:t_matrix1; // tablero de aciertos del j1
t2:t_matrix1; // tablero de aciertos del j2
cord,user1, user2: string;
err:integer;
procedure ingresar_usuarios (var user1,user2:string); //PARA INGRESAR LOS USUARIOS
begin
  writeln ('Jugador 1 ingrese su nombre: '); readln (user1);
  writeln ('Jugador 2 ingrese su nombre: '); readln (user2);
end;
// CARGO LAS MATRICES DE CADA TABLERO AL PRINCIPIO DEL JUEGO.
procedure cargar_matriz(var mat:t_matrix1);
var
  i,j:byte;
begin
 for i:= 2 to 11 do
  for j := 2 to 11 do
    mat[i,j]:= '.';
end;
// MUESTRO LAS MATRICES DE CADA JUGADOR
procedure mostrar_matriz (jugador:Integer; mat:t_matrix1);
var
  i,j:byte;
begin
 writeln (' Jugador Nro ', jugador );
 writeln;
 WriteLn('   A B C D E F G H I J');
 for i:= 1 to 10 do
  begin
   Write(i:2,' ');
   for j := 1 to 10 do
     write (mat[i,j] ,' ');
   writeln;
  end;
 writeln;
 writeln;
end;
procedure cargar_navios(usu:Integer; user:String; var mat:t_matrix1; navio:String; marca:char; tam:integer; cant:integer);
Var
  k,p:byte;
  f,c,lado_p:string;
  po, navios:Integer;
Begin
  clrscr;
  writeln (user, ' Ingrese el ', navio);
  mostrar_matriz (usu, mat);
  for navios:=1 to cant Do
  Begin
    writeln (navio, ':');
    writeln;
    if (tam > 1) then
     Begin
       write('Vertical u Horizontal? (v/h): ');
       readln(lado_p);
     End
    else lado_p:='v';
    write ('Fila: ');
    readln (f);
    write ('Columna: ');
    readln (c);
    val(f, k, err);
    p:=ord(upcase(c[1]))-64;
    //Sentencia para escribir el casillero.
    if (mat[k,p] = '.') then
     begin
      for po:=0 to tam-1 do
        if lado_p = 'v' then
          mat[k+po,p] := marca
        else
          mat[k,p+po] := marca;
     end
    else
     begin
       writeln ('Ubicacion no valida, o casillero ocupado,presione cualquier tecla para continuar.');
       readkey;
     end;
 End;
End;
// HAGO QUE UBIQUEN LOS BARCOS CADA JUGADOR EN EL TABLERO.
procedure ubicar (var mat:t_matrix1; user:string; usrn:Integer);
begin
//PARA CARGAR PATRULLEROS
cargar_navios(usrn, user, mat, 'Patrulleros', 'b', 1, 4);
//FIN CARGAR PATRULLEROS.
//PARA CARGAR SUBMARINOS.
cargar_navios(usrn, user, mat, 'Submarinos', 's', 2, 3);
//FIN CARGA DE SUBMARINOS.
//CARGA DE ACORAZADOS
cargar_navios(usrn, user, mat, 'Acorazados', 'a', 3, 2);
//FIN CARGA DE ACORAZADOS.
//CARGA DE PORTAAVIONES.
cargar_navios(usrn, user, mat, 'Portaaviones', 'p',  4, 1);
//FIN DE CARGA DE PORTAAVIONES.
mostrar_matriz (usrn, mat);
//FIN DEL UBICAR.
end;
procedure Verifica(var mat:t_matrix1; fila:integer; col:integer; id:String; var Cord:String);
Var
  x,y,delta:Integer;
  Obj:char;
  Tamanio:Integer;
  Impactos:Byte;
Begin
  impactos:=1;
  //obj:=mat[fila, col][1];
  obj:='x';
  case id[1] of
    'b':tamanio:=1;
    's':tamanio:=2;
    'a':tamanio:=3;
    'p':tamanio:=4;
   End;
  delta:=tamanio -1;
  // Recorremos hacia la izquierda hasta encontrar agua o saber que no hay mas navio
  x:=col;
  y:=fila;
  While ((x > 0) and ((x-col) <=delta) and (mat[fila, x] = obj)) Do
    Begin
      dec(x);
      if (mat[fila, x] = obj) then inc(impactos);
    End;
  // Recorremos hacia la derecha hasta encontrar agua o saber que no hay mas navio
  x:=col;
  y:=fila;
  While ((x < 10) and ((x-col) <=delta) and (mat[fila, x] = obj)) Do
    Begin
      inc(x);
      if (mat[fila, x] = obj) then inc(impactos);
    End;
  // Recorremos hacia la arriba hasta encontrar agua o saber que no hay mas navio
  x:=col;
  y:=fila;
  While ((y > 0) and ((y-fila) <= delta) and (mat[y, col] = obj)) Do
    Begin
      dec(y);
      if (mat[y, col] = obj) then inc(impactos);
    End;
  // Recorremos hacia la abajo hasta encontrar agua o saber que no hay mas navio
  x:=col;
  y:=fila;
  While ((y < 10) and ((y-fila) <=delta) and (mat[y, col] = obj)) Do
    Begin
      inc(y);
      if (mat[y, col] = obj) then inc(impactos);
    End;
  if (Impactos = tamanio)
    then cord:=UNDIDO
    else cord:=AVERIADO;
End;
Procedure ataque(var atak:t_matrix1; var mia:t_matrix1; f:integer; c:integer; var objetivos:integer; var cord:string); // var s:boolean; var a,p:integer);
Var Aux:String;
begin
  Aux:=atak[f, c];
  if atak[f,c] = '.' then
    begin
     cord:='Agua';
     mia[f,c]:='0';
     atak[f,c]:='0';
    end
  else Begin
      mia[f,c]:='x';
      atak[f,c]:='x';
      Verifica(atak, f, c, aux,       cord);
      if (cord = UNDIDO )
        then dec(objetivos);
     end;
end;
procedure juego ( j1:t_matrix1; j2:t_matrix1; var t1:t_matrix1; var t2:t_matrix1; user:string; user2:string);// cord:string);
var
  k,p:byte;
  tg1:Integer;
  f,c:string;
  s:boolean;
begin
clrscr;
writeln('RONDA DE ATAQUES');
tg1:=10;
mostrar_matriz (1, t1);
mostrar_matriz (2, t2);
// s:=1;
//a:=3;
//p1:=4;
s:=false;
while (tg1 >= 1 ) do
  begin
    //writeln('subma: ',s);
    writeln (user, ' Ingrese las coordenadas de ataques: ');
    writeln;
    write ('Fila: ');
    readln (f);
    write ('Columna: ');
    readln (c);
    // Sentencia para corregir las filas, f(fila) es reemplazado por k.
    val(f, k, err);
    //Sentencia para corregir las columnas, c(columna) es reemplazado por p.
    p:=ord(upcase(c[1]))-64;
    ataque(j2,t1,k,p,tg1,cord);//,s,a,p1);
    writeln(cord);
    //writeln(tg1);
    mostrar_matriz(2, j2);
    WriteLn;
    WriteLn;
    mostrar_matriz(1, t1);
    WriteLn;
    //readkey;
 end;
 writeln('Gano', user);
end;
//PROGRAMA PRINCIPAL
begin
  clrscr;
  ingresar_usuarios (user1, user2);
  cargar_matriz (j1);
  cargar_matriz (j2);
  cargar_matriz (t1);
  cargar_matriz (t2);
  //cargar_j2 (j2);
  // clrscr;
  // ubicar_j1 (j1,user1);
  clrscr;
  ubicar(j2, user2, 2);
  juego(j1, j2, t1, t2, user1, user2);
  readkey;
end.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas