You are on page 1of 13

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

UNIVERSIDAD DEL CAUCA FACULTAD DE INGENIERIA ELECTRNICA Y TELECOMUNICACIONES PROGRAMA DE INGENIERIA DE SISTEMAS GUIA DE LABORATORIO ING. NORMAN MUOZ MOTOR DE JUEGOS EN WINDOWS 1 OBJETIVOS

Conocer un motor de juegos para el entorno Windows. 2 2.1 PLOP2D: MOTOR DE JUEGOS QU ES UN MOTOR DE JUEGOS?

Al pensar en los juegos que uno frecuentemente juega, es posible determinar que hay elementos comunes que se aplican a todos los juegos, como por ejemplo, el fondo, una pantalla de presentacin, msica de fondo, etc. Esto lleva a pensar que estn creados en torno a un motor de juegos. Un motor de juegos es especialmente til cuando se piensa en crear ms de un juego y no tener que reinventar la rueda cada vez que se cree un juego. La idea es pensar en que funcionalidad comn van a tener todos los juegos que desee crear y escribirla una sola vez, para posteriormente reusarla. Un motor de juegos representa una organizacin del cdigo de un juego de manera que las tareas generales de la aplicacin sean separadas de las tareas especficas. El beneficio de esto es que el desarrollador de juegos puede adicionar nuevas caractersticas para incorporarlas en nuevos juegos. Adems al usar un motor de juegos se simplifica el cdigo en los juegos y se centra la atencin en el cdigo propio del juego, de hecho, la mayora de desarrolladores de juegos comerciales tienen su propio motor de juegos especfico. PLOP2D es un motor de juegos desarrollado al interior del rea de Inters en Desarrollo de Juegos del Grupo de Investigacin GTI del Departamento de Sistemas de la Universidad del Cauca y que provee la funcionalidad bsica para la creacin de juegos 2D. PLOP2D est desarrollado usando programacin estructurada y consta de 16 funciones (en su versin 1.0) que permiten dibujar figuras bsicas (lneas, crculos, etc.), pintar bitmaps y sprites, escribir texto, manejar teclado y ratn y reproducir sonidos. 2.2 INSTALACION EN DEV-CPP

Descargue de la pgina de la asignatura el archivo comprimido que tiene la librera plop2d y el archivo de cabecera respectivo. Descomprima el archivo de cabecera (plop2d.h) en la carpeta include que corresponde al directorio donde est instalado Dev-Cpp (por ejemplo C:\Dev-Cpp\include). Posteriormente descomprima el archivo plop2d.lib en la carpeta lib del directorio donde est instalado Dev-Cpp (por ejemplo C:\DevCpp\lib). 2.3 CREACION DEL PROYECTO EN DEV-CPP

Cree un nuevo proyecto en Dev-Cpp que tenga estas caractersticas: Tipo de proyecto: Aplicacin Windows Opciones del proyecto: En Lenguaje C

1 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

Despus de escoger el nombre y la carpeta donde lo va a guardar el proyecto, debe aparecer un archivo con nombre main.c que tiene varias lneas de cdigo. Brrelas todas y guarde el archivo en la misma carpeta del proyecto, dejndole el mismo nombre (main.c) Posteriormente vaya a las opciones del proyecto en el men Proyecto y haga clic. Se conjunto de opciones, elija la opcin parmetros y en linker adicione estas dos lneas: C:/Dev-Cpp/lib/plop2d.lib C:/Dev-Cpp/lib/libwinmm.a le mostrarn un

Estas libreras se utilizan para poder enlazar las funciones correspondientes al motor de juegos y al sonido. 2.4 INICIALIZACION Y TERMINACION DEL MOTOR

Todo motor de juegos requiere inicializarlo y terminarlo, esto es, requiere acciones necesarias para la creacin de las partes correspondientes al juego y liberar recursos cuando ya se han usado. Para poder usar el motor de juegos primero es necesario incluir el archivo de cabecera "plop2d.h". En PLOP2D la inicializacin se hace llamando a la funcin iniciarplop2d( ), la cual requiere que se le pase como argumentos el ancho y el alto de la ventana. El prototipo de la funcin es: int iniciarplop2d( const int ancho, const int alto );

