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...
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
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:
muertos_atacante = daño_defensor / vida_atacante
Asi funciona el calculo basico en Xeno. Saludos y espero les sea util
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."
¿Wuat!!, Como demuestras eso, Mr Jeeba?
Es simple, en ikariam vas a ganar usando siempre el combo Hoplitas+ Fusileros. ¿Porque esta eleccion? :
- 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.
- 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.
- 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.
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.
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.
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
¿Te gusta la pagina?, socializame haciendole click a tu color preferido: