Noviembre 14, 2012, 08:24:18 PM Ultima modificación: Noviembre 14, 2012, 08:57:03 PM por Rodri_cyberdog

Pokemon TCG con IA

Plataformas

GM8

Juego basado en el TCG de Pokémon. Se roban 7 cartas, se colocan Pokémon y se lanza una moneda para saber quien parte. El oponente tiene IA y toma decisiones aunque aún está en fase de desarrollo, pero está capacitado para ganar una partida.






Hola a todos, después de dejar inconcluso mi juego de Zelda y retomar un poco lo de Game Maker, me decidí por hacer un Engine para un juego de TCG (Juego de Cartas Coleccionables) y luego de darle una vuelta me decidí por hacer un TCG de Pokémon. Hasta ahora el juego es medianamente jugable, excepto porque no se pueden usar las Trainer Cards todavía (y francamente todavía me estoy cabeceando sobre como lo voy a hacer). Si todo funciona bien, las barajas se podrían descargar, pegar en la carpeta del juego y automáticamente la aplicación reconocería las nuevas cartas, es por eso que no quiero programar las cartas directamente en el juego, sino através de scripts en las carpetas. Espero puedan ayudarme los más expertos. Sin ofender, el juego lo manejo con scripts y soy informático programador de software. Tengo problemas con ejecutar un script que requiera, por ejemplo, descartar una carta de la mano, lanzar una moneda o cualquier cosa que requiera esperar ya que aún no tengo una forma sencilla en que un script se detenga y espere, o al ejecutar dos veces el script puedan saber que fue lo que sucedió para poder continuar (por ejemplo, si el usuario descartó todas las cartas necesarias, cuántas de las monedas son cara, etc.). El IA aún está en desarrollo, pero toma buenas decisiones al elegir al Pok Activo con más posibilidades de atacar y también para añadir cartas de energía al Pokémon mejor posicionado. Para cambiar Pokémon Activo cuando es derrotado simplemente toma al primero que encuentra en banca y para evolucionar un Pokemon lo hace apenas tiene la oportunidad. A pesar de estos dos detalles, me ha ganado varias veces. Si el juego no avanza y se queda pegado... es porque no leyeron el cuadro de mensaje antes de cerrarlo. Probablemente les falte robar un premio o reemplazar al Pok Activo. Para jugar un Pokémon simplemente hacen clic en uno que tengan en la mano. Para evolucionar un Pokémon o añadir una energía, deben arrastrarla sin soltar el mouse hasta el Pokémon en el campo al que quieran evolucionar o añadir la carta. Para reemplazar al Pokémon Activo, deben hacer clic DERECHO sobre un Pokémon en Banca. Para robar un premio, simplemente hacen clic sobre uno. Sabrán que pueden robar un premio porque tendrán un aro de selección al poner el mouse sobre uno.


Rodri_cyberdog, el post no cumple con la plantilla de juegos en desarrollo ni con el reglamento. No se permiten enlaces a mediafire, el archivo pesa menos de 10mb, adjuntalo al mensaje o subilo a dropbox, pero no uses servidores con publicidad, esperas, captchas o redireccionamientos. Arreglalo o voy a tener q cerrar el post, y sería una lástima porque el juego se ve bueno




Cita de: Texic en Noviembre 14, 2012, 08:40:17 PM
Rodri_cyberdog, el post no cumple con la plantilla de juegos en desarrollo ni con el reglamento. No se permiten enlaces a mediafire, el archivo pesa menos de 10mb, adjuntalo al mensaje o subilo a dropbox, pero no uses servidores con publicidad, esperas, captchas o redireccionamientos. Arreglalo o voy a tener q cerrar el post, y sería una lástima porque el juego se ve bueno

Hecho, tardó un año en guardar :-[ pero ya está corregido. Disculpa.

Perfecto, te comento que para los scripts podés usar timelines. Que el script cree una timeline con los eventos que querés, ya sea crear objetos molde para mostrar animaciones hasta el fin, y al final de toda la ejecución se elimine la timeline. Si hacés bien las cosas se pueden hacer packs expansivos bastante simples y eficaces, tendrías que encriptarlos bien para que no se pueda acceder a ellos de manera convencional. Te puedo ayudar con la idea básica del asunto, con un ejemplo o algo, a menos que hayas entendido cómo se hace. Saludos!




Cita de: Texic en Noviembre 14, 2012, 10:38:09 PM
Perfecto, te comento que para los scripts podés usar timelines. Que el script cree una timeline con los eventos que querés, ya sea crear objetos molde para mostrar animaciones hasta el fin, y al final de toda la ejecución se elimine la timeline. Si hacés bien las cosas se pueden hacer packs expansivos bastante simples y eficaces, tendrías que encriptarlos bien para que no se pueda acceder a ellos de manera convencional. Te puedo ayudar con la idea básica del asunto, con un ejemplo o algo, a menos que hayas entendido cómo se hace. Saludos!

Bueno, el problema con los timelines es que es difícil hacerlos "esperar" pues no sé cuanto se pueda demorar el jugador en decidir qué cartas va a botar de su mano, lo de la moneda se pueda calcular pues el lanzamiento es automático. Por ahora cree un objeto llamado ComTrainer que manejará los scripts relacionados las cartas. Si todo funciona, podría hacer operativo el uso de Trainer Cards en el duelo. Espero todo resulte, saludos.

Entonces podrías crear objetos que estén en espera desde el script con object_add, con sus códigos relacionados y eso, y que al final de toda la ejecución se eliminen los objetos con object_delete para no saturar el juego




Cita de: Texic en Noviembre 14, 2012, 11:26:15 PM
Entonces podrías crear objetos que estén en espera desde el script con object_add, con sus códigos relacionados y eso, y que al final de toda la ejecución se eliminen los objetos con object_delete para no saturar el juego

Eso hago, y por lo visto es la única forma. Juego un poco con las alarmas de un objeto, es decir, un objeto crea otro objeto y pone una alarma. Esa alarma se revisa cada 15 o 20 pasos y revisa si el objeto que creo todavía existe. El otro objeto también espera y cuando está todo listo guarda los resultado en el objeto padre y se elimina. Cuando el otro detecta el objeto hijo ya no existe entonces sigue la ejecución. El problema es que eso en un script es difícil y por eso tengo que hacer que el objeto padre llame al script dos veces, una antes del crear al objeto y otra después de eliminarlo. El script guarda una variable en el objeto padre la primera vez que se ejecuta, para que así cuando sea llamado otra vez, lea esa variable y sepa que se está ejecutando por segunda vez. Pero es engorroso y puede acarrear problemas si una carta necesita pagar costes y al mismo tiempo seleccionar blancos, ahí el script tendría que ejecutarse como 3 veces por lo menos. Creo que es algo que los desarrolladores de Game Maker debieran pensar en hacer listeners.