Antes de terminar el main( ), se debe llamar a la funcin terminarplop2d( ), que garantiza que los recursos usados en la inicializacin se liberen. El prototipo de la funcin es: void terminarplop2d( );

A continuacin se muestra un ejemplo de la creacin de una aplicacin de 800 por 600 pxeles de resolucin. /* Archivo de cabecera del motor de juegos */ #include <plop2d.h>
2 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

/* Punto de entrada al programa */ int main( ) { /* Llamado a la funcin para iniciar el motor en 800 x 600 */ iniciarplop2d( 800, 600 ); /* Llamado al mtodo para terminar el motor */ terminarplop2d( ); } 2.5 LA FUNCION DE DIBUJADO

Para que sea posible dibujar despus de haber inicializado el motor, se debe declarar una funcin que se encargue de las operaciones de dibujado. Esta funcin ser llamada automticamente por el motor y ah se puede incluir todo lo necesario con la representacin grfica que se desee. Para ello la funcin debe tener esta forma: void nombre( );

donde el nombre ser el que usted decida darle. Posteriormente entre la funcin de inicializacin y la de terminacin se escribe la lnea: pintar = nombre; pintar es un puntero (declarado en plop2d.h) que apunta a una funcin y que en este caso ser la que corresponde al nombre que se le haya dado. En el siguiente ejemplo se muestra el cdigo completo. /* Archivo de cabecera del motor de juegos */ #include <plop2d.h> /* Prototipo del procedimiento de dibujado */ void onpintar( ); /* Punto de entrada al programa */ int main( ) { /* Llamado a la funcin para iniciar el motor en 800 x 600 */ iniciarplop2d( 800, 600 ); pintar = onpintar; /* Llamado al mtodo para terminar el motor */ terminarplop2d( ); } /* Implementacin del procedimiento de dibujado */ void onpintar( ) { } Note que despus de declarado el prototipo se debe hacer la implementacin respectiva. 2.6 ELIGIENDO LOS COLORES

Un tema que impacta en lo referente a las grficas en los juegos es el color. La funcin principal del color en un sistema de cmputo es reflejar la naturaleza fsica del color en los confines de un computador. Esta naturaleza fsica no es difcil de imitar, pues al mezclar colores podemos obtener otros ms y eso mismo se puede obtener en un sistema de cmputo.
3 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

Los monitores a color proveen la forma de producir color en un computador. Un monitor a color tiene tres pistolas de electrones: roja, verde y azul. La salida de estas tres pistolas convergen en cada pxel de la pantalla, que al excitar fotsferos producen el color apropiado. Las intensidades combinadas de cada pistola determinan el color del pxel resultante. El sistema de color en Windows es muy similar a los sistemas fsicos usados por los monitores; forman un color nico usando intensidades variantes de los colores rojo, verde y azul. Por lo tanto, los colores en Windows son representados por la combinacin de las intensidades numricas de los colores primarios (Rojo, Verde y Azul). Este sistema es conocido como RGB (Red, Green, Blue). En la tabla 1 se muestra los valores numricos de rojo, verde y azul para algunos de los colores bsicos. Tabla 1. Valores numricos de rojo, verde y azul para algunos de los colores bsicos Color Rojo Verde Azul Blanco 255 255 255 Negro 0 0 0 Gris claro 192 192 192 Gris oscuro 128 128 128 Rojo 255 0 0 Verde 0 255 0 Azul 0 0 255 Amarillo 255 255 0 Morado 255 0 255 Para poder utilizar colores en PLOP2D se debe definir un color para la lnea con que se desea dibujar y otro para el relleno que se desea dar a las figuras que lo ameriten. El color de lnea se define con el procedimiento colorlinea( ) al que se le pasa como argumento las intensidades en rojo, verde y azul, respectivamente. A continuacin se muestra el prototipo del procedimiento: void colorlinea( const byte rojo, const byte verde, const byte azul ); El color de relleno se define con un llamado al procedimiento colorrelleno( ), cuyo prototipo es: void colorrelleno( const int tipo, const byte rojo, const byte verde, const byte azul );

