viernes, 29 de febrero de 2008

Videojuegos, C/C++ y SDL

He editado un texto llamado Videdojuegos, C/C++ y SDL, el cual intenta explicar un poco como realizar un videojuego, el principal objetivo es presentar una introducción corta del desarrollo de videojuegos, a los que deseen iniciar en este mundo, el texto habla un poco sobre la historia de los videojuegos, que se necesita para desarrollar un videojuego, en la parte técnica se realizan ejemplos en C/C++ utilizando la librería SDL, los ejemplos se han desarrollado utilizando el IDE Visual C++ Express 2005, aun que hay un corto ejemplo desarrollado en Dev-C++.

También un objetivo especifico se podría decir, es presentar un pequeño motor para "crear juegos" (basado en C++ y SDL), yo creo que es el mas pero mas básico, este es un conjunto de clases y librerías que se ira desarrollando, en los capítulos finales del texto. Este motor realiza el manejo del ciclo de un juego, el manejo de sprite's de una forma simple. El texto esta dirigido a los que deseen comenzar en el desarrollo de videojuegos así como para los que quieren aprender a utilizar al API de SDL, el texto es muy básico.

También entrego ejemplos desarrollados en los capítulos como proyectos de Visual C++, o si lo prefieres solamente el código fuente con los recursos (como imágenes y sonidos), aun que estos no sean necesarios para seguir el libro, pero pueden ayudar a despejar dudas sobretodo en la parte de la configuración.

Espero que les sea de utilidad, a los que deseen iniciar en el desarrollo y a los que quieran aprenden un poco sobre la API de SDL.

Vínculos para descarga:

  • El texto
  • Ejemplos (archivos de proyecto visual C++):
    • Cap 3
      • Ejemplo1
        • VC: archivo .rar 863 kb
        • Dev-C++: archivo .rar 207 kb
    • Cap 4
    • Cap 5
    • Cap 6
  • Ejemplos (solamente el código fuente y recursos), con todos los ejemplos:
  • imagenes del texto (por si alguna imagen del texto no se alcanza apreciar bien):

miércoles, 27 de febrero de 2008

Guía de instalación de SDL en Dev-C++ y Visual C++ Express

Escribí una pequeña guía que explica como se debe instalar la librería SDL, en los entornos o IDE's de DevC++ y Visual C++ Express en el sistema operativo windows xp.
La guía solo muestra como debe instalarse la API de SDL, no pretende ser un tutorial de como utilizar SDL, pero se acompaña de unos cortos ejemplos de prueba, también incluye como se adicionan algunas de las librería auxiliares, como SDL_image, SDL_mixer, etc.

Puedes acceder al tutorial mediante este vínculo: instalando SDL en windows

miércoles, 16 de enero de 2008

Guia de desarrollo con allegro (videojuego)

He realizado un juego utilizando la librería allegro y el IDE de Dev C++, este juego es un pong sencillo, lo importante de esto es el código ya que trato de reutilizar un marco de trabajo hecho por Daniel Acuña Norambuena (CURSO DE PROGRAMACIÓN DE VIDEJUEGOS CON C++ Y ALLEGRO) (artebinario@netexplora.com), al marco de trabajo presentado en este curso le realice algunas modificaciones no son muchas.

El objetivo de este código o juego ejemplo es presentar como se va añadiendo nuevas clases al marco de trabajo y mostrar la forma de cómo utilizar este marco para crear un juego, claro que todo esto tanto el código del juego como el marco de trabajo todavía le falta mucho de desarrollo, pero realmente es un buen comienzo.

La descripción de cómo se fue implementando el marco de trabajo así como la creación de nuevas clases esta dentro de la carpeta Doc\Desarrollo, este desarrollo se realizo en ciclos y cada ciclo trataba de crear un requerimiento del juego estos archivos se llaman Análisis Requerimientos Ciclo xx.doc, y se muestra el análisis a groso modo de la creación de las clases y implementación del juego, el archivo Metas Cortas.doc, es una descripci;ón en resumen de lo que se ha desarrollado en cada ciclo y el archivo Requerimiento Videojuego, fue el primer archivo que se creo, y este describe lo que se deseaba en el juego.

La parte funcional consta de los archivos:
  • pong a.layout
  • pong a.dev
  • Makefile.win
  • pong a.ico
  • pong_a_private.rc
  • Ayuda.txt
  • pong_a_private.h
  • pongA.cpp
  • Todos los archivos dentro de la carpeta lib y recursos
Espero que esto les sea de ayuda a los que apenas empiezan por el camino del desarrollo de videojuego como yo, la versión que utilice de la librería allegro es la 4.2.1 y el del Dev C++ 4.9.9.2, para abrir el proyecto solamente debes abrir el archivo pong a.dev con el Dev C++ y tener instalado el paquete de Allegro para Dev C++.

La idea es seguir desarrollando el juego así como el marco de trabajo, el que quiera aportar lo puede hacer siempre y cuando presente los cambios al público y me avise de las modificaciones. No queda más que agradecer a Daniel Acuña Norambuena por su curso, a los desarrolladores de Allegro y de DevC++, cualquier duda o comentario escriban a



