Refactorizando Xeno, ordenando tu codigo

Publicadas por Jee Ba

Y bueno me quede atracado entre la 0.6.4 y la version 0.6.5 de Xeno. Es que revisando el codigo.. oh sorpresa, lo encontre medio desordenado. Esto me dio ganas de refactorizar el codigo y ponerlo mas ordenado y mas automatico, por asi decirlo

El problema: Hay codigo que se esta repitiendo en varios lados. Por ejemplo tengo un controlador de Batallas y un Controlador de Ejercitos. El controlador de batallas tiene una funcion para obtener todos los ejercitos en un planeta objetivo. ¿Esto no deberia de ir en el controlador de Armies?

Pues si y no, tengo justo una gran duda. Por eficiencia cuando hago un SELECT a la base de datos, digamos ese SELECT que me devuelve todos los armies en un planeta. Lo que hago es retener el query result que devuelve pg_query para procesarlo en un solo WHILE con un pg_fetch_assoc junto con algun otro codigo extra que va a usar esa informacion, en lugar de almacenarlo todo el raw en un array u objeto ( que seria un FOR o un WHILE) para despues procesar ese array en otro WHILE. Que seria una manera mas ordenada pero menos eficiente de hacer las cosas. ¿Por cual me decidire?. Pues parece que la primera opcion se ve mejor a futuro. Adios eficiencia...

¿Te gusta la pagina?, socializame haciendole click a tu color preferido:

Add to Technorati Favorites Digg! del.icio.us.me

Un Modelo de Ataque y Defensa en Juegos de Estrategia

Publicadas por Jee Ba

Al desarrollar Xeno, necesitaba alguna forma de calcular las batallas. Tome lo mejor de otros juegos de estrategia y RPGS como Warcraft o Ikariam, y juegos de cartas como Magic the Gathering y pues, salio algo interesante. Por supuesto es la base de mi modelo, puede cambiar o aumentarle mas cosas pero pienso que lo simple es mejor. Mientras mas simple, mas jugadores lo entienden, menos jugadores se frustan, y es mas parejo para todos. Pero eso si, cualquier modelo que eligas, tiene que darte la posibilidad de eleccion. Piensen en el YanKenPo: Piedra > Tijera > Papel > Piedra.

Vamos por las cosas iniciales:

EL Ejercito: Cada cuadrado con la imagen de alguna unidad, son en realidad muchas unidades de este tipo, son un ejercito

Por ejemplo este cuadrado contiene 50 unidades de ese tipo.

Los Stats:
Hay 5 Stats que influyen directamente en la batalla:
  • Ataque: Es el daño que causa la unidad al atacar.
  • Overkill: Es el daño que causa la unidad al defender.
  • Defensa o Armadura: Son los puntos que restas del daño que recibes.
  • Vida: Son los puntos de vida que tiene cada unidad.
  • Unidades: El numero de unidades que tiene tu ejercito.

Secuencia de Batalla: Simularemos un simple ataque de una unidad a otra unidad. Lo primero que hacemos es:

1) Calculamos el daño que hace la unidad atacante: Esto es igual al numero de unidades que existe en el atacante multiplicado por lo que sale del ataque menos la defensa de la unidad defensora:
daño_atacante = unidades_atacante * ( ataque_atacante - defensa_defensor )

2)Calculamos el daño que hace la unidad defensora: Al defenderse la unidad, causa daño al atacante. Estuve pensando como hacer para que la unidad con el ataque mas alto no sea la unidad Dios del juego, es por eso que dividi el ataque entre daño de ataque y dao de overkill.

daño_defensor = unidad-defensora * ( overkill_defensor - defensa_atacante)

3) Calculo de unidades muertas en los dos bandos: Ya obtenidos el daño del atacante y del defensor simplemente se divide el daño_atacante entre los puntos de vida del defensor. Idem proceso para calcular los muertos en el defensor.

muertos_defensor = daño_atacante / vida_defensor
muertos_atacante = daño_defensor / vida_atacante

Eso es el resultado de una batalla, ahora se podria mejorar de muchas formas como calcular el daño de defensa despues de reducir las unidades,algo asi como un first strike en Heroes4.

