martes, 22 de enero de 2019

Programación: Pascal

¿Os acordáis de Pascal?. Pascal fue el primer lenguaje de programación denominado como estructurado, hoy en día diría que únicamente se utiliza para fines académicos. En mi caso, como en el muchos otros, tuve que estudiarlo.

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;