Archive for the ‘FP4G’ Category

Diario de desarrollo XVolley: Día 2

Día 2 (Sábado):

  • Bueno creo que le di una vuelta al generador, porque me dio flojera hacer todo el cóoodigo básico que debe tener el juego.  Tal vez use una plantilla para proyectos futuros.
  • Bueno finalmente perdí tiempo o gané un mejor generador, debido que rehíce muchas de las partes. Lo hice más mantenible que era una de las razones de porque lo había abandonado debido que no se adaptaba a los cambios rápidamente y ahora estoy usando FreeMarker.  La pregunta que queda ¿Podre alcanzar hacer el juego en los días restantes?

Generando un juego

Ya era hora de escribir y ademas medir mi nivel de avance en este proyecto.
Bueno es difícil crear un proyecto que considere todas las posibilidades que se puedan dar en el desarrollo de otro. Sin embargo esto no es algo imposible, siempre y cuando uno se de defina unos margenes aunque sean bien estrechos, es posible.

Bueno en las entradas anteriores había comentado que había hecho un juego en un poco más de una semana, aunque le falta mucho me sirvió mucho para aprender ciertas cosas que desconocía y fortalecer ciertas detalles que tenia débiles.

Quiero medir una cierta especie de avance en este proyecto, comparando lo que se puede generar y el juego que hice hace poco. Así que mostraré el código para el generador y algunas diferencias de los archivos generador con el juego actual.

Primero el código que define el prototipo.

DEFINE GAME XVolley
[
 DEFINE ENTITY Player(x:Integer,y:Integer,keyMap:KeyMap)
 [
 ADD BEHAVIOR InputPlayerBehavior(keyMap),
 ADD BEHAVIOR PlayerBodyBehavior(world,x,y)
 ],
 DEFINE ENTITY IAPlayer(x:Integer, y:Integer)
 [
 ADD BEHAVIOR IAPlayerBehavior(Player2),
 ADD BEHAVIOR PlayerBodyBehavior(world,x,y)
 ],
 DEFINE ENTITY Ground
 [
 ADD BEHAVIOR GroundBehavior,
 ADD BEHAVIOR GroundBodyBehavior(world,0,0,Width,Height)
 ],
 DEFINE ENTITY Ball
 [
 ADD BEHAVIOR BallBehavior
 ],
 DEFINE STATE Gameloop
 [
 ADD ENTITY Ground,
 ADD ENTITY Ball,
 ]
]

Le añadí unas cuantas cosas extras, que es el pasaje de argumentos, lo cual es más útil que utilizar otra clase para pasar datos. Aunque eso es lo que creo yo. Esto aún es muy básico, pero me será útil en proyectos futuros.

Bueno ,a primera clase que genero es el punto inicio del juego y ya está bastante madura su generación(por ahora), solo tiene algunas diferencias. izquierda modificado/derecha generado
http://www.diffchecker.com/cfbrhgz0

Ahora algunos constructores de entidad. No hay mucha diferencia entre estos archivos sin embargo puede ser un poco latoso andar corrigiendo los imports y los tipos nativos de Java. A pesar que el pasaje de argumentos es muy basico y no hace ninguna comprobación de tipos, es muy útil.

http://www.diffchecker.com/1orn22iw
http://www.diffchecker.com/opqjls5h
Y finalmente la clase con toda la magia y la más distinta. Es evidente que el generador aún le queda trabajo para poder alcanzar este nivel de implementación. La definición de esta clase en el generador estaba vacía, pero aún así no alcanzará a estar ni cerca de lo que yo programé para que funcionase el juego.
http://www.diffchecker.com/v2wk8xms

Cuando programé esta clase, trate de seguir un orden para que sea utilizado en el generador, y pude notar que existen reglas que pueden ser creadas en el mismo generador, aunque eso es trabajo de otra ocasión.

Gracias a Freemarker ando mucho más rápido generando las plantillas para generar código. Y al parecer JavaCC se me está quedando corto o yo no lo sé usar. De todas formas, veré si puedo usar ANTLR debido a que se mantiene actualizado y la gramática es más fácil de mantener.

Gracias: Diffchecker

Un generador de juegos

Esta idea es algo que cae en la categoría de ideas locas, debido a la cantidad(muchos) de programas que permiten crear juegos y el costo de desarrollar un programa como estos es alto. Sin embargo yo no voy apostar por crear algo bonito como Unity, UDK, etc… si no por un generador de código a partir de un lenguaje(o intento) desarrollado para este objetivo.

De primera pensaba que este lenguaje debería poder desarrollar un juego completo, sin embargo era demasiado para mí y aunque tuviese ayuda solo seria un castillo más en el aire.  Entonces si no podía hacerlo completo puedo hacerlo incompleto o prototiparlos, pero lo más rápido posible para que valga la pena usarlo.

Para poder crear este lenguaje que por ahora llamo Fast Prototyping for Games (FP4G) y utilizare tecnologías como JavaCC y JCodeModel los cuales me permiten hacer un parser para el lenguaje y generar código en java. El resultado será codigo compilable en java con el esqueleto del juego y usando la biblioteca libGDX.
El lenguaje sera simple, de hecho me base en el objeto json de javascript aunque, con ligeras modificaciones.

[
valor = 1,
valorA = "hola",

etc...
]

No es algo muy complejo, solo hay que definir cosas y mágicamente el generador crea todas las clases por ti listas para que tu agregues los comportamientos necesarios para definir ciertos objetos, pero todo lo demás estará listo. La idea es que uno define que va tener y va definiendo sus propiedades. Nada más.

Y lo que tengo ya hecho.

DEFINE GAME
[
name = "Prueba",
DEFINE STATE GameLoop
[
  ADD SYSTEM SceneSystem,
  ADD SYSTEM PhysicsSystem,
  ADD SYSTEM EntitySystem,
  DEFINE ENTITY Coin
  [
     position = [ x = 10, y = 10]
  ],
  ADD ENTITY Coin,
  ADD ENTITY Coin
  ],
  START GameLoop
]

Y genera esto
(Main) http://pastebin.com/L3EaMLec
(GameLoop) http://pastebin.com/BJvDWKrR
(CoinEntity) http://pastebin.com/e193m8hu
Que con las bibliotecas correctas va compilar y mostrar una moneda en pantalla.