Archive for the ‘Ideas Locas’ Category

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.

Transfiriendo archivos usando Java de la forma incorrecta

Hoy en día les mostrare como transferir archivos en java de la forma incorrecta.
La razón de este artículo es que un amigo me pidió ayuda de cómo transferir archivos a pesar que le dije como hacerlo, no logró hacerlo de la manera correcta(hasta donde yo se). Y por asuntos didácticos dividiré este artículos en dos partes (transfiriendo archivos de manera incorrecta y correcta).

El siguiente código que les mostraré como transferir el archivo de la forma incorrecta, espero que al leerlo se de cuenta de cual es el error.

Primero debemos crear el servidor, primero el código para aceptar una simple conexión

ServerSocket server = new ServerSocket(1234);
Socket conexion = server.accept();        

Básicamente lo que hacemos es crear un ServerSocket el cual se pone a la escucha en el puerto 1234 (un numero cualquiera pero debe ser superior a 1024). La siguiente linea lo que hace es esperar una conexión (esta función se bloquea hasta que alguien se conecte al puerto abierto) y devolverá un objeto Socket el cual manejará la conexión.

Luego debemos enviar el archivo (de la manera mala)

File transfer = new File("~/archivo pequeño.doc");
FileInputStream fin = new FileInputStream(transfer);
byte datos[] = new byte[fin.available()]; ///noten esto
fin.read(datos);
OutputStream out = conexion.getOutputStream();
out.write(datos);
out.flush();
out.close();
conexion.close();

Básicamente hemos transferido nuestro archivo de mala manera, pero también nos falta recibir nuestro archivo también de mala manera

Socket descargar = new Socket("localhost",1234);
InputStream in = descargar.getInputStream();
byte descarga[] = new bytes[in.avalaible()]; //noten esto
in.read(descarga);
FileOutputStream fout = new FileOutputStream(new File("~/archivo transferido.doc"));
fout.write(descarga);
descargar.close();

En las partes que les mencione en el código (noten esto) se darán cuenta que nuestro programa puede quedarse sin memoria al tratar de transferir un archivo muy grande.

Bueno espero que tengán deduzcan la forma correcta de transferir archivos antes que yo la postee, Saludos!!

Nota:Avisar si hay algún error, hice a la rapida este articulo :S

Como hacerse millonario en Ragnarok Online

¿Ustedes quieren saber como hacerese millonario en ragnarok, verdad? Pues yo les contare una historia. Una vez en el mundo de ragnarok habia un joven mago que soñaba con dos cosas, hacerse millonario y crear una poción perfecta. En sus intentos de hacer tal poción se le ocurrio la brillante idea de mezclar todo en una sola poción, para luego venderla a toda a una cuidad, pero por la mala suerte la poción que vendió los enveneno a todos. Entonces ideo una mejor idea “vender antidotos” para la colitis (de lo que se habian enfermando todos). El antidoto se vendio rapido y caro, ya que todos los personajes lo nesesitaban. Y de esa forma el mago se hizo millonario vendiendo antidotos para la colitis.

La Historia del Lag

Hace mucho tiempo, en el primer server que existio de ragnarok, se unio el primer personaje de nombre muy complicado. Ese personaje se hizo al principio Thief para luego convertirse en Assasing y entreno hasta renacer  y ser el mejor Assasing cross existente. Los  Game Moderator’s (GM) se dieron cuenta ke la personalidad de este personaje era muy mala y cruel y trataron de detenerlo,  pero el Assasing cross los asesino a todos. En un tiempo  mas los GM lo iban a echar pero el antes de que lo pillaran se cambio el nombre y se arrancó poniendose un nombre corto y sencillo “Lag“, desde ese momento el lag ataca a todos los pjs(personajes) para vengarse de todos por tratar de echarlo del server.