Un proyecto que me tocó hacer fue el famosísimo "Hundir la Flota". He revisado en Google "Hundir la Flota en Pascal" y observado que hay más de 14000 registros.
Os dejo un fragmento del código que usé el cual corresponde a la función más grande en cuanto a número de líneas. Si necesitáis más, decírmelo y os echo un cable.
{ Mediante este procedimiento insertaré los barcos de ambos players en los tableros } procedure InsertBoxBoat (var tb:sBoardBoat); var row,column:integer; way:string; begin write('&& BARCO (Longitud 4) && - Selecciona la direccion para ubicarlo: [U]arriba/[D]abajo/[L]izquierda/[R]derecha?: '); readln(way); writeln(); repeat write('Por favor, del 1 al 8, indica la coordenada de la fila: '); readln(row); writeln(); write('Por favor, del 1 al 8, indica la coordenada de la columna: '); readln(column); sound(220); { Beep } delay(200); { Durante 200 ms } nosound; { Y... silencio! } writeln(); if (row>8) and (column>8) then begin textcolor(red); writeln('&& ERROR: Esta fuera de rango!'); textcolor(white); writeln(); readln(); end; until row<=8; if (way = 'L') or (way = 'l') or (way = 'izquierda') then for column := column downto 4 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=4; end else if (way = 'R') or (way = 'r') or (way='derecha') then for column := column to 4 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=4; end else if (way = 'U') or (way ='u') or (way = 'arriba') then for row := row downto 4 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=4; end else if (way = 'D') or (way = 'd') or (way = 'abajo') then for row := row to 4 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=4; end; write('&& BARCO (Longitud 3) && - Selecciona la direccion para ubicarlo: [U]arriba/[D]abajo/[L]izquierda/[R]derecha?: '); readln(way); writeln(); repeat write('Por favor, del 1 al 8, indica la coordenada de la fila: '); readln(row); writeln(); write('Por favor, del 1 al 8, indica la coordenada de la columna: '); readln(column); Sound(220); { Beep } Delay(200); { Durante 200 ms } NoSound; { Y... silencio! } writeln(); if (row>8) and (column>8) then begin textcolor(red); writeln('&& ERROR: Esta fuera de rango!'); textcolor(white); writeln(); readln(); end; until row<=8; if (way = 'L') or (way = 'l') or (way = 'izquierda') then for column := column downto 3 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=3; end else if (way = 'R') or (way = 'r') or (way='derecha') then for column := column to 3 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=3; end else if (way = 'U') or (way ='u') or (way = 'arriba') then for row := row downto 3 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=3; end else if (way = 'D') or (way = 'd') or (way = 'abajo') then for row := row to 3 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=3; end; write('&& BARCO (Longitud 2) && - Selecciona la direccion para ubicarlo: [U]arriba/[D]abajo/[L]izquierda/[R]derecha?: '); readln(way); writeln(); repeat write('Por favor, del 1 al 8, indica la coordenada de la fila: '); readln(row); writeln(); write('Por favor, del 1 al 8, indica la coordenada de la columna: '); readln(column); Sound(220); { Beep } Delay(200); { Durante 200 ms } NoSound; { Y... silencio! } writeln(); if (row>8) and (column>8) then begin textcolor(red); writeln('&& ERROR: Esta fuera de rango!'); textcolor(white); writeln(); readln(); end; until row<=8; if (way = 'L') or (way = 'l') or (way = 'izquierda') then for column := column downto 2 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=2; end else if (way = 'R') or (way = 'r') or (way='derecha') then for column := column to 2 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=2; end else if (way = 'U') or (way ='u') or (way = 'arriba') then for row := row downto 2 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=2; end else if (way = 'D') or (way = 'd') or (way = 'abajo') then for row := row to 2 do begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=2; end; repeat textcolor(yellow); writeln('&& ULTIMO Barco para ubicar, selecciona ubicacion: '); textcolor(white); writeln(); write('Por favor, del 1 al 8, indica la coordenada de la fila: '); readln(row); writeln(); write('Por favor, del 1 al 8, indica la coordenada de la columna: '); readln(column); Sound(220); { Beep } Delay(200); { Durante 200 ms } NoSound; { Y... silencio! } writeln(); if (row>8) and (column>8) then begin textcolor(red); writeln('&& ERROR: Esta fuera de rango!'); textcolor(white); writeln(); readln(); end; until row<=8; begin tb[row,column].bstate := BARCO; tb[row,column].bsize:=1; end end;