Este procedimiento recibe como argumentos el tipo de relleno, el cual puede ser 0, si el relleno es transparente, en cuyo caso los dems parmetros no se tienen en cuenta, o 1 si el relleno es slido. Los otros argumentos corresponden a las intensidades de los colores con los cuales se desea dicho relleno. 2.7 LIMPIANDO PANTALLA

Una de las operaciones ms utilizadas cuando se dibuja, es la de limpiar pantalla. PLOP2D provee un procedimiento para limpiar pantalla cuyo prototipo es: void limpiar( );

Para poder limpiar con un color especfico previamente se debe fijar el color de relleno. A continuacin se muestra un ejemplo: /* Archivo de cabecera del motor de juegos */ #include <plop2d.h> /* Prototipo del procedimiento de dibujado */ void onpintar( ); /* Punto de entrada al programa */ int main( ) {
4 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

/* Llamado a la funcin para iniciar el motor en 800 x 600 */ iniciarplop2d( 800, 600 ); pintar = onpintar; /* Llamado al mtodo para terminar el motor */ terminarplop2d( ); } /* Implementacin del procedimiento de dibujado */ void onpintar( ) { /* Se fija el color azul de relleno para limpiar pantalla */ colorrelleno( 1, 0, 128, 255 ); /* Llama al procedimiento para limpiar pantalla */ limpiar( ); } 2.8 DIBUJANDO FIGURAS BASICAS

Todos los sistemas de cmputo usan alguna especie de sistemas de coordenadas grficas para especificar como estn organizados los puntos en una ventana o en la pantalla. El sistema de coordenadas grfico tpicamente ubica el origen (0, 0) del sistema, as como los ejes y las direcciones e incrementos para cada uno de estos. Eje Y

(0, 0)

Eje X

Las grficas en Windows implementan un sistema de coordenadas similar para especificar cmo y dnde tienen lugar las operaciones de dibujado. El sistema de coordenadas de Windows tiene un origen localizado en la esquina superior izquierda de la ventana, con incrementos hacia la derecha en el eje X e incrementos hacia abajo en el eje Y. Todos los valores en el sistema de coordenadas de Windows son enteros positivos. La figura muestra como se ve este sistema de coordenadas. (0, 0)

Eje X

Eje Y
5 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

2.8.1

DIBUJANDO PUNTOS

Para dibujar puntos en la pantalla se utiliza el procedimiento punto( ) que recibe la posicin en x, la posicin en y, y el color que se usa para dibujar el pxel. void 2.8.2 punto( const int x, const int y, const dword color ); PINTANDO LINEAS

Para pintar lneas, primero hay que definir la posicin inicial en (x, y) y despus la posicin final. void 2.8.3 linea( const int x1, const int y1, const int x2, const int y2 ); DIBUJANDO RECTANGULOS

Para pintar rectngulos se llama a la funcin rectangulo( ) pasando la posicin inicial en x, la posicin inicial en y, la posicin final en x y la posicin final en y. void 2.8.4 rectangulo( const int x1, const int y1, const int x2, const int y2 ); PINTANDO ELIPSES

El procedimiento elipse( ) permite crear, adems de elipses, crculos. Para ello hay que proporcionarle la posicin inicial en x, y; y los radios (mayor y menor). void 2.8.5 elipse( const int x, const int y, const int radio1, const int radio2 ); PINTANDO CIRCULOS

El procedimiento circulo( ) permite crear crculos pasndole la posicin inicial en x, y; y el radio. void 2.8.6 circulo( const int x, const int y, const int radio ); EJEMPLO DE DIBUJADO DE FIGURAS BASICAS

