Está en la página 1de 10

Sistema de Clases para Modo Grfico para C++

Autor: Rubn Alberto Calabuig.


Versin 4.1.1 estable.
Edicin: Argentina Septiembre 2012.

NDICE DE CONTENIDOS
A PARTIR DE AHORA QU?.................................................................................................................. 1
EJEMPLO 01: MOSTRAR UNA IMAGEN POR PANTALLA......................................................................1
QU NECESITAMOS?....................................................................................................................... 1
ELEMENTOS COMUNES A TODOS LOS PROYECTOS adn++.....................................................1
1.INCLUSIN DE LA LIBRERA adn++.......................................................................................1
2.DECLARACIN DE LOS ELEMENTOS MNIMOS INDISPENSABLES...................................1
ELEMENTOS PARTICULARES DEL PROYECTO...........................................................................2
EJEMPLO 01: EL PASO A PASO DE LA PROGRAMACIN.....................................................................2
PASO 01: DECLARACIN DE LOS ELEMENTOS INDISPENSABLES...............................................3
PASO 02: DECLARACIN DE LOS ELEMENTOS PARTICULARES...................................................3
PASO 03: INICIALIZACIN DEL MODO GRFICO.............................................................................3
PASO 04: INICIALIZACIN DE LA PANTALLA FSICA........................................................................4
PASO 05: INICIALIZACIN DEL SPRITE.............................................................................................5
PASO 06: PREPARAR LA EJECUCIN...............................................................................................5
PASO 07: COMENZAR EL CICLO DE EJECUCIN............................................................................5
PASO 08: FINALIZAR EL PROGRAMA ..............................................................................................6
CONCLUSIN.......................................................................................................................................... 7

SISTEMA DE CLASES PARA MODO GRFICO PARA C++

adn++
Tutorial Bsico Captulo 01
A PARTIR DE AHORA QU?
En el Captulo 00 (captulo introductorio), vimos los pasos previos al desarrollo de un proyecto en modo
grfico (desde la instalacin del IDE y la SDL, hasta la iniciacin de un proyecto adn++ a partir de una
plantilla).
Desde ahora, iremos desarrollando pequeos proyectos a modo de ejemplos, que aumentarn en su
complejidad, para que puedan alcanzar un dominio aceptable de este sistema de clases, y a travs de
l obtener un entrenamiento profundo sobre el paradigma de la programacin orientada al objeto (OOP).

EJEMPLO 01: MOSTRAR UNA IMAGEN POR


PANTALLA.
QU NECESITAMOS?
ELEMENTOS COMUNES A TODOS LOS PROYECTOS adn++
1. INCLUSIN DE LA LIBRERA adn++
En este primer ejemplo (ver proyecto ejemplo01.cbp), declararemos todos los elementos necesarios
dentro de la funcin main, la nica excepcin ser el sistema de clases adn++, al que deberemos
incluir indefectiblemente.
Para incluir a esta librera, slo debemos incorporar al archivo main.cpp la directiva de preprocesador
#include "./adn++_4.1.1/adn++.h"

2. DECLARACIN DE LOS ELEMENTOS MNIMOS INDISPENSABLES


Los elementos mnimos e imprescindibles que necesita cualquier proyecto adn++ son 5 (cinco):
1. Un objeto de la clase clsError para administrar los errores.
2. Una variable de tipo entera para almacenar los cdigos de error que vayan produciendo las
diferentes clases, y de esta manera poder analizar y actuar segn los casos.
3. Un objeto de la clase clsEvent para administrar los eventos (mouse, teclado, joystyc, etc.).
4. Un objeto de la clase clsGraphicMode para poder configurar el modo de video grfico y
administrar sus parmetros.
5. Un objeto de la clase clsScreen para administrar la pantalla de video.
Luego, en el PASO A PASO, veremos cmo declarar cada uno de estos elementos.

ELEMENTOS PARTICULARES DEL PROYECTO


