TEMA 2.5
GRÁFICOS





2.5.1 - INTRODUCCIÓN A LOS INTERFACES GRÁFICOS

Todos los resultados de los programas que hemos hecho hasta ahora en este tutorial de programación los hemos podido ver en la pantalla a través de lo que denominamos "Interfaz de texto", primero sólo en blanco y negro, y más adelante en colores. A partir de aquí vamos a tener la posibilidad de usar la pantalla como una matriz de puntos de colores (Píxeles) donde tendremos la podremos dibujar lo que queramos usando las instrucciones adecuadas.

Dos conceptos muy importantes que hay que tener en cuenta a la hora de trabajar con interfaces gráficos son la profundidad de color y la resolución. La profundidad de color se refiere al número máximo de colores que vamos a poder presentar en la pantalla simultáneamente. La resolución es el número de píxeles que forman la pantalla, a mayor resolución mayor calidad de imagen.

En los apartados siguientes veremos primero la forma de iniciar el modo de pantalla gráfica de QBasic, algo muy sencillo, y después cómo dibujar figuras en la pantalla para que hagan nuestros programas y juegos más vistosos.





2.5.2 - LOS MODOS DE PANTALLA EN QBASIC

Olvidémonos un momento del tutorial de programación. Imaginemos que estamos trabajando con Windows, un interfaz gráfico muy moderno. Nuestra pantalla estará trabajando seguramente con una resolución de 800 por 600 pixeles y una profundidad de color de 16.7 millones de colores. De esta forma, además de las letras que aparecen por ejemplo en las barras de título de las ventanas, podemos ver dibujados en la pantalla los bordes de las propias ventanas, los iconos, los botones, y hasta una imagen de fondo en el escritorio que posiblemente sea una fotografía digitalizada con muchos colores.

En medio de todo este despliegue de color pulsamos sobre un icono que nos va a lanzar un juego que tenemos instalado en nuestro ordenador. Este juego al empezar a funcionar nos cambia la resolución a 320 por 200 puntos y la profundidad de color a 256 colores. Podremos ver que como la resolución ha descendido, los bordes de ciertas figuras redondeadas aparecen "pixelados", es decir, formando escalones. Podemos ver mejor los pixeles porque ahora son más grandes. También al reducir el número de colores las imágenes ya tienen un aspecto "como de dibujos animados". Esto es suficiente para un juego sencillo en la mayoría de los casos, pero para ver una fotografía digital como la que teníamos en el fondo del escritorio ya nos vendrían cortos.

En medio de nuestra interesante partida con el juego, el ordenador se bloquea (algo muy común en Windows) y nos vemos obligados a reiniciarlo. Tras el arranque aparece un mensaje que nos indica que Windows va a funcionar en "modo a prueba de fallos". Una de las cosas que habrán cambiado será la resolución, que se ha reducido a 640 por 480 pixels y el número de colores que se ha quedado en 16. Podremos ver como la imagen del fondo del escritorio se ve muy fea y los iconos se ven algo más gordos que antes y con unos colores un poco extraños. Al abrir alguna ventana veremos que todo aparece un poco más grande porque hay menos resolución.

Ya volviendo al curso de programación, vamos a ver ahora cómo conseguir que nuestros programas de QBasic trabajen con más o menos resolución y más o menos profundidad de color según nos convenga en cada caso.

Ambos valores no los podemos cambiar de forma independiente, sino que van relacionados en lo que se conoce como "Modos de pantalla". Estos son los más usados:

ModoPresentaciónTextoResoluciónProfundidad
de color
SCREEN 0Interfaz de texto80 x 25 caracteres-16 colores
SCREEN 12Interfaz gráfico80 x 30 caracteres640 x 480 pixels16 colores
SCREEN 13Interfaz gráfico40 x 25 caracteres320 x 200 pixels256 colores

Además de estos tres, hay otros más, pero han quedado en desuso ya que son monocromáticos (Blanco y negro) o bien de cuatro colores. Se usaban en los ordenadores más antiguos y en los actuales es posible que ya no lleguen ni a funcionar (Producirán un error de tiempo de ejecución al intentar iniciarlos).

También existen otros modos con más resolución y con más colores, pero QBasic no los soporta. Para aprender a programar, que es lo que estamos haciendo aquí, estos tres son suficientes.

En cada caso seremos nosotros los responsables de seleccionar cual es el mejor para nuestro programa, conociendo sus ventajas e inconvenientes.

El modo 0 es el interfaz de texto que hemos venido usando hasta ahora, es el que QBasic usa por defecto si no le decimos que use otro. Si no tenemos necesidad de dibujar figuras gráficas, es el más indicado en la mayoría de los casos ya que es muy rápido.

El modo 12 es el de más alta resolución que tenemos en QBasic, nos servirá para los casos en que tengamos que dibujar diagramas o figuras más complejas con muchas líneas. Su principal inconveniente es que es bastante más lento que los otros porque el ordenador tiene que manejar muchos puntitos para dibujar la pantalla. Los colores para el modo 12 son los mismos que la paleta básica normal del interfaz de texto, es decir, estos.

