Gráficos Usando graphics.h
Activando el Modo Gráfico[editar]
Antes que nada debemos activar el modo gráfico. De acuerdo al compilador que usemos tendremos maneras distintas de hacerlo. Si se trata de Borland C++ 3.1 debemos dirijirnos a Options->Linker->Libraries y allí tildar la opción "Graphics library". En el caso de tratarse de Borland C++ 4.5 ó superior deberemos hacer un click con el botón derecho del mouse sobre algún lugar desocupado de la pantalla y al aparecer el menú contextual, tenemos que hacer un click sobre "TargetExpert", con lo cual aparecerá una ventana en la que seleccionaremos "Application [.exe]" en la sección "Target Type"; luego de esto debemos seleccionar "DOS (Standard)" en la sección "Platform" y finalmente debemos marcar el casillero correspondiente a "BGI" en la sección "Standard Libraries".
Iniciando el Modo Gráfico[editar]
Para inciar el Modo Gráfico debemos escribir las siguientes sentencias:
int gdriver=DETECT, gmode; initgraph(&gdriver,&gmode,"C:\\BORLANDC\\BGI"); //Inicia el Modo Gráfico.
Con esto estamos diciéndole al compilador que autodetecte el driver correspondiente a nuestra tarjeta gráfica, que el modo gráfico sea el predeterminado, y que el path hacia la carpeta "BGI" (donde se encuentran entre otras cosas los drivers de video y las fuentes) es "C:\BORLANDC\BGI". Con esto tenemos nuestro modo gráfico iniciado. La manera de terminar el modo gráfico es escribir la sentencia siguiente:
closegraph();
Conociendo algunas funciones gráficas[editar]
Es conocida la pobreza de las funciones gráficas incluidas en "graphics.h". A pesar de esto, vale la pena conocerlas y manejarlas correctamente. Para describirlas, es necesario aclarar que en su mayoría tratan con coordenadas (iniciales y finales) compuestas por un par ordenado al estilo (eje_x , eje_y). Conveniremos en que las coordenadas iniciales serán x e y, y las coordenadas finales serán x2 e y2. De esta manera describiremos la función y a continuación haremos un ejemplo sencillo. Comencemos:
Dibujar un Circulo
circle(x, y, angulo_inicial, angulo_final, radio);
Aquí tenemos que para hacer el círculo completo necesitamos que el ángulo inicial sea igual a 0 y el ángulo final a 360. Creo que no hace falta describir para qué se utiliza el radio. A modo de ejemplo tendremos:
circle(320, 240, 0, 360, 100);
En este ejemplo dibujamos un círculo en el centro de la pantalla (considerando una resolución de 640x480) con un radio igual a 100.
Dibujar una Elipse
ellipse(x, y, angulo_inicial, angulo_final, radio_en_x, radio_en_y);
Al dibujar la elipse, necesitamos diferir entre radio en x y radio en y, ya que si fuesen iguales sería un círculo. Ejemplo:
ellipse(320, 240, 0, 360, 50, 100);
En este ejemplo dibujamos la elipse en el centro de la pantalla con un radio en x igual a 50 y un radio en y igual a 100.
Dibujar una Línea
line(x, y, x2, y2);
La línea sólo necesita especificar las coordenadas iniciales y las finales. Como ejemplo:
line(300, 200, 400, 300);
Entonces dibujamos nuestra línea entre las coordenadas iniciales (300,200) y (400,300).
Dibujar un Rectángulo
rectangle(x, y, x2, y2);
Al igual que la línea sólo necesitamos las coordenadas iniciales y las finales. Como ejemplo:
rectangle(0, 0, 100, 200);
Es necesario aclarar que con este comando es posible crear cuadrados tomando como base que las distancias numéricas entre x y x2 y entre y e y2 deben ser iguales.
Setear el Color de Línea
setcolor(color_elegido);
El color elegido debe encontrarse entre 0 y 15 en una paleta de 16 colores. Por ejemplo, 0 es negro, 1 es azul, 2 es verde claro, 4 es rojo, 9 es celeste, 15 es blanco, etc. Como ejemplo:
setcolor(4); rectangle(100, 100, 200, 200);
En este ejemplo hicimos un cuadrado de color rojo.
Dibujar una Barra
bar(x, y, x2, y2);
Aquí sencillamente dibujamos un rectángulo relleno, ya que la sintaxis de bar es idéntica a la de rectangle y funciona de igual manera.
setcolor(2); bar(0, 0, 200, 20);
En el ejemplo dibujamos una barra de 200 de largo y 20 de ancho partiendo de (0,0). La barra es de color verde claro.
Escribir un Texto posicionado según Coordenadas
outtextxy(x, y, "Este es un texto cualquiera.");
Al escribir este comando sólo debemos dar las coordenadas iniciales a partir de las cuales se escribirá el texto, y el texto propiamente dicho. A modo de ejemplo:
outtextxy(200, 200, "Texto de Prueba");
Así, escribimos el texto "Texto de Prueba" a partir de las coordenadas (200,200).
Setear Características del Texto
settextstyle(fuente, direccion, tamaño);
La fuente que acepta va desde 0 a 4, donde 0 es la letra por defecto y 4 es gótica. La dirección puede ser 0 ó 1. 0 es texto con dirección horizontal y 1 con dirección vertical. El tamaño varía desde 1 a 15. Como ejemplo:
settextstyle(4,0,6); outtextxy(200, 100, "Texto de Prueba");
En el ejemplo escribimos el texto "Texto de Prueba" en la posición (200,100) con una fuente gótica, dirección horizontal y tamaño 6.
Limpiar Pantalla
cleardevice();
Aquí cleardevice() se utiliza en forma análoga a clrscr().
Obtener Coordenadas Máximas
int maxx=getmaxx(); int maxy=getmaxy();
En la sintaxis y a su vez ejemplo, lo que estamos haciendo es obtener las coordenadas máximas sobre el eje x y el eje y. Asignamos estos valores a maxx y a maxy para utilizarlos luego.
Haciendo un Programa Sencillo[editar]
Vamos a hacer un pequeño programa que nos permita crear algo así como un salvapantallas. Utilizaremos entre otras, las funciones random(int valor), que devuelve un entero aleatorio que va desde 0 hasta el valor que especifiquemos y la función kbhit(), que detecta la pulsación de una tecla. A esta última función la utilizaremos como condición para salir del programa.
#include <conio.h> //De aquí utilizaremos la función kbhit() #include <stdlib.h> //De aquí sacaremos la función random() #include <dos.h> //Usaremos esta librería por la función delay(int valor) que nos permite //establecer un retardo en milisegundos. #include <graphics.h> //Esta es la librería que nos permite usar gráficos. void main() { int gdriver=DETECT, gmode, contador=0; initgraph(&gdriver,&gmode,"C:\\BORLANDC\\BGI"); //Iniciamos el modo gráfico. do { setcolor(random(15)); //Establecemos un color aleatorio line(random(640),random(480),random(640),random(480)); //Establecemos coordenadas aleatorias. setcolor(random(15)); rectangle(random(640),random(480),random(640),random(480)); setcolor(random(15)); ellipse(random(640),random(480),0,360,random(100),random(100)); contador+=1; //Por cada vuelta incrementamos contador en 1. if(contador%100==0) { cleardevice(); } //Si contador es múltiplo de 100, limpia la pantalla. delay(100); //Establecemos un retardo de 100 milisegundos al dibujar las figuras. } while(!kbhit()); //Si se pulsa alguna tecla, salimos del programa. closegraph(); //Cerramos el modo gráfico. }
Espero que haya sido de utilidad este "Mini-Manual", y debo aclarar que sólo es un esbozo. A mí me hubiera servido algo así hace unos meses. Intentaré mejorarlo en cuanto pueda.