Feudo
21Nov/120

Codear Hardcore

Una nueva competencia CODEAR se inicia, la última del año, está vez nuevamente hay que trabajar con un concepto en vez de un tema, así que hay bastante libertad creativa, está vez hay que realizar un juego muy difícil, pero no frustrante.

Link Competencia

5Jul/120

Codear Demo

Nuevamente se abre un CODEAR en la comunidad de DUVAL.
Esta vez tocará crear un demo que envicie al punto de hacer que los jugadores deseen tener el juego completo, lo cual exige al máximo las habilidades de diseñador.

Como esta vez (y siendo la primera vez en este concurso) se permitirá usar juegos creados con anterioridad, he decidido participar con Rescate en Dhu Nun, a si lanzo de una vez el demo y vemos que tal me va.

Codear DEMO

14Abr/120

Mundial Futbolín

Como no quería quedarme fuera de este codear, finalmente logré terminar un juego bastante simple de futbolín (metegol, taca taca, etc). El juego aspira a ser algo simple pero divertido, se pueden jugar partidos rápidos o el modo campeonato que permite escoger un equipo entre los 32 países que jugaron el mundial e sudafrica.

El control es íntegramente con el mouse, de izquierda a derecha se mueven las fichas o jugadores y de abajo hacia arriba se rota los jugadores, es importante señalar que la velocidad con que movamos el mouse repercutirá en cuan fuerte le pegamos a la bola.

futbolín

Pueden ver un pequeño vídeo, donde está capturado el movimiento del mouse, para que se den una idea de como se juega:
[youtube]http://www.youtube.com/watch?v=ZSIPKj0z1mU[/youtube]

El juego está programado en vb6 usando la librería dxlib32 ya que tuve poco tiempo para el desarrollo del juego y preferí usar algo rápido, originalmente había pensando que el juego fuera en 3D usando python + panda3D para que fuese multiplataforma.

No hay menú de configuración, sin embargo en la misma carpeta donde está el juego pueden encontrar el archivo "config.ini" donde pueden modificar la configuración de varios parámetros, como son el sonido, sensibilidad del mouse, etc.

Descarga:
Pueden descargar una versión instalable con todas las DLL y dependencias acá (si solo lo quieren probar, está es la mjor opción)
Instalable

Pueden descargar el binario desde acá (necesitan descargar y registrar las DLL de la librería dxlib32)
Binario

Código fuente (vb6) con sus asset en XCF
fuente

15Feb/120

Codear Futbol no convencional.

Nuevamente ha llegado otra entrega del conocido y clásico certamen de programación de videojuegos de la comunidad Argentina de Duval (Ex comunidad ADVA).

El tema de esta ocasión es el fútbol, pero tiene el añadido que debe ser un fútbol no convencional, lo cual permite hablar de todo tipo de variaciones, ya sea matar zombies con la pelota o combates a muerte para poder anotar.

La fecha limite para inscribir un proyecto jugable es el 10 de abril.

Reglas e inscripciones en Duval.

11Feb/120

Leer XML en NET

Aunque hace tiempo que no escribo por acá, Dhu nun sigue activo y avanzando, la meta es alcanzar la siguiente versión para la competencia de la comunidad libre loserjuegos la cual también se dedica a la programación de videjuegos y para mi grata sorpresa está principalmente orientada a Python, Así que espero ir agregando contenido nuevo sobre el proyecto.

Sin embargo, el día de hoy, quiero compartir algo que me sacó más de una cana en su momento, que es leer de forma simple un archivo XML usando net, algo que en teoría es bastante simple (efectivamente lo es) pero que tiene un par de trucos que pueden dar más de un dolor de cabeza y que siempre me hicieron preferir el viejo y confiable sistema de INI para mis proyectos. Sin embargo, esta nueva entrega de Dhu Nun vendrá con soporte para varios idiomas (soñar no cuesta mucho y si ya estoy trabajando como chino para sacar un juego, no viene mal transpirar extra para tener una versión en ingles) y necesito algo más avanzado que los INI para almacenar los diálogos.

La estructura que voy a usar dentro de Dhu Nun es la siguiente:



<?xml version="1.0" encoding="utf-8" ?>
<dialogos>
<Message id="0"><![CDATA[
Acá podemos agregar cualquier texto, incluyendo < > & ' y "
sin que se codifique.
]]>
</Message>
<Message id="1"><![CDATA[ Juego Nuevo ]]></Message>
<Message id="2"><![CDATA[ Cargar Juego ]]></Message>
<Message id="3"><![CDATA[ Grabar Juego ]]></Message>
<Message id="4"><![CDATA[ Salir ]]></Message>
</dialogos>


Como ven, la estructura es bastante simple, el elemento "dialogos" es el contenedor de todo, y dentro de él, cada mensaje o dialogo independiente es un elemento de nombre "Message", los diferencio por medio del atributo "id" y será la llave para identificar cada mensaje, cada idioma tiene su propio archivo XML.

El código para leer eso, es el siguiente:



Imports System.Xml
...
...
...
...
Using reader As XmlReader = XmlReader.Create(APP.PathRecursos.Diag & "sistema.xml")
.. While reader.Read()
.... If reader.IsStartElement() Then
...... If reader.Name = "Message" Then
........ attribute = reader("id")
........ If attribute IsNot Nothing Then
.......... ID = CInt(attribute)
........ End If
........ If reader.Read() Then
.......... Texto = reader.Value.Trim
........ End If
........ LstTextSistema.Add(ID, Texto)
...... End If
.... End If
.. End While
End Using


Analicemos el código paso a paso:

Lo primero es importar la referencia para trabajar con XML, esto se hace con
Imports System.Xml
Y debe estar al inicio del modulo o formulario (no la función) donde vamos a leer el documento XML

Using reader As XmlReader = XmlReader.Create(APP.PathRecursos.Diag & "sistema.xml")
Acá estamos indicando que vamos a crear un objeto de nombre "reader", el cual será usado para leer el archivo XML que abrimos con XmlReader.Create
App.PathRecursos.Diag es una variable del programa que señala la ruta donde están alojados los archivos de diálogos según sea el idioma seleccionado.

While reader.Read()
El bucle que va a recorrer todo el archivo XML, elemento por elemento, en mi caso, recorre el elemento "dialogos" y cada uno de los "Message".

If reader.Name = "Message" Then
En cada paso del bucle, el objeto "reader" toma el valor de un elemento del documento XML, con la propiedad "name" podemos saber a que elemento está apuntando, en este caso, aplico un condicional para saber si estoy leyendo los elementos "Message" pues son estos elementos los que contienen los mensajes y de esta forma dejo afuera el elemento "dialogos" que no es solo el contenedor o cualquier otro elemento que desee agregar a futuro.

attribute = reader("id")
No creo que sea necesaria mucha explicación, le estoy diciendo que me retorne el valor del atributo de nombre "id" del elemento al cual apunta actualmente el objeto "reader" (recuerden que el objeto reader cambia su valor en cada paso del bucle while).

If attribute IsNot Nothing Then
Corroboro que el atributo exista.
Algo importante, es que independiente de que tipo de dato sea el atributo, en el archivo XML el valor de un atributo siempre debe estar encerrado entre comillas "" y siempre será leído inicialmente como un string.

If reader.Read() Then
Texto = reader.Value.Trim
End If

Todo lo que se encuentra entre los tag de inicio y termino de un elemento en XML es el valor del mismo, para leer, es necesario ejecutar la función "Read" delobjeto "reader" (el obejto que use para asignar la lectura del XML), si "Read" devuelve un valor, entonces puedo recuperar el contenido o valor del elemento usando la propiedad "Value".
Si no usan "reader.Read", NET no va a leer el contenido del elemento y "reader.Value" estará vacío.
Si se dan cuenta, yo mato dos pájaros de un tiro, pues leo el valor y al mismo tiempo compruebo que exista un valor a rescatar.

Como ven, es una rutina bastante simple, un bucle que recorre cada elemento de mi XML y donde cada elemento es un dialogo completo que tiene un indice que es el que uso dentro del programa para saber que texto se debe mostrar.

Como último comentario, es que podrán notar que en cada elemento "Message" del XML, el valor lo encerré dentro de la etiqueta:
<![CDATA[Escribir acá texto]]>
Esta etiqueta es muy especial y sirve para que se ignore todo el contenido de los signos reservados para XML como son < o >, ya que en mis dialogos, yo uso esos mismos signos para definir variables y si no incluyera la etiqueta CDATA el interprete de XML de NET no sabría si el <> es parte del XML o si es parte del texto.

19Sep/110

Luces en Dx_Lib32

Luego de algunos meses que no he podido tocar los temas de Dhu nun o Feudo, debido en parte a trabajo y encontrarme programando un par de juegos para unos concursos, he decidido dedicarle algunos minutos a preparar algunas herramientas para ir avanzando con el desarrollo.

En este caso, consiste en un clase que permite crear efectos de luz, la clase compone la forma e intensidad de la luz en base a una imagen en escala de grises, y luego, permite modificar intensidad y color en tiempo de ejecución, de la misma forma que se puede modificar el tamaño y posición, aunque en el ejemplo del vídeo no hay movimiento, estas características van a permitir agregar un pequeño motor de partículas.

La segunda herramienta, consiste en una nueva clase para el control de animaciones, llamado MetaAnimación que traerá considerables mejoras a su predecesora, pero ya hablaré en detalle de ella cuando esté lista y funcionando con un nuevo y mejorado editor.

FireStats icon Con la potencia de FireStats