Asi funciona el calculo basico en Xeno. Saludos y espero les sea util

¿Te gusta la pagina?, socializame haciendole click a tu color preferido:

Add to Technorati Favorites Digg! del.icio.us.me

Hoplitas y Fusileros no es estrategia

Publicadas por Jee Ba

Estuve leyendo algunos foros de ikariam donde la gente se pregunta como funcionan las batallas en ikariam, que unidad vence que unidad, y preguntas asi, como si esa parte del juego fuese posible elegir entre opciones racionales.

La cosa es simple, el ikariam no es un juego de estrategia en solitario. Particularmente desde la version 0.3.1 la estrategia en el ikariam se basa en el apoyo de tus aliados y el tiempo de entrada en una batalla, por lo tanto:

"En Ikariam, no existe una estrategia en la eleccion de tropas."

MrJeeba.

¿Wuat!!, Como demuestras eso, Mr Jeeba?
Es simple, en ikariam vas a ganar usando siempre el combo Hoplitas+ Fusileros. ¿Porque esta eleccion? :
  1. Los Hoplitas: Son la unidad mas duradera del juego. Su ataque apesta, pero digamos en caso pierdas una batalla, vas a perder menos hoplitas que cualquier otra cosa. Y claro decir que tiene la mejor relacion coste/defensa y mantenimiento/defensa, dicho en cristiano, son las unidades mas baratas para defender.
  2. Los fusileros son la mejor unidad de ataque y punto. ¿Pero si su ataque es inferior a los Bombarderos? ustedes diran indignados mientras se les cae el monocular del ojo izquierdo. Pues si tienen menos ataque pero te duran mas. El Bombardero veanlo como un misil, al comienzo hace ingentes cantidades de daño, pero al siguiente turno se murio. En cambio el ataque de los fusileros se va perdiendo de a pocos, al siguiente turno quizas se te muera uno de 5 , pero sigues haciendo 4 fusileros en daño.
  3. Estas dos unidades son baratas y su manutencion no es excesiva. Puedes reponerlo mucho mas rapido que las demas unidades que podrian valer la pena. Ademas de que no son mecanicas.
Entonces es simple, tu puedes sacar tu ejercito de Bombarderos con Gigantes, despues de 3 batallas, se te murieron todas las unidades. O puedes tener Fusileros y Hoplitas, quizas pierdas alguna batalla, pero te van a sobrar mas de la mitad de tus unidades en la mayoria de los casos.

Por supuesto incluir cocineros y medicos, en un siguiente post les dare la receta para el numero ideal, y tambien unidades boqueteras en caso vean un muro. Poner otro tipo de tropas en tu ejercito es simplemente porque te gusta regalar recursos. Espero el hatemail con pruebas de lo que hablan.

¿Te gusta la pagina?, socializame haciendole click a tu color preferido:

Add to Technorati Favorites Digg! del.icio.us.me

¿Inteligencia Artificial, o Programacion de Comportamiento?

Publicadas por Jee Ba

Como les comente antes, estaba pensando en hacer un pequeño demo del juego debido a la informacion que me dieron los alphatesters ( mas que todo fueron quejas =P, porque no se entiende muy bien como funciona el juego). Asi que meditando las opciones a mano, pense en ponerle inteligencia artificial al juego. Es la primera ves que entro al mundo de la programacion de IA o mejor dicho programacion de comportamientos como algunos academicos le dicen a la programacion comercial de IA para juegos.

¿Inteligencia Artificial o Programacion del Comportamiento?
Y es que al estar buscando informacion del tema, descubri que lo que creemos que es IA en la mayoria de juegos comerciales, realmente son scripts prefabricados de como se va a comportar la unidad. No es que la unidad planee lo que seguira a continuacion, lo que pasa es que esta programada de tal manera que al comeinzo parece nuestra computaedora esta pensando pero si se juega una y otra vez, su comportamiento empieza a repetirse, osea aburrimiento de los jugadores. Dicho de otro modo, la IA en la mayoria de juegos es un gran SWITCH CASE, o muchisimos IF ELSE anidados para dar la impresion de Inteligencia.