descarga el código fuente: desarrollo de videojuego



Creative Commons License


Esta obra está bajo una licencia de Creative Commons.

jueves, 20 de diciembre de 2007

Guía de desarrollo de aplicaciones móviles - J2ME (3)

Guía 1 – La primera aplicación (3)

  • Ahora nos paramos en el paquete view, damos clic derecho, seleccionamos New >> Java Class… (Figura 11), y nombramos la nueva clase (Figura 12) yo la llame IntroForm.

Figura 11. Nueva Clase

Figura 12. Nombre de la Clase
De igual forma creamos una nueva clase llamada ItemsForm.

Figura 13. Estructura General
Al final de crear la MIDlet como las clases, la estructura general se vera como la figura 13, con cada uno de sus archivos en sus paquetes respectivos, en el paquete res añadí unas imágenes en formato png, las cuales serán desplegadas en algunos de los screens de la aplicación, las imágenes tienen que ser pequeñas, por ejemplo la más grande que tengo es de unos 200x140 pixeles aprox. Las imágenes las puedes añadir directamente a la carpeta res desde el Explorer de Windows.
  • Ahora el código genérico para las clase será el siguiente (IntroForm.java, ItemsForm.java):
package view;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
public class IntemsForm extends Form implements CommandListener{
public ItemsForm() {
super(" Items Menu");
initForm();
}
private void initForm() {
}
public void commandAction(Command command, Displayable displayable) {
}
}
Ambas clases parten del mismo código genérico, solamente debes cambiar el nombre que se encuentra subrayado y en negrita (ItemsForm -> ItensForm.java) para cada una de las clases (IntroForm -> IntroForm.java). Este tipo de clase son heredan la clase Form que se utilizan como, formas de visualización para el dispositivo, en ellas se pueden manejar ciertos Ítems que se adicionan a estas formas como, Imágenes, StringItem, Comandos, ChoceeGroup, TextField, etc. Todo esto para formar la interfaz grafica que visualizara el usuario, también hay que trasformar la clase para que maneje eventos, como por ejemplo al pulsar la tecla select del dispositivo en algún item de la forma se debe ejecutar cierta acción como salir de la aplicación o pasar a la siguiente visualización esto se hace mediante la implementación de la interfaz CommandListener.
En el constructor aparece la línea de código super(" Items Menu"); esta línea de código es necesaria ya que se requiere por heredar de la clase Form, y es el nombre de nuestra forman, la función initForm se utilizara para inicializar todos los ítems y comandos que manejara nuestra forma, y la función commandAction se utiliza para desarrollar el código necesario cuando ocurre algún evento por parte del usuario o el dispositivo.
  • Ahora comenzaremos a construir nuestra primera forma IntroForm, lo que se realizara es crear una pantalla de bienvenida, solamente clocaremos algunos ítems como un StrinItem que sirve para desplegar texto, y una imagen, algunos comandos y listo ya tenemos nuestra primera forma el código esta en la figura 14.
Se adicionaron 3 nuevos imports que manejan a los Ítems como Image (línea 20), ImageItem (línea 21), StringItem (línea 22), se crearon los atributos respectivos y dos atributos tipo Command que servirán para ver la siguiente pantalla o salir de la aplicación (linaes de la 32 a 34 y 39 a 40).
En la función InitForm Se inicializan los atributos sItMensaje que será el mensaje que se desplegara en pantalla para esto al constructor se le pasan 2 parámetros, el primero es el nombre de label o del Ítems y el segundo el mensaje que queremos desplegar (línea 51 y 52). Después viene la inicialización de la imagen para esto primero inicializamos un atributo tipo Image img1 con la función Image.createImage(“ruta del archivo”), en este caso la ruta la tome comenzando desde el directorio del proyecto, después el paquete res y por ultimo el nombre de la imagen png “/res/helloword.png” (línea 55) , una recomendación es que siempre que se intente cargar una imagen se realice dentro de un try y catch como se ve en el código, para evitar ejecución erróneas de la aplicación, después se inicializa el atributo imgItem1 el cual sea el que se desplegara en pantalla, el constructor recibe 3 parámetros, el primero es el nombre que se desplegara antes de la imagen, en este caso coloque puros saltos de línea para que la imagen “aparezca” casi en el centro de la pantalla del dispositivo, el segundo parámetro es la imagen que la cual ya la hemos cargado en el atributo img1, y el tercer parámetro es su distribución si se quiere que la imagen aparezca al lado izquierdo de la pantalla, en el centro, o a la derecha, en este caso se dejo que apareciera en el centro (línea 56).
Ahora inicializaremos los comandos, por ejemplo el comando que nombramos cmdExit se utilizara para finalizar la aplicación, para inicializar un comando se necesita pasar 3 atributos al constructor, el primero es el nombre con el cual aparecerá en el dispositivo, el segundo es el tipo de comando, en este caso un comando de salida y el tercero es la prioridad del comando (líneas 61 y 62), el tipo de comando Command.Exit es para salir de la aplicación, Command.Screen se utiliza para cambiar la pantalla hacia otra Forma o Lista, Command.Back para retornar a una visualización anterior, etc. Puedes ver todos los tipos de comandos con la ayuda del IDE de netbeans hay como unos 8 tipos de comandos.