/* Archivo de cabecera del motor de juegos */ #include <plop2d.h> /* Variable global para la posicin del circulo */ int xcirculo = 30; /* Prototipo del procedimiento de dibujado */ void onpintar( ); /* Punto de entrada al programa */ int main( ) { /* Llamado a la funcin para iniciar el motor en 800 x 600 */ iniciarplop2d( 800, 600 ); pintar = onpintar; /* Llamado al mtodo para terminar el motor */ terminarplop2d( ); } /* Implementacin del procedimiento de dibujado */
6 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

void onpintar( ) { /* Se fija el color azul de relleno para limpiar pantalla */ colorrelleno( 1, 0, 128, 255 ); /* Llama al procedimiento para limpiar pantalla */ limpiar( ); /* Dibuja un punto rojo en el centro de la pantalla */ punto( 400, 300, RGB( 255, 0, 0 ) ); /* Elige un color blanco de lnea */ colorlinea( 255, 255, 255 ); /* Elige un color amarillo de relleno */ colorrelleno( 1, 255, 255, 0 ); /* Dibuja un rectngulo */ rectangulo( 10, 20, 200, 100 ); /* Elige un color verde de relleno */ colorrelleno( 1, 128, 255, 0 ); /* Pinta un crculo que se mueve hacia la derecha */ circulo( xcirculo, 150, 30 ); /* Actualiza la posicin del crculo */ if( xcirculo < 800 ) xcirculo++; else xcirculo = 30; } 2.9 MOSTRANDO TEXTO