No todo esta Perdido, Creatures, un juego con IA verdadera
Por supuesto hay juegos donde si existe una verdadera inteligencia artificial, el caso mas famoso es el juego Creatures, uno de los juegos mas exitosos con verdadera inteligencia artificial. Su creador Steve Grand, autor del libro con un titulo nada humilde: Creation:Life and How to Make It es un informatico teorico que revoluciono el mundo de la IA para siempre demostrando que es factible usar IA del mundo academico en un juego. Aqui encontre un articulo donde hablan sobre algunos aspectos claves de Creatures y otro donde hablan sobre el uso de IA en los juegos.

¿Quiero ser Programador de IA que hago?
Lo primero y aunque les duela teclear, es usar a tu amigo google. Recomiendo buscar con la palabra del tipo de juego que deseas saber mas y le sumas AI como 'Real Time Strategy AI' o 'First Personal Shooter AI'. Vana encontrar algunas gemas en las primeras busquedas. Wikipedia tambien es valido para estos casos

Lo Segundo, ya macerados con sus busquedas en google y wiki, es encontrar libros sobre el tema. Un libro que me encanto fue AI Game Programming Wisdom, donde te explican los conceptos basicos de IA aplicada a juegos.

Tambien recomiendo visitar este Journal, no lo encontre yo, me lo paso un ingeniero de mi Universidad, pero hay demasiados articulos interesantes sobre inteligencia artificial para juegos que van a salir muy felices de ahi.



¿Te gusta la pagina?, socializame haciendole click a tu color preferido:

Add to Technorati Favorites Digg! del.icio.us.me

Intel y el lento mundo del mañana

Publicadas por Jee Ba

Navegando por la web me encontre con un banner-anuncio de Intel en español, algo sobre el "mundo del mañana", y pues ya que era mi hora de vagancia, dije, ¿Por que no?.

El resultado fue desalentador, una pagina hecha casi competamente en flash, que me demora algo de 2 minutos en cargar, donde aparecen unas personas moviendose y una mano robotica jugando baloncesto.

Lo probe desde una linea de internet de 1 mbps que no es mucho pero tampoco es lento. Aqui les doy una imagen para los que siguen esperando a que cargue la pagina:


Ohhhhhh Intel!!!!, un flash con personas moviendose, ohh y mira una mano robotica jugando baloncesto (comentario sarcastico) . A mira parece un flash recontra interactico Por la espera debo de suponer que si hago click al balon, el robot llamara a sus demas amigos roboticos (hechos con chips Intel maliciaMMX) y haran un show a la Terminator 5, con explosion de doctores futuristicos (o jardineros, para lo que se como se vestiran en el futuro) incluido.

Pero no , el flash no hace absolutamnte nada mas que mostrar la bendita mano robotica y unos doctores sacudiendose la caspa. Y bueno parece que hay un link dentro de este horror de la webturaleza. Ok aqui vamos.. me pregunto donde nos llevara:


Um cargo la pagina y.., a bueno tiene un mundo girando, WOW UN MUNDO GIRANDO NO LO PUEDO CREER!!! (es dificil reproducir el sarcasmo en un blog ^^).

Para añadir mas injuria al insulto nos dan otro link mas, ¿WTF?, ¿Porque oh Dios Mio, porque alguien habria pensado que es divertido esperar una eternidad para mostrarnos un simple boton? Osea uno comprende que la primera pagina te demore 2 minuto en cargar, y la pagina no haga nada, absolutamente nada memorable, pero ¿Esperar otro minuto mas para un link mas?.

Ah entrare en modalidad masoquista y le hare click..

2 minutos despues... al fin una pagina interactiva. Umm que bonito, otro mundo girando pero aqui puedes dejar mensajes con un pensamiento sobre lo que quisieras en el futuro. Pues yo deje el mio.. jejeje



Muchas gracias Intel, otro minuto de procastinacion malgastado gracias a ustedes.

¿Te gusta la pagina?, socializame haciendole click a tu color preferido:

Add to Technorati Favorites Digg! del.icio.us.me