Adems de los elementos mnimos e indispensables, cada proyecto necesita un conjunto de
elementos particulares que variarn en cantidad y tipos de acuerdo al tipo de proyecto de que se
trate.
En el caso particular del ejemplo01, slo necesitaremos un sprite1, el que deber ser mostrado
por pantalla.
El sistema adn++, incorpora una familia de clases relacionadas con los sprites, partiendo de una
clase abstracta bsica, la clsBasicSprite, que contiene los atributos y mtodos mnimos que
requiere cualquier sprite, pasando por la clase, tambin abstracta, clsMovilSprite, que agrega
los elementos necesarios par el movimiento (velocidad y direccin), y terminando en la clase
abstracta clsContactSprite que deriva de clsMovilSrpite, y que incorpora los elementos para
detectar contacto con otro sprite del mismo tipo.
Para mostrar una imagen por pantalla, basta con los elementos (atributos y mtodos) que
proporciona la clase clsBaseSprite, pero nos encontramos con el inconveniente que elle no es
instanciable.
Por lo tanto, debemos crear una nueva clase derivada de clsBasesprite, y modificar los
mtodos virtuales que posea la clase madre.
En el ejemplo01, se puede ver cmo y dnde hemos definido la nueva clase, a la que por tener
una figura de un avin la hemos llamado clsAvion.
Aqu reproducimos su cdigo:
//=============================================================================
// DEFINICION DE LA CLASE clsAvion.
class clsAvion: virtual public clsBaseSprite
{
protected:
void inherit(){};
// Con esto basta, ya que con los elementos heredados tenemos mas que
// suficiente.
};

Una vez definida la clase, ya tenemos los elementos necesario, slo no falta declararlos y usarlos
en el programa.
A continuacin veremos cmo.

EJEMPLO 01: EL PASO A PASO DE LA


PROGRAMACIN
Ya contamos con los elementos necesarios, ha llegado el momento de explicar el paso a paso del
programa:

1 Un sprite es un imagen de mapa de bits que se utiliza en lo videojuegos para representar a personajes (personas,
animales, plantas, piedras, artefactos, seres fantsticos, etc.) y escenarios mviles. Los sprites pueden tener o no
movimiento.

SISTEMA DE CLASES PARA MODO GRFICO PARA C++

adn++
Tutorial Bsico Captulo 01
PASO 01: DECLARACIN DE LOS ELEMENTOS INDISPENSABLES.
Declaramos los elementos indispensables para cualquier proyecto adn++:
//--------------------------------------------------------------------------//ELEMENTOS MINIMOS Y NECESARIOS PARA UN PROYECTO
//--------------------------------------------------------------------------clsError error;
// Administrador de errores.
(requerido).
int errorID=0;
// Para capturar el codigo de error.
(requerida).
clsEvent event;
// Administrador de eventos.
(requerido).
clsGraphicMode video; // Administrador de modo grafico.
(requerido).
clsScreen monitor;
// Administrador de la pantalla fisica
(requerido).

Nota: ms adelante, cuando en otros captulos trabajemos con proyectos ms complejos, veremos,
cmo es mucho ms conveniente agrupar todos estos elementos, tanto los constantes para cualquier
proyecto, como los particulares de cada uno, dentro de una clase motor donde se organicen e
interrelacionen todos ellos.

PASO 02: DECLARACIN DE LOS ELEMENTOS PARTICULARES.


Declaramos los elementos particulares para el proyecto ejemplo01:
//--------------------------------------------------------------------------//ELEMENTOS PARTICULARES DEL PROYECTO
//--------------------------------------------------------------------------clsAvion avion; // Sprite que contiene la imagen del avion.
bool end;
// Bandera control del ciclo de ejecucion del programa.
SDLKey key;
// Variable para almacenar el codigo de la tecla presionada.

PASO 03: INICIALIZACIN DEL MODO GRFICO


Intentamos detectar la resolucin de video e iniciar el modo grfico

//--------------------------------------------------------------------------// INICIALIZACION DEL MODO DE VIDEO GRAFICO.


//--------------------------------------------------------------------------errorID=video.init(AUTODETECT); // Intenta inicializar el modo video grafico
// autodetectando la resolucion de video del
// sistema. Devuelve un codigo de error que
// sera 0 (cero) si todo ha salido bien.
if(errorID) // SI HUBO ERROR
{
error.set(errorID); // guarda el codigo en el objeto error.
error.show();
// muestra el codigo de error por la salida estandar.
std::cout << endl;
return error.get(); // termina la ejecucion del programa devolviendo el
// codigo de error.
}

PASO 04: INICIALIZACIN DE LA PANTALLA FSICA


Intentamos inicializar la pantalla fsica utilizando como parmetros los valores detectados en el paso
anterior.
Los parmetros representan lo siguiente:
a)
b)
c)
d)
e)

video.getScreenWide() :
video.getScreenHigh() :
video.getScreenDeph():
DESABLED
:
RESIZABLE
:

ancho de pantalla detectado.


alto de pantalla detectado.
profundidad en bits detectada.
barra de ttulo de la ventana deshabilitada.
ventana redimensionable.

//--------------------------------------------------------------------------// INICIALIZACION DE LA PANTALLA FISICA.


//--------------------------------------------------------------------------errorID=monitor.init(
// Intenta inicializar la pantavideo.getScreenWide(), // fisica con los valores obtevideo.getScreenHigh(), // nidos por el detector de revideo.getScreenDeph(), // solucion de video. Devuelve
DESABLED,
// un codigo de error que sera
RESIZABLE
// 0 (cero) si todo ha salido
);
// bien.
if(errorID) // SI HUBO ERROR
{
error.set(errorID); // guarda el codigo en el objeto error.
error.show();
// muestra el codigo de error por la salida estandar.
std::cout << endl;
return error.get(); // termina la ejecucion del programa devolviendo el
// codigo de error.
}

SISTEMA DE CLASES PARA MODO GRFICO PARA C++

adn++
Tutorial Bsico Captulo 01
PASO 05: INICIALIZACIN DEL SPRITE
Intentamos inicializar al sprite dndole los valores bsicos y cargando la imagen desde el disco.
//--------------------------------------------------------------------------// INICIALIZACION DEL SPRIE DEL AVION.
//--------------------------------------------------------------------------avion.setName("PUCARA"); // Nombre interno para identificar al sprite.
avion.setItems(1);
// Cantidad de imagenes del sprite.
avion.setI(0);
// Indice del vector de imagenes.
errorID=avion.load("./imagenes/pucara.bmp"); // Carga el archivo de imagen.
if(errorID) // SI HUBO ERROR
{
error.set(errorID); // guarda el codigo en el objeto error.
error.show();
// muestra el codigo de error por la salida estandar.
std::cout << endl;
return error.get(); // termina la ejecucion del programa devolviendo el
// codigo de error.
}

Nota: recomiendo enfticamente el uso de imgenes de tipo .bmp porque con otros tipos suele haber
inconvenientes con las transparencias.

PASO 06: PREPARAR LA EJECUCIN


Inicializamos todos los valores previos a la ejecucin del ciclo.
//--------------------------------------------------------------------------// PREPARATIVOS PARA LA EJECUCION
//--------------------------------------------------------------------------end=false;
// Inicializacion de la variable que controla el ciclo.
avion.setX(50); // Coordenadas X e Y del sprite relacionadas con las cooravion.setY(230); // denadas de pantalla donde ser mostrada la imagen.

PASO 07: COMENZAR EL CICLO DE EJECUCIN


En este caso, el ciclo de ejecucin, no es ms que un ciclo while controlado por eventos de teclado.
El ciclo muestra la imagen del sprite por pantalla mientras no se presione la tecla ESCAPE.

//--------------------------------------------------------------------------// CICLO DE EJECUCION DEL PROGRAMA.


//--------------------------------------------------------------------------while(!end) //Este ciclo espera que se presione la tecla ESC para terminar.
{
avion.paste(avion.getX(),avion.getY(),monitor.getPtr()); // Pega el sprite
// en pantalla.
monitor.refresh(); // Refresca la pantalla.
if(event.wasEvent()) // Detecta si se produjo algun evento.
{
if(event.getEventType()==KEY_PRESSED) // Si se presiono una tecla
{
key=event.getKey(); // Guarda el codigo de la tecla.
if(key==KEY_ESCAPE) // Si se presiono ESCAPE
{
end=true; // Enciende la bandera del ciclo.
}
}
}
}

PASO 08: FINALIZAR EL PROGRAMA


Si todo ha sido correctamente programado, el programa mostrar la imagen pretendida hasta que
presionemos la tecla ESCAPE.
Concluido esto, ya el programa puede finalizar, pero es recomendable realizar un final elegante, en el
que se informe la liberacin de todos la memoria requerida y el tipo de finalizacin. Para esto, el sistema
adn++, incorpora en su plantilla, el cdigo mnimo y necesario para este final feliz ;).
//--------------------------------------------------------------------------// FIN DEL PROGRAMA.
//--------------------------------------------------------------------------// Fin sin errores
//----------------cout << "**********************************************************" << endl;
cout << "*
El proyecto adn++ a finalizado correctamente.
*" << endl;
cout << "**********************************************************" << endl;
cout << endl;
error.set(errorID); // Guarda el codigo de error en el objeto error.
error.show();
// Muestra el codigo de error por la salida estandar.
cout << endl;
return error.get(); // Fin normal del programa principal.

SISTEMA DE CLASES PARA MODO GRFICO PARA C++

adn++
Tutorial Bsico Captulo 01
CONCLUSIN
Hasta aqu llega el Captulo 01 (ejemplo01).
En este captulo hemos aprendido a derivar una clase, a instanciar objetos, a configurar el video grfico,
y particularmente, el concepto de sprite y a mostrar una imagen por pantalla.
En el prximo captulo, nuestro avin (sprite) comenzar a volar.
Espero que les sea til.
Rubn Alberto Calabuig