En los juegos es necesario mostrar informacin al usuario, ya sea mediante el uso de conos o a travs de texto. Para mostrar texto en pantalla se utiliza el procedimiento escribir( ), el cual recibe como argumento la posicin en pantalla donde se desea mostrar el texto y el mensaje a mostrar en forma de cadena de texto. Si se desea, previamente se debe elegir el color de la lnea usando el procedimiento colorlinea( ) y si se desea que tenga un fondo se utiliza el procedimiento colorrelleno( ). A continuacin se muestra el prototipo del procedimiento: void escribir( const int x, const int y, string mensaje ) {

En el siguiente ejemplo se muestra como trabaja el procedimiento para escribir en pantalla. Tenga en cuenta que slo se est mostrando la parte correspondiente a la escritura, la cual va en la funcin de dibujado. /* Implementacin del procedimiento de dibujado */ void onpintar( ) { /* ... */ /* Elige un color blanco de lnea */ colorlinea( 255, 255, 255 ); /* Relleno transparente */ colorrelleno( 0, 0, 128, 255 ); /* Escribe un mensaje de texto */ escribir( 20, 200, "Universidad del Cauca" ); }

7 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

2.10 DIBUJANDO BITMAPS Las imgenes son extremadamente importantes en los juegos de computador porque proveen por s mismas el dar sentido al juego mediante la incorporacin del trabajo artstico. Es cierto que es agradable ser capaz de dibujar lneas, rectngulos y elipses usando las funciones ya vistas, pero toma un gran trabajo dibujar personajes significativos usando nicamente primitivas grficas. Por lo anterior es mucho mejor usar imgenes de mapas de bits (bitmaps) creadas previamente. El proceso de dibujado de bitmaps incluye dos pasos: Cargar la imagen:

Este paso incluye declarar una variable de tipo bitmap en la cual se guardar la informacin de la imagen a cargar. Posteriormente se debe hacer una llamado a la funcin para cargar la imagen, pasndole la ruta donde se encuentra el archivo de mapa de bits. bitmap bitmap bmp; cargarbitmap( string archivo );

Dibujar la imagen:

Una vez cargada la imagen, en el procedimiento para pintar, se procede a llamar a la funcin dibujarbitmap( ) que recibe la posicin en x y la posicin en y en pantalla donde se desea dibujar la imagen, la variable de tipo bitmap que contiene la informacin de la imagen y decir si se desea que sea transparente o no. void dibujarbitmap( const int x, const int y, bitmap bmp, const int transparente );

Para que la imagen sea transparente, las zonas que no se desea que se pinten (transparentes) deben ser de color negro. A continuacin se muestra un ejemplo donde se pinta una imagen. Para ello, previamente, guarde una imagen en la misma carpeta donde guard el proyecto y se est generando el ejecutable. /* Archivo de cabecera del motor de juegos */ #include <plop2d.h> /* Prototipo del procedimiento de dibujado */ void onpintar( ); /* Prototipo del procedimiento de dibujado de un bitmap */ void pintarbitmap( ); /* Variable global para guardar el bitmap */ bitmap bmp; /* Punto de entrada al programa */ int main( ) { /* Llamado a la funcin para iniciar el motor en 800 x 600 */ iniciarplop2d( 800, 600 ); /* Puntero a la funcin de dibujado */ pintar = onpintar; /* Carga el bitmap */ bmp = cargarbitmap( "imagen.bmp" ); /* Llamado al mtodo para terminar el motor */ terminarplop2d( ); }
8 Programacin de juegos en Windows

Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

/* Implementacin del procedimiento de dibujado */ void onpintar( ) { /* Se fija el color azul de relleno para limpiar pantalla */ colorrelleno( 1, 0, 128, 255 ); /* Llama al procedimiento para limpiar pantalla */ limpiar( ); /* Llama al procedimiento para dibujar el bitmap cargado anteriormente */ pintarbitmap( ); } /* Implementacin del procedimiento de dibujado de un bitmap */ void pintarbitmap( ) { /* Dibuja un bitmap transparente */ dibujarbitmap( 30, 30, bmp, 1 ); } 2.11 REPRODUCIENDO SONIDOS Para reproducir un sonido, hacemos un llamado al procedimiento sonido( ), que recibe la ruta donde se encuentra el archivo en formato .wav (por ahora en esta versin no acepta ningn otro formato). Adicionalmente debemos decirle si queremos que se reproduzca automticamente una vez termine. El prototipo es: void sonido( string strArchivo, const int repetir );

2.12 CONTROLANDO EL JUEGO Controlar el juego significa proveer la interaccin necesaria, para que el usuario pueda tomar decisiones en el juego y pueda hacrselo saber al programa. En PLOP2D hay dos formas de controlar el juego: mediante teclado y mediante el ratn. 2.12.1 EL TECLADO El teclado ha sido el dispositivo de entrada de los computadores desde su creacin. An ms que el ratn, el joystick y otros dispositivos de entrada de usuario, el teclado ha extendido sus capacidades de entrada a los juegos. Como mnimo, en un juego puedes contar con que siempre habr un teclado. El teclado es dispositivo de entrada muy til en un amplio rango de juegos, pero son ms tiles en juegos que tienen que ver con disparos y movimiento. Esta utilidad es evidente en el creciente nmero de juegos de arcada que usan botones, ms que poderosos joystick digitales que estn disponibles. Para poder obtener las teclas que se han presionado debemos hacer un llamado a la funcin teclaabajo( ). A la funcin se le debe pasar la tecla por la cual deseamos saber el estado (1 presionado 0 arriba). La tecla por la que se pregunta se encuentra "mapeada" virtualmente mediante una constante declarada en los archivos de cabecera de Windows. Toda tecla virtual empieza con VK_ y le sigue un nombre descriptivo a sta. A continuacin se muestra un listado con la mayora de constantes para las teclas ms usuales:

9 Programacin de juegos en Windows

VK_LBUTTON (01) Left mouse button VK_RBUTTON (02) Right mouse button VK_CANCEL (03) Control-break processing VK_MBUTTON (04) Middle mouse button (three-button mouse) VK_XBUTTON1 (05) Windows 2000/XP: button VK_XBUTTON2 (06) Windows 2000/XP: button - (07) Undefined VK_BACK (08) BACKSPACE key VK_TAB (09) TAB key - (0A-0B) Reserved VK_CLEAR (0C) CLEAR key VK_RETURN (0D) ENTER key - (0E-0F) Undefined VK_SHIFT (10) SHIFT key VK_CONTROL (11) CTRL key VK_MENU (12) ALT key VK_PAUSE (13) PAUSE key VK_CAPITAL (14) CAPS LOCK key VK_KANA (15) Input Method Editor (IME) Kana mode VK_HANGUEL (15) IME Hanguel mode (maintained for compatibility; use VK_HANGUL) VK_HANGUL (15) IME Hangul mode - (16) X1 mouse

Undefined VK_JUNJA (17) IME Junja mode VK_FINAL (18) IME final mode VK_HANJA (19) IME Hanja mode VK_KANJI (19) IME Kanji mode - (1A) Undefined VK_ESCAPE (1B) ESC key VK_CONVERT (1C) IME convert VK_NONCONVERT (1D) IME nonconvert VK_ACCEPT (1E) IME accept VK_MODECHANGE (1F) IME mode change request VK_SPACE (20) SPACEBAR VK_PRIOR (21) PAGE UP key VK_NEXT (22) PAGE DOWN key VK_END (23) END key VK_HOME (24) HOME key VK_LEFT (25) LEFT ARROW key VK_UP (26) UP ARROW key VK_RIGHT (27) RIGHT ARROW key VK_DOWN (28) DOWN ARROW key VK_SELECT (29) SELECT key VK_PRINT (2A) PRINT key VK_EXECUTE (2B) EXECUTE key VK_SNAPSHOT (2C)

PRINT SCREEN key VK_INSERT (2D) INS key VK_DELETE (2E) DEL key VK_HELP (2F) HELP key (30) 0 key (31) 1 key (32) 2 key (33) 3 key (34) 4 key (35) 5 key (36) 6 key (37) 7 key (38) 8 key (39) 9 key - (3A-40) Undefined (41) A key (42) B key (43) C key (44) D key (45) E key (46) F key (47) G key (48) H key (49)

X2

mouse

Universidad de Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Programa de Ingeniera de Sistemas I key (4A) J key (4B) K key (4C) L key (4D) M key (4E) N key (4F) O key (50) P key (51) Q key (52) R key (53) S key (54) T key (55) U key (56) V key (57) W key (58) X key (59) Y key (5A) Z key VK_LWIN (5B) Left Windows key Natural keyboard) VK_RWIN (5C) Right Windows keyboard) VK_APPS (5D) Applications keyboard) - (5E) Reserved Laboratorio de Introduccin a la Informtica key (Microsoft VK_F2 (71) F2 key (Natural VK_F3 (72) F3 key VK_F4 (73) F4 key VK_F5 (74) F5 key VK_SLEEP (5F) Computer Sleep key VK_NUMPAD0 (60) Numeric keypad 0 key VK_NUMPAD1 (61) Numeric keypad 1 key VK_NUMPAD2 (62) Numeric keypad 2 key VK_NUMPAD3 (63) Numeric keypad 3 key VK_NUMPAD4 (64) Numeric keypad 4 key VK_NUMPAD5 (65) Numeric keypad 5 key VK_NUMPAD6 (66) Numeric keypad 6 key VK_NUMPAD7 (67) Numeric keypad 7 key VK_NUMPAD8 (68) Numeric keypad 8 key VK_NUMPAD9 (69) Numeric keypad 9 key VK_MULTIPLY (6A) Multiply key VK_ADD (6B) Add key VK_SEPARATOR (6C) Separator key VK_SUBTRACT (6D) Subtract key VK_DECIMAL (6E) Decimal key VK_DIVIDE (6F) Divide key VK_F1 (70) F1 key VK_F6 (75) F6 key VK_F7 (76) F7 key VK_F8 (77) F8 key VK_F9 (78) F9 key VK_F10 (79) F10 key VK_F11 (7A) F11 key VK_F12 (7B) F12 key VK_F13 (7C) F13 key VK_F14 (7D) F14 key VK_F15 (7E) F15 key VK_F16 (7F) F16 key VK_F17 (80H) F17 key VK_F18 (81H) F18 key VK_F19 (82H) F19 key VK_F20 (83H) F20 key VK_F21 (84H) F21 key VK_F22 (85H) F22 key VK_F23 (86H) F23 key VK_F24 (87H) F24 key - (88-8F) Unassigned VK_NUMLOCK (90) NUM LOCK key VK_SCROLL (91) SCROLL LOCK key (92-96) 11

key

(Natural

Universidad de Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Programa de Ingeniera de Sistemas OEM specific - (97-9F) Unassigned VK_LSHIFT (A0) Left SHIFT key VK_RSHIFT (A1) Right SHIFT key VK_LCONTROL (A2) Left CONTROL key VK_RCONTROL (A3) Right CONTROL key VK_LMENU (A4) Left MENU key

El prototipo de la funcin teclaabajo( ) es el siguiente: int teclaabajo( const int tecla ); Esta funcin se puede llamar desde cualquier parte del programa, aunque se recomienda que haya un procedimiento que evalu el estado de las teclas necesarias y sea llamado desde el procedimiento de dibujado antes que se realice cualquier accin. 2.12.2 EL RATON Aunque el teclado est posicionado en el lugar de los dispositivos de entrada de usuario ms necesarios, la naturaleza grfica de los computadores actuales ha establecido al ratn, o a un dispositivo apuntador similar, como un dispositivo estndar. El ratn sin embargo no comparte un amplio rango de aplicaciones en juegos como si lo hace el teclado. Lo anterior se debe a que no muchas aplicaciones siguen el paradigma de apuntar y hacer clic. El los juegos, la utilidad del ratn depende totalmente del tipo de juego, y por lo tanto, del tipo de interaccin de usuario dictada por el juego. As por ejemplo un juego de estrategia en tiempo real requiere que se seleccionen las unidades para poder moverlas de un lugar a otro y esta caracterstica es mucho ms fcil de realizar con el ratn que con el teclado o con un joystick. Para poder usar el ratn en el juego lo primero que debemos hacer es declarar una funcin para el manejo del evento cuando el ratn se mueva y otro puntero a otra funcin para cuando se haga clic. Esto lo hacemos antes del main( ). Posteriormente, y al igual que con la funcin de dibujado, ponemos punteros a que apunten a cada una de las funciones de dibujado. A continuacin se muestra un ejemplo: /* Procedimiento para controlar cuando se presiona un botn del ratn */ void onclicraton( const int x, const int y ); /* Mtodo para controlar cuando se mueve el ratn */ void onmueveraton( const int x, const int y, const int boton ); /* Punto de entrada al programa */ int main( ) { /* Inicia motor grfico */ iniciarplop2d( 800, 600 ); /* Define cual es la funcin de proceso de clics */ clicraton = onclicraton; /* Define cual es la funcin de proceso de movimiento de ratn */ mueveraton = onmueveraton; /* Elige un color blanco de lnea */ colorlinea( 255, 255, 255 ); /* Termina el motor grfico */ terminarplop2d( ); return 0; }
Laboratorio de Introduccin a la Informtica 12

Universidad de Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Programa de Ingeniera de Sistemas

/* Implementacin del mtodo para controlar cuando se presiona un botn del ratn */ void onclicraton( const int x, const int y ) { /* Muestra un mensaje de texto */ escribir( 10, 10, "Se hizo clic" ); } /* Implementacin del mtodo para controlar cuando se mueve el ratn */ void onmueveraton( const int x, const int y, const int boton ) { /* Si est presionado el botn izquierdo */ if( boton & MK_LBUTTON ) { /* Muestra un mensaje de texto */ escribir( 10, 30, "Se hizo clic, mientras se mueve" ); } } 3 REFERENCIAS BIBLIOGRAFICAS

MORRISON Michael. Sams Teach Yourself Game Programming in 24 Hours. Sams Publishing, 2003

Laboratorio de Introduccin a la Informtica

13

You might also like