Figura 14. Código IntroForm.java
Luego de inicializar los Ítems como los comandos, estos se deben adicionar a la forma, los ítems se adicionan con la función append(“nombre item”), y los comandos con addCommand(“nombre comando”) (líneas 64, 65 y 67, 68), por ultimo activos el detector de eventos llamando a la función setCommandListener(“forma o lista”), a esta hay que pasarle como parámetro un objeto en este caso la forma initForm la cual también la nombramos internamente como this (línea 73).
Ahora veremos como capturamos los eventos, esto se realiza dentro de la función commandAction (Command command, Displayable displayable), el parámetro de entrada importante en este caso es command, ya que este es el comando que se activara en el momento, el parámetro command de entrada se comparará con alguno de los dos comandos que creamos (cmdExit o cmdItems), si este comando es igual a alguno de nuestros comandos, se procederá a ejecutar cierta acción, en el caso de que sea igual al comando cmdExit se ejecutan las líneas 78 y 79 que finalizan la aplicación, y si es igual cmdItems, se ejecuta la línea 82 la cual llama a nuestra otra forma ItemsForm para que se visualice en pantalla. Una aclaración en este código y que todavía no he explicado, es la forma en como se llaman estas funciones, primero hacemos referencia a la midlet, y luego ejecutamos una función, por ejemplo en la línea 82 tenemos GuiaMidlet.midlet.getDisplay().setCurrent(GuiaMidlet.itemsForm); con lo cual queremos decir que al despliegue de nuestra midlet lo actualicemos con nuestra forma itemsForm para que se vea en pantalla, a continuación aclarare un poco esto.
  • En la explicación anterior, vimos como inicializar una forma o interfaz de usuario la cual se vera en el dispositivo, también como se capturan eventos, tal vez esta parte no se haya entendido bien pero con el código de la midlet quedara un poco más claro, el código de la midlet esta en la figura 15.
Lo que realizaremos aquí es, realizar el import respectivo del paquete en donde creamos nuestras formas el paquete view (línea 11), luego creamos un objeto de la MIDlet que sea genérico y el mismo para toda la aplicación (línea 20), luego creamos dos atributos que manejaremos de manera global de nuestras formas (introForm y itemsForm) (líneas 23 y 24).
En la función inicializar, inicializaremos nuestra MIDlet, en este caso cargaremos en memoria apenas inicia nuestra aplicación, las dos formas (líneas 31 y 32) y la aplicación la inicializaremos para que despliegue en pantalla una forma predeterminada en este caso introForm, esto se hace por medio de la función getDisplay().setCurrent(introForm) (línea 34), getDisplay obtiene el despliegue actual y setCurrent establece el despliegue actual con alguna forma o lista que pasemos como parámetro, en nuestro caso introForm.
La función startApp se ejecuta cuando la aplicación inicia, este lugar será apropiado para establecer nuestro objeto global de la MIDlet, el cual lo hemos llamado midlet (línea 45), ya que cuando se ejecuta esta función ya se ha realizado el proceso de inicialización de la MIDlet.
La función destroyApp se ejecuta cuando deseamos finalizar la aplicación, aquí colocamos a nuestra dos formas (introForm y itemsForm) en nulo (líneas 52 y 53) y llamamos a recolector de basura para que libere memoria del dispositivo (línea 54).
Espero que con esto ya que de más clara la explicación que realice de la clase introForm.java

Figura 15. Código GuiaMidlet.java
  • Ahora el código de la forma ItemsForm.java figura 16. En este código no hay nada raro, solamente se añadió un comando el cual se utilizara para salir de la aplicación.

Figura 16. Código ItemsForm.java

  • Después de haber realizado la respectiva codificación de los archivos, podremos ver ahora lo que se ha creado ejecutando el proyecto, primeros colocamos el cursor del Mouse en el proyecto, presionamos el clic derecho del Mouse, seleccionamos Build Project (figura 17.), luego de nuevo damos click derecho en el proyecto y seleccionamos Run Project
Figura 17.
Figura 18.
Luego se ejecuta automáticamente el emulador (Figura 19.), seleccionamos el nombre de la aplicación y corremos la aplicación.

Figura 19.
Ahora nos aparece esto (figura 20), si seleccionamos entrar nos pasara a la siguiente forma (figura 21), y si seleccionamos Salir cerraremos la aplicación, en la siguiente pantalla que visualizamos (figura 21) solo hay un comando, Salir, lo seleccionamos y finalizamos nuestra aplicación:
Figura 20
Espero que con esta pequeña introducción a desarrollo de aplicaciones móviles, haya aumentado su motivación, la aplicación no realiza gran cosa, pero lo que si funciona es lo que va de fondo, trate de presentarles un código funcional y genérico que puedan reutilizar para sus aplicaciones, en una siguiente guía tratare de presentar como manejar algunos de los Ítems que se pueden adicionar a la interfaz de usuario y algunas otras cosas más
Cualquier comentario pueden hacerlo a: