Gráficos Usando graphics.h

De ChuWiki

Contenido

Activando el Modo Gráfico

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

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

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

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.

Herramientas personales

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner http://www.chuidiang.com/chuwiki