Paleta de 16 colores para el modo de pantalla SCREEN 12

Hay que tener en cuenta que en el modo 12 no disponemos de los colores intermitentes como teníamos en la pantalla de texto, y que para escribir letras tenemos ciertas limitaciones que veremos en apartados posteriores.

El modo 13 es de muy baja resolución, por lo tanto las imágenes se verán muy "pixeladas" y su tamaño en puntos no podrá ser muy grande ya que "no cabrán en la pantalla". Como ventaja principal tiene la posibilidad de usar una paleta de 256 colores, algo muy valioso para los juegos, y además es bastante rápido, ya que al haber 256 colores cada pixel de la pantalla se corresponde exactamente con un byte en la memoria gráfica, y las operaciones que tiene que hacer el ordenador para dibujarla son más sencillas. Este modo de pantalla se ha usado durante años para la programación de montones de juegos para MS-DOS que todavía hoy nos ofrecen una calidad gráfica más que aceptable. Para el modo 13 los colores son los de la siguiente paleta:

Paleta de 256 colores para el modo de pantalla SCREEN 13

Como se puede ver, los primeros 16 son iguales a los VGA, a continuación una escala de grises, y los siguientes van agrupados de 24 en 24, cosa que se puede utilizar para hacer efectos como degradados o sombras. Igualmente en el modo 13 tampoco hay colores intermitentes.

El cambio de modo de pantalla en QBasic es extremadamente sencillo, basta con usar la siguiente instrucción:

SCREEN modo

Dónde modo es uno de los numeritos que hemos visto antes: 0, 12 o 13. El efecto que tiene esta instrucción es el borrado completo de la pantalla y que a partir de ahora podremos escribir y dibujar adaptándonos a la nueva resolución y a los colores que tenemos. Normalmente esto lo hacemos una vez nada más al principio del programa (si es para modo texto no hace falta) y ya no lo cambiamos más, aunque si hace falta se puede hacer todas las veces que sea necesario.

En los siguientes apartados vamos a ver cómo se pueden dibujar figuras en la pantalla gráfica una vez que la hayamos activado usando la instrucción SCREEN.

Un efecto que notaremos si tenemos un monitor moderno digital será que se apague y no volvamos a ver imagen alguna hasta pasado un instante. Lo mismo ocurrirá cuando termine un programa en modo gráfico y volvamos al editor de QBasic que es en modo texto. Si estamos trabajando con QBAsic en una ventana de Windows, para entrar a modos gráficos se pasa obligatoriamente a modo de pantalla completa, y cuandotermine el programa y volvamos al editor de QBasic posiblemente lo encontremos también a pantalla completa. Para solucionar este problema consulta el anexo 3.3 de este totorial.





2.5.3 - RENDIMIENTO EN MODO GRÁFICO

Como podremos comprobar a lo largo de estos temas dedicados a los gráficos, el rendimiento de estas operaciones es bastante bajo independientemente de que tengamos un ordenador súper moderno o la mejor tarjeta gráfica del mercado con una gran cantidad de memoria.

Este bajo rendimiento se debe principalmente a que QBasic es un lenguaje interpretado y a que las instrucciones no están optimizadas para alcanzar gran velocidad. Todas las instrucciones se reducen a dibujar puntos en la pantalla y QBasic no es capaz de dibujarlos lo suficientemente rápido.

Los modernos videojuegos en tres dimensiones y con alta resolución, millones de colores, efectos de iluminación transparencias, reflejos, sombras... se reducen a eso, a dibujar en la pantalla puntos de colores. Los programas calculan cual es el color que tiene que tener cada punto y estos se colocan a gran velocidad como valores numéricos en la memoria gráfica del ordenador. El adaptador gráfico va leyendo esa información para dibujar la pantalla entera muchas veces por segundo, mientras más mejor.

Los programas y las bibliotecas gráficas que permiten hacer eso (openGL, directX...) están escritas directamente en lenguaje ensamblador y depuradas para que todo se haga de la forma más rápida posible. También los controladores de nuestro sistema gráfico están escritos de forma que trabajan de forma sincronizada con estos programas para obtener el mayor rendimiento, mientras que QBasic utiliza el modo de pantalla VGA que se usa desde hace años y no aprovecha para nada estas tecnologías. No sabe ni que existen.

Podemos depurar un poco nuestros programas y controlar cosas como que dentro de los bucles que se repiten mucho se ejecuten el menor número de instrucciones y cálculos matemáticos posibles, pero por muchas vueltas que le demos a nuestro código, en QBasic no podemos esperar obtener buenos resultados a una velocidad aceptable. Nos tendremos que conformar con sencillos dibujos que nos van a servir para aprender a programar y poder dar el salto a un lenguaje más avanzado que nos permita usar todas estas nuevas tecnologías.













CuRSo De iNTRoDuCCióN a La PRoGRaMaCióN CoN QBaSiC
(cc) 2006 Juan M. González