{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Programa sencillo de }
{ dibujo }
{ DIB.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Turbo Pascal 7.0 }
{--------------------------}
program dib;
uses graph, crt;
var
driver, modo: integer;
tecla: char;
x, y: integer;
begin
driver := detect;
initgraph(driver, modo, '');
x := 320; { Comienzo en el centro }
y := 240;
repeat
putpixel(x,y, 15);
tecla := readkey;
case tecla of
'8': y := y-1;
'4': x := x-1;
'6': x := x+1;
'2': y := y+1;
end;
until tecla = 'f';
closegraph;
end.
Creo que la idea en sí es muy sencilla: si se pulsan las teclas
2, 4, 6, 8 (del teclado numérico), el puntito que dibuja se va desplazando
por la pantalla, y dibujando un punto en el color 15 (que normalmente es
el blanco). Cuando se pulse "f", acaba el programa.
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Programa sencillo de }
{ dibujo (en varios }
{ colores) }
{ DIB2.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Turbo Pascal 7.0 }
{--------------------------}
program dib2;
uses graph, crt;
var
driver, modo: integer;
tecla: char;
x, y, c: integer;
begin
driver := detect;
initgraph(driver, modo, '');
x := getMaxX div 2; { Comienzo en el centro }
y := getMaxY div 2;
c := getMaxColor; { Y con el máximo color permitido en este modo }
repeat
putpixel(x,y, c);
tecla := readkey;
case tecla of
'8': y := y-1;
'4': x := x-1;
'6': x := x+1;
'2': y := y+1;
'c': begin
c := c + 1;
if c>getMaxColor then c := 1;
end;
end;
until tecla = 'f';
closegraph;
end.
¿Otras mejoras posibles? Que se pueda borrar un punto o la pantalla entera, que se puedan dibujar líneas, rectángulos y otras figuras... eso ya queda a la imaginación de cada uno.
Y todo esto podría seguir y seguir... Lo mejor es que, si os interesa, miréis la ayuda y practiquéis con los ejemplos que incluye, o bien que miréis el BGIDEMO que incluye Turbo Pascal, que pone a prueba casi todas las posibilidades gráficas de este compilador..
Lo que sí voy a hacer es poner yo algún ejemplo que YO considere interesante porque aporte algo más o menos curioso... }:-)
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Cono formado por }
{ varios círculos }
{ GRAF2.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Turbo Pascal 7.0 }
{ - Free Pascal 2.2.0w }
{--------------------------}
program SegundoGrafico;
uses Graph; { Va a usar la librería gráfica de TP }
var
Driver, Modo: Integer; { Pues el driver y el modo, claro }
bucle: word; { Para bucles, ya se verá por qué }
begin
Driver := Vga; { Para pantalla VGA }
Modo := VgaHi; { Modo 640x480, 16 colores }
InitGraph(Driver, Modo, 'c:\tp\bgi'); { Inicializamos }
SetColor(LightRed); { Color rojo }
for bucle := 1 to 40 do { Dibujaremos 40 círculos }
circle ( bucle*5, bucle*5, bucle*5 );
Readln; { Esperamos }
CloseGraph { Y se acabó }
end.
Hemos dibujado 40 círculos, cuyas coordenadas x e y, y cuyo radio son iguales en cada círculo. El efecto es vistoso, pero se puede mejorar...
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Cono de círculos con }
{ los colores cambiados }
{ GRAF2B.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Turbo Pascal 7.0 }
{--------------------------}
program SegundoGraficoRetocado;
uses
Graph, { Va a usar la librería gráfica de TP }
Crt; { y la CRT para tiempo y teclado }
var
Driver, Modo: Integer; { Pues el driver y el modo, claro }
bucle: word; { Para bucles, ya se verá por qué }
Intensidad: byte; { Intensidad del color }
Incremento: ShortInt; { Será +1 ó -1 }
Tecla: char; { La tecla que se pulse }
begin
Driver := Vga; { Para pantalla VGA }
Modo := VgaHi; { Modo 640x480, 16 colores }
InitGraph(Driver, Modo, 'c:\tp\bgi'); { Inicializamos }
SetColor(Red); { Color rojo }
for bucle := 1 to 40 do { Dibujaremos 40 círculos }
circle ( bucle*5, bucle*5, bucle*5 );
Intensidad := 63; { Empezaremos desde rojo }
Incremento := -1; { y disminuyendo }
while not keypressed do { Mientras no se pulse tecla }
begin
SetRGBPalette(Red, Intensidad, 0, 0); { Cambia la paleta }
Intensidad := Intensidad + Incremento; { Y la próxima intens. }
if Intensidad = 0 then { Si llegamos a int. 0 }
Incremento := 1; { Deberemos aumentar }
if Intensidad = 63 then { Si es la máxima }
Incremento := -1; { Disminuiremos }
delay(20); { Pausa de 20 mseg }
end;
Tecla := ReadKey; { Abosorbemos la tecla pulsada }
CloseGraph { Y se acabó }
end.
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Líneas desde el }
{ punto (0,0) }
{ GRAF3.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Turbo Pascal 7.0 }
{ - Free Pascal 2.2.0w }
{--------------------------}
program TercerGrafico;
uses Graph; { Va a usar la librería gráfica de TP }
var
Driver, Modo: Integer; { Pues el driver y el modo, claro }
bucle: word; { Para bucles, ya se verá por qué }
begin
Driver := Vga; { Para pantalla VGA }
Modo := VgaHi; { Modo 640x480, 16 colores }
InitGraph(Driver, Modo, 'c:\tp\bgi'); { Inicializamos }
SetColor(LightRed); { Color rojo }
for bucle := 0 to 639 do { Dibujaremos lineas }
line (0,0,bucle,439);
Readln; { Esperamos }
CloseGraph { Y se acabó }
end.
Sencillo, ¿no?
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Líneas dibujadas con }
{ XOR }
{ GRAF3B.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Turbo Pascal 7.0 }
{ - Free Pascal 2.2.0w }
{--------------------------}
program TercerGraficoConXor;
uses Graph; { Va a usar la librería gráfica de TP }
var
Driver, Modo: Integer; { Pues el driver y el modo, claro }
bucle: word; { Para bucles, ya se verá por qué }
begin
Driver := Vga; { Para pantalla VGA }
Modo := VgaHi; { Modo 640x480, 16 colores }
InitGraph(Driver, Modo, 'c:\tp\bgi'); { Inicializamos }
SetColor(LightRed); { Color rojo }
SetWriteMode(XORPut); { <-- Este es el cambio }
for bucle := 0 to 639 do { Dibujaremos lineas }
line (0,0,bucle,479);
for bucle := 0 to 479 do { y más }
line (0,0,639,bucle);
Readln; { Esperamos }
CloseGraph { Y se acabó }
end.
Pues lo voy a dejar aquí. Espero que todo esto os haya dado una base para empezar a cotillear y, sobre todo, que haya hecho que os pique la curiosidad.
Así que ya sabeis, si os llama la atención esto de los gráficos, pues a experimentar. Insisto en que un ejemplo del que se puede aprender mucho es del BGIDEMO.PAS que trae Turbo Pascal: allí podreis ver con detalle cómo manejar los tipos de letra, copiar zonas de la pantalla, definir patrones para rellenar zonas, etc.: