miércoles, 4 de agosto de 2010

STILL ALIVE

Aun no estoy muerto. Solo que no le he estado dedicando mucho tiempo al juego, y no he encontrado la motivación para seguir actualizando este blog... A pesar de que el blog era para motivarme a seguir el juego...

Tal vez la semana que viene salga el primer "release", solo me falta pulir un poco los items y hacer un generador de mapas. Espero postear mas cosas después de esa fecha.

martes, 22 de junio de 2010

I <3 Desarrollo Tangencial...


Que dije en mis entradas anterior que iba a hacer:

• Guardar y cargar, tanto partidas como leer la configuración de las teclas desde un archivo.

• Después de escribir el sistema de inventario, recién reescribir.

Que he echo estas ultimas horas programando:

• Empezar un a escribir el código para escribir y leer archivos secuenciales, No se termino porque decidí usar XML.

• Cambiar ese código para leer y escribir archivos XML. No termine porque note que tenia que cambiar un poco la manera que trabaja la clase GameEngine para que se puedan agregar archivos sin problemas

• Re-escribir el código de GameEngine, para permitir archivos XML. No se termino porque note que una parte no seguía mi orden de las cosas (la traducción del código de las teclas pertenecía a la clase IO).

• Pequeño paso de código entre GameEngine y IO. No lo termine, porque dije "a la m****, reescribo todo".

• Nuevo diseño del código en un pseudo-UML, interrumpido por un trabajo de carpinteria que debia hacer, al volver:

• Con un boceto muy simple del código, re-escritura casi completa del código (excepto las clases pequeñas como mapa y las criaturas, ademas no es re-escritura exactamente, es cambiar de lugar todo.), No se termino porque decidí...

• Reescribir UNA linea de código de la librería que estoy usando libjsci, para poder cambiar el tamaño de la pantalla al instanciar la clase. No se terminado por una montaña de errores que me tiro la nueva librería.

• Tratar de debuguear la librería, sin éxito.

Nueva meta actual:

• Migrar de lbicsi a JCurses.

Calculo que en 5 horas no corridas, con 2 pausas largas entre ellas, pase de tener algo jugable a un montón de código rojo en varios archivos.

Ok, creo que necesito acordarme mas de la regla "Termina lo que empezás"... En cuanto termine con esto largare una versión de prueba, junto con un rant sobre libjcsi y JCurses.

domingo, 20 de junio de 2010

The Rooms: Objetivos


Como ya he dicho, The Rooms es solo una prueba, un entrenamiento y tal vez una base para un roguelike que estoy pensando en escribir después, intencionalmente he decidido no hacer mucho planes de este hasta terminar con The Rooms. Pero... cuando terminare con The Rooms?

Objetivos a corto plazo:
Me estoy guiando muy vagamente en este articulo (en ingles), básicamente divide la creación de un RL en 15 etapas, acá pongo una traducción de los pasos, junto con mi progreso, pero no pienso seguirlos al pie de la letra:

1. Diseño Básico: Hecho. The Rooms va a ser Dungeon Crawl... pero mucho mas simple.

2. Hello World: Hecho. Elegir idioma, herramientas, librerías, y prepararse en general para ponerse a escribir. Tal como dije, elegí Java como idioma, NetBeans como IDE, y libjcsi como librería gráfica.

3. Moviendose: Hecho. Tener una @ moviéndose en el mapa, sin configuración, sin nada.

4. El Mapa: Progresando: 90%. Hacer un mapa (hard-coded, todavia no importa el generado procedural), mostrarlo, poner el personaje ahí, y hacer que este interaccione con el mapa. Yo tengo todo eso casi listo, solo me falta el desplazamiento de mapas mas grandes.

5. Guardar y Cargar: Falta, Meta actual. Guardar y cargar, tanto partidas como leer la configuración de las teclas desde un archivo.

6. Esta vivo!: Progresando: 50%. Crear enemigos, darles una inteligencia artificial simple y crear un sistema de turnos.

7. Interacción: Falta. Hacer stats, y mejorar la AI de los enemigos a un nivel aceptable.

8. Archivos: Falta. Mover todo lo pasible a archivos, mapas, enemigos, etc. No es recomendable tratar de crear un sistema de script por ahora.

9. Items: Falta. Un sistema de inventario e items, junto con todo lo que conlleva. Suena simple. No lo es.

10. Magia: Falta. Empezar con un sistema mágico simple, agregar monstruos especiales y trampas.

11. 1º Lanzamiento: Falta. Hacer un pequeño lanzamiento jugable, hard-coded lo necesario, y distribuirlo entre amigos, para obtener feedback.

12. Mapa: Falta. Crear el generador de mapa, distribuir enemigos en los distintos niveles y etc.

13. Experiencia: Falta. Crear el generador de personajes, las clases, razas, habilidades, etc.

14. Ciudadanos: Falta. Crear una ciudad, personaje aliados/neutrales y vendedores y cosas similares.

15. Libre: Listo lo básico, ahora solo falta empezar a trabajar en las cosas que diferencian to Rl de la otra montaña de RL que hay...

Objetivos a largo plazo:
Otro día completare acá.

Interface


Me quede sin nombre gracioso... Bue, vamos al punto: Este fin de semana no e podido ponerme a programar mucho, debido a otras obligaciones y a un proyecto de carpintería en el que estoy trabajando. por ahora solo pude terminar un boceto de la interfaz gráfica.

El juego paso a tener 3 estados, un menú principal, el juego en si, y una pantalla de muerte. El menú incluye una pantalla de "presentación" (que por ahora solo tiene escrito "The Rooms"), el menú en si, y un menú de opciones que por ahora solo muestra 2 opciones cambiables pero no afecta nada en absoluto. La interfaz del juego se divide en el mapa (que todavía me falta un poco de trabajo para que permanezca centrado el personaje, y el mapa se mueva con este), un menú lateral que lleva el nombre del personaje, la vida y el mana, y otros valores útiles (todo excepto los items que esta usando el PC ya funciona), una parte inferior, donde aparecen lo mensajes, cosa que fue realizado bastante simplemente con un arreglo y 2 funciones.

Desafortunadamente no pude ponerme a escribir el código para leer mapas y criaturas de un archivo. Después de terminar con lo que me falta de la interfaz y hacer esto, puede que largue una versión de prueba... no pidan el código, ya que me da vergüenza lo mal optimizado y mal diseñado que esta ahora. Tal vez después de incluir el inventario haga una re-escritura... mientras siga siendo poco código para re-escribir...

jueves, 17 de junio de 2010

Spanglish y otras sugerencias


Como habrán notado, este es un blog en español, porque? Por 2 motivos. 1º Por que hablo mucho mejor español que ingles, 2º por que hay muy poca información y blog acerca de los Rougelikes en español. Como otra nota sobre mi, yo juego juegos y veo películas en ingles, leo libros (especialmente los de programación) y muchas otras cosas mas en ese idioma.

Porque aclaro esto? Por que note algo hoy mientras trabajaba en el código. Digamos que el español es verde y el ingles azul:

Tengo la variable mapa, que es una instancia de la clase Map. Map, contiene 2 arreglos de 2 dimensiones, mapa y bumpmap, uno maneja lo gráfico y el otro la parte lógica. Entre las funciones de esa clase, tengo cambiar(), que se encarga de alterar un punto (ej, de una puerta que se abrió), después tengo refactor() que se encarga de actualizar el bumpmap cuando hay un cambio, y por ultimo tengo otras como el constructor Map(String archivo).

Creo que notaran algo de indecisión en lo que e refiere a un idioma para codificar... Algo que no es muy bueno para la claridad del código. Así que les dejo esa joyita (probablemente lo pase todo a ingles, pero la verdad que yo me puedo manejar así), y les recuerdo uno consejos que he aprendido con el tiempo:

- Elijan una forma de nomenclatura y quédense con esa, ej: mis variables empiezan con minúsculas, mis funciones usualmente tienen la primera letra de la segunda palabra mayúscula, las clases empiezan con mayúsculas
- Acuérdense declarar los mapas y al hacer los arreglos anidados para navegarlos, cual es X y cual es Y!
- Empiecen simple, después pueden cambiar ese feo arreglo por esas flamantes tablas de hash, siempre y cuando este todo bien encapsulado y definido.
- Nunca duden del poder del Trace! Si no entienden que esta pasando, agreguen un par de System.out.println (o u contratarte en C, printf) que les digan el valor de las variables y que esta pasando!
Por ultimo y mas importante:
- Si copian y pegan una linea de código: Asegúrense de que se este usando bien!

Y si, Spanglish fue una mala película...

miércoles, 16 de junio de 2010

Somos Legion


Muy bien, 1º re-escritura completa del código... bueno, todo excepto 2 clases que apenas superan las 10 lineas de código contando los espacios (La clase madre de las criaturas y la clase PC). La razón? Me di cuenta de varios errores en el diseño de las clases (las cuales me iban a resultar en mucha dificultad al crear otras criaturas ademas del PC), optimice un poco el código en algunos lados, y encapsule todo.

Ademas de eso, agregue y probé la compatibilidad para manejar varias criaturas de manera simple, pero eso coto el movimiento del PC... arreglare eso mañana. Por ahora, solo aparecen en la pantalla, no tienen IA, ni ninguna forma de interaccionar....

Cosas para hacer:

- Encapsular el mapa (es lo único que me quedo)
- Arreglar el movimiento del PC (y como comparten código, del resto de las criaturas)
- Hacer que el mapa y una lista de criaturas se cargen de un archivo, para hacer mas fácil el testeo de cosas futuras.

Lineas de código (yo soy de espaciar mucho, pero de manera constante)

Antes: 248

Después: 374

martes, 15 de junio de 2010

The Rooms... 0.0.1 alpha build 7


Hablemos un poco de mi proyecto, The Rooms realmente es como una prueba. No programo en java desde que saque la certificación oficial de Sun hace como 3 años, y como me es estado encargando de reparar maquinas tampoco e tocado mucho la programación, solo un par de programas en C de vez en cuando, ademas mi ultimo gran proyecto fue hace como 2 años Visual Basic 6. Así que estoy medio oxidado en eso de programar, por eso he decidido empezar un pequeño juego de a poco, paso a pasito ir aumentándolo, reescribiéndolo y todo eso.

Después de un poco de deliberación decidí usar java, mas que nada por la compatibilidad y para no tener ese certificado juntando polvo en una esquina... Para la representación gráfica voy a usar "libjcsi" (después voy ha hacer una pagina con recursos o algo así...) que cuenta con lo necesario para este proyecto y esta muy bien documentada, si bien no hay muchos ejemplos en internet... Como IDE, voy a usar NetBeans porque... simplemente es el único IDE de java que he usado, y cumple su función más que adecuadamente. Y eso es todo.

Lo primero que hice fue tratar de diseñar e implementar la base:
- Un una clase mapa (que actualmente solo contiene un arreglo hardcoded de 10x10)
- Una clase para el PJ (solo tiene su posición)
- La clase Main que carga todo y contiene el bucle principal
- Una clase control que se encarga de la mayoría de la lógica

Después de hacer el boceto UML (bueno... algo PARECIDO a UML), y de codificarlo de una manera no muy profesional (encapsulacion mis pelotas!), termine con algo "jugable". solo un pequeño mapa 10x10 en el que podes moverte libremente, no hay "turnos", no hay enemigos, hay una detección de colisiones muy basica, y el mapa consiste solo de pisos, paredes y puertas, cuando dije básico, no bromeaba...

Bueno, después TAL VEZ ponga descargas a los distintas etapas del proyecto y el codigo por si alguien lo quiere ver... pero eso sera otro día. Mi objetivo actual es prepara todo para la adición de enemigos.

Eso es todo por hoy, cualquier duda, dejen un comentario.

-> New Game


Bueno, F1RS7 P0ST!!!!111 y todo eso...

Empecemos con algo básico, para que cree este blog? Para tratar de mostrar mis investigaciones acerca de la creación de juegos, no solo de código sino que también de ideas, y de paso mostrar mis (algo escasos) conocimientos. Ademas me sirve como un auto-apoyo para incentivarme a no dejar otro proyecto a la mitad...

Iré postenado con el tiempo links a otros blogs o paginas con información adecuada, e iré comentando sobre mis opiniones, ademas de ir posteado el progreso de "The Rooms" un pequeño proyecto que estoy haciendo.

Para los que no conocen el genero de los Rogue-Likes, les dejo un poco imaginativo link a Wikipedia y Rogue Basin (una wiki dedicada a este genero). Tal ves después pondré un resumen, pero por ahora eso bastara...

Wikipedia (Ingles)
RogueBasin

Bueno eso bastara por hoy...