Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - KrakenHimoto

Páginas: 1
1
Guerra de IAs (GIA) / GIA_02 Spaceship War Finalizado
« en: Julio 28, 2010, 12:23:22 am »
El campeón de GIA2 SpaceShip War ha sido Killer
Felicidades por el logro!



Kraken: Si Killer, un par de Steps que disparaba antes y empatábamos -_-

VER VIDEO AQUI GIA2 Ronda2


Descarga de los archivos

Al final del tema hay 4 adjuntos del concurso.
-Están los editables pelados para los participantes sin IAs de los jugadores, tanto para versión lite como pro de gm. (Primeros 2 archivos)
-El tercer archivos es un editable con todo el contenido del concurso, participantes, etc...
-El cuarto archivo es lo mismo que el tercero pero directamente el ejecutable (.exe) para los que no posean Game Maker 6 e igual quieran poner a prueba sus habilidades contra las IAs.

Sepan que el juego es jugable ya que tiene opción para manejar a un jugador.


Lista de participantes

-Topet
-Guacusio
-Killer
-Raul Omega
-Alfonsos1
-knd144
-KrakenHimoto (participé, pero como organizador no participo oficialmente)
-Hardraid (descalificado por bug en el editable)
-Elviskelley


Resultados

Código: [Seleccionar]
Killer 7/7
KrakenHimoto 6/7  (No participa oficialmente de la competencia)
Guacusio 4.5/7
Alfonsos1 4/7
Topet 3.5/7
RaulOmega 2/7
ElvisKelley 1/7
knd144 0/7




No voy a hacer una review de las IAs, pero a cambio les voy a dejar los registros de todos los participantes Yai =D

KrakenHimoto
Código: [Seleccionar]
/*Krakenhimoto
   Fecha de inicio de la IA: Sabado, 24 Octubre 2009
   Fecha de finalizacion: Lunes, 26 Octubre 2009

Debido a que la IA deberia cambiar segun como se comporta la oponente idee un sistema en el que hago varios tipos de IAs para ver cuales son los puntos debiles de cada una segun su comportamiento.
   v_01.IA01: Es una IA estatica. Centra su inteligencia en sus disparos, cuando usar cada tipo y a que distancias.
   v_01.IA02: Es una IA agresiva a ciegas, por esta razon suele suicidarse.
   v_01.IA03: Es la IA que se va a utilizar en la competencia, es agresiva, sigue al oponente y usa el mismo sistema de disparo que la IA1. Evitar salirse del mapa.
   v_01.IA04: Es como la IA03 pero ahora tiene un nuevo sistema de disparo mucho mas preciso tanto para disparo normal y con starshoot.
   v_01.IAKH(v5): Esta IA es como la IA04 pero tiene la caracteristica que se deszplaza mucho mas rapido por el mapa y se maneja mejor con los limites del mapa lo que permitio que venza a la IA estatica invencible hasta ese momento.

Version de la IA: 1.0
Voy a escribir todo de manera cronologica a medida que hago cambios:
-Por ahora estoy en la etapa inicial de la IA, ya cree un script efectivo para rotar en la direccion correcta segun hacia donde me quiera desplazar.
-Ahora voy a diseñar un sistema que detecte cuando la IA no tiene retorno y va a morir irremediablemente por salirse del campo.
-Me centre en los disparos ahora que no me moria saliendome del mapa, el sistema anterior era el clasico disparo al cuerpo del oponente, lo cual si esta en movimiento jamas le das. Lo que hice fue un sistema que la IA apuntara siempre
a donde se encontraria el oponente 40 steps mas adelante (el tiempo que dura el disparo) si dejase de acelerar y se desplazara por friccion. Este sistema mejoro mucho el sistema de disparos pero aun tenia problemas.
-Luego de corregir varias variables que tenia mal me di cuenta que mi sistema solo funcionaba si la IA enemiga se encontraba a una distancia jsuta de recorrido de 40 steps de la bala, por lo cual erraba mucho.
Lo que se me ocurrio fue calcular todas las posiciones en un array de la bala y hacer lo mismo con el jugador en modo desplazamienzo con y sin aceleracion. Luego lo que hago es para cada tiempo comparar coordenadas, si coincidian disparar.
Esto me permitio y MUY efectivo sistema de disparo.
-Luego lo que mejore fue el seguimiento a la IA enemiga, mi sistema para no salirme del limite del mapa hacia que mi IA se desplazara lento. Lo que hice fue mejorarlo para que si aceleraba sin riesgo de muerte (osea acelerar hacia el centro del mapa) lo hiciera.
-Algo que no dije antes, pero si la otra nave esta a mas de 40*8 (recorrido de una bala) hace starshoot, sino no, xq el cooldelay es demaciado lento en la starshoot.
-Tengo planes a futuro de hacer que mi IA se maneje por estados segun la situaicon en el mapa.
-Implemente un sistema que cuando detecto una mina enfrente de la nave y este a menos de X distancia de la vuelta y acelere para alejarse de ella. Parecido al concepto del limite del mapa

Asi termina mi IA_v01: Algo en lo que me centre mucho en esta IA fue generar modulos tecnicos que me permitieran desplazarme con precision, pero se que la verdadera guerra se encuentra en otro campo que es la estrategia de batalla.
Ahora que tengo la tecnica bastante pulida me puedo centrar en ver que es lo que pueden llegar a hacer los oponentes para contrarestarlos (AHI ESTA LA CLAVE!)


Dificultades:
-Mayormente fue pensar como vencer a una IA estatica.
-Ver el tema de las bombas, que aun no resuelvo totalmente aunque tengo una solucion bastante safisfactoria
-Algunos problemas con calculos angulares.

Version de la IA: 2.0
Se mejoró la forma de detectar y esquivar las bombas y el limite del mapa.

Killer
Código: [Seleccionar]
/* Primera Ronda
Iniciada en:      Domingo 24 / 10 / 2009
Finalizada en:   Mircoles 28 / 10 / 2009

IA creada por Killer
Versión: 0.8

Lo primero que hice fue un script que rotará la nave en dirección al enemigo y disparará, seguido por un script que evitará que la nave
saliera del ring. Acá surgió el primer problema, la nave seguía rotando hacia el enemigo mientras trataba de no salirse, y terminaba sin
conseguir ninguna de las dos. La solución fue agregar una variable de estado para que la IA identifique si puede rotar hacia el enemigo
o aún esta tratando de salvar su pellejo. De paso hice un script para identificar el lado más corto hacia el cual rotar para mirar en X
dirección.

Luego hice un script para que la nave buscara una posición desde donde atacar al oponente, de preferencia de espaldas, pero sin la
posición este fuera del ring. Fue necesario agregar un par de variables para almacenar dicha posición.

Finalmente hice un script para que la nave evadiera balas y minas, por mucho el más problemático. El script checa la trayectoria de cada
bala para identificar cuales son peligrosas y buscar una posición que las evite. Lamentablemente el cambio constante de trayectoria de la
nave en si hace que no todas las balas sean evitables. En el caso de las minas se checa la trayectoria de la nave para ver si chocara con
alguna mina y de ser el caso cambiar la ruta, pero el script para evitar que la nave salga de la habitación a menudo interfiere con él.

De paso agregue al script que apunta y dispara la opción de disparar starshots para tiros difíciles y al script de esquive la opción de poner
minas si el oponente se acerca demasiado en dirección a la nave.

La IA aún necesita un comportamiento contra starshots y afinar el script de evasión. Pero me temo que eso quedará para la segunda ronda.


Manera de "pensar" de la IA:

La IA tiene como prioridad mantenerse dentro del ring y evitar daño, por lo que no intentara ponerse en posición de ataque hasta que este
fuera de peligro. Si por casualidad el oponente entra en el alcance de la nave mientras esta se pone a salvo la nave intentara dispararle,
pero no perseguirlo. Cuando la nave no corre peligro, y su oponente esta dentro del alcance de sus balas la nave intentara dispararle sin
moverse. Si el oponente esta fuera del alcance de la nave y esta está fuera de peligro intentará ponerse detrás del oponente o el área libre
más cercana.

Topet
Código: [Seleccionar]
/*
He aqui el registro de la nave Topet Sonic Blue Insect:

Version de la IA: 1.0
   Fecha de inicio de la IA: Domingo, 25 Octubre 2009, 9:47 PM
   Fecha de finalizacion: Lunes, 26 Octubre 2009, 7:00 PM
   

   
Forma en la que piensa:
   La IA se basara en estados, la lista y descripcion de estos estados se actualizara junto con la IA.
   
   (0)Normal.-No hay ninguna actividad que resalte en este estado, siendo asi debera rastrear la nave enemiga.
   (1)Alerta de limite.-Se entrara en este estado si la distancia hacia el centro es mucha.
   (2)Atacando.- Buscara apuntar al enemigo y en funcion de la distancia atacara con diferente arma.
   (3)identificada bomba.-Tratara de esquivar las bombas que se encuentre enfrente
   
   
   
Problemas y dificultades:
   v1.d1.-Tuve problemas para ajustar la direccion en que debia girar la nave para encarar al enemigo, despues de un rato obtuve un
   resultado agradable y aunque no fue lo mejor estoy satisfecho por el momento :)
   
   v1.d1.-Descubro que mi IA desperdicia sus municiones XD, disparaba aun cuando el enemigo no estaba enfrente
   es facil de arreglar solo me falto comprobar hacia donde miraba.
   
   v1.d2.-Tuve muchos problemas para hacer que la nave intentara esquivar las bombas, hice que girara en sentido contrario si estaba
   muy cerca de una bomba, no logra esquivar totalmente las bombas, esto vere una forma de mejorarlo en futuras versiones
*/


Guacusio
Código: [Seleccionar]
/*
Fecha de inicio: 25/10/2009
Fecha de término: 26/10/2009
Nombre del creador: Guacusio
Versión:1

Algoritmo:

-La IA no hace nada si no existe el enemigo

-Se revisa si hay peligro de salir de la arena de combate, en base a
la distancia de la nave hasta el centro del room. Si es así, deja de acelerar
y gira hasta mirar hacia el centro para luego acelerar.

-Si el peligro anterior no existe, gira para estar en posición de ataque.
Para ello, calcula en qué dirección y momento debe disparar para que el proyectil
impacte al oponente, suponiendo que éste conserva su velocidad.

-Se dispara un proyectil tipo 4 si el oponente está "lejos"
y un tipo 1 si está "cerca", siempre que el oponente esté en la mira

-Luego deja una mina sólo si el oponente se dirige a colisionar con la nave
y está "cerca".

-Intenta esquivar minas (si existen), girando y acelerando
mientras tenga en frente la mina

Problemas encontrados:

-Primero trabajé en el script para predecir el ángulo necesario para acertar
un disparo hacia el oponente, considerando la dirección y rapidez con que
se mueve. Mediante trigonometría y cinemática logré sacarlo, aunque costó
un poco, sobre todo porque no estaba seguro de si el script funcionaría
en todas las combinaciones posibles de direcciones y posiciones.

-Noté que el script de KrakenHimoto para girar recibe un ángulo como argumento,
pero el signo de este ángulo no sigue la nomenclatura de GM (positivo contra
las agujas del reloj). Me dio dolores de cabeza hasta que encontré que
su nomenclatura era diferente.

-El cálculo del lado hacia donde conviene girar para mirar hacia el centro
es muy simple, pero nada obvio. Esto me tomó bastante tiempo, porque
un ángulo de 359º y otro de 1º son muy parecidos en un papel, pero para
nada a la hora de hacer cálculos.

-Fue extremadamente difícil encontrar un algoritmo mínimamente decente
para esquivar las minas. El que hice me parece bastante malo y suele fallar,
pero al parecer garantiza que la nave no se saldrá de la arena (lo cual
sería una muerte definitiva, a diferencia de tocar una mina)

Notas:

-La IA fue calibrada por ensayo y error para saber, por ejemplo,
a qué distancia del centro del room se considera peligroso estar, o
qué velocidad máxima se está dispuesto a tolerar.

*/



/*
Fecha de inicio: 01/11/2009
Fecha de término: 03/11/2009
Nombre del creador: Guacusio
Versión:2 (corresponde más bien a ligeras modificaciones de la IA anterior)

Algoritmo:

-La IA no hace nada si no existe el enemigo

-Se detecta una colisión potencial con una mina

-Se calcula el ángulo óptimo de disparo, tomando en cuenta la velocidad
del oponente y la de los proyectiles

-Se revisa si hay peligro de salir de la arena de combate, en base a
la distancia de la nave hasta el centro del room. Si es así, deja de acelerar
y gira hasta mirar hacia el centro para luego acelerar.

-Revisa si está en posición de ataque, comparando el ángulo óptimo de disparo
con el image_angle.

-Si el ángulo es óptimo, se dispara un proyectil tipo 4 si el oponente
está "lejos" y un tipo 1 si está "cerca"

-Luego deja una mina sólo si el oponente se dirige directamente a colisionar
con la nave y está "cerca".

-Intenta esquivar minas (si existen), girando y acelerando mientras
tenga en frente la mina. Gira en el sentido que más rápido lo aleja
de la mina.

Problemas encontrados:

-En esta versión corregí el script para encontrar el ángulo óptimo de
disparo. En un comienzo no funcionaba, hasta que luego de varias horas
de pensar y rebuscar, noté que tenía un simple error de formato de ángulos
dentro de una operación: se me había olvidado transformar radianes en grados.
¡Ajajajajaja! ¡Tan simple como eso!

-El algoritmo para esquivar minas sigue siendo igual de malo, lamentablemente
parece ser que va más allá de mis posibilidades, por ahora.

*/


RaulOmega
Código: [Seleccionar]
/*REGISTRO
   ---DATOS DE LA IA---
   
   Fecha version 1: 29/10/09
   Fecha version 2: 5/11/09
   Autor: Raul_Omega

   
***DESCRIPCION VERSION 1 (29/10/09)***   

--FUNCIONAMIENTO--
La IA cuenta con  2 movimientos o estados.

  >> Movimiento 1 (movimiento 0 y movimiento 1 del evento Step)
   
   La nave se mueve desde la posicion inicial hasta un radio cercano al borde del circulo, y acto
   seguido describe un arco cerca del limite del terreno de juego.
   El objetivo de este movimiento es que la IA rival se salga del circulo y se estrelle, esta claro que   
   para IAs avanzadas este movimiento sera inutil
   
   Al cabo de 15 segundos se pasa al movimiento 2
   
  >> Movimiento 2 (movimiento 2 del evento Step)
 
  La nave sale al ataque del enemigo, siempre buscando su cola para atacar por la espalda. Se ha definido una velocidad
  maxima dependiendo de la distancia al centro con el fin de evitar que la nave adquiera velocidades muy altas
  y se salga del circulo por no poder frenar. A su vez se ha definido un radio critico que si se sobrepasa
  se hace girar la nave en direccion al centro y acelerar al maximo para evitar estrellarse.
 
   Este movimiento perdurara hasta acabar la batalla
   
En cuanto al ataque, por el momento no se ultilizan las minas ya que muchas veces era necesario volver por el camino
en el que ya se ha colocado una mina y era facil tocarla poco despues de ponerla. Mientras no se defina una estrategia
para sortear minas no se incluirá su uso

Por tanto la nave solo ataca con starshoot o con el ataque basico. El starshoot se utiliza cuando la nave enemiga se encuentra
por delante de nuestra nave a una distancia menor de aprox 100.
   

--PROBLEMAS SURGIDOS--
-Uno de los primeros problemas surgidos fue como evitar que la nave se saliese de la region de juego, para ello se opto por
definir unas regiones de velocidad. Si la nave se encuentra cerca del centro del circulo de juego puede correr mas que si
esta cerca del limite. Aparte de esto se define un radio critico a partir del cual la nave fija su direccion en el centro
del circulo.

-Por falta de tiempo no se ha diseñado una estrategia para sortear minas enemigas por lo que la IA puede resultar
muy vulnerable a ellas.


***DESCRIPCION VERSION 2 (06/11/09)*** 

Se ha elimindado el movimiento 1 en el que la nave recorria el circulo externo de la arena, ya que solo
unas pocas IAs cayeron en esta trampa en la primera ronda.

Como mejoras:
-Ahora la nave utiliza minas y se ha implementado una estrategia para esquivarlas, aunque no siempre funciona

Problemas:
La nave tiene muchos aspectos por mejorar pero no he dispuesto de suficiente tiempo para investigar y programarlo


Hardraid
Código: [Seleccionar]
//explicacion de como piensa la IA:
//Fecha: 27/10 hasta 30/10;
//primero controla diferentes valores como por ejemplo las balas que se crean, movimientos futures, etc..
//sabiendo todo esos datos realiza diferentes acciones para poder atacar por adelantado.

//Problemas surgidos...
//problemas con calculos matematicos por mi escaso conocimiento en matematicas... xD


Alfonsos1
Código: [Seleccionar]
/*Fecha de inicio: 14/10/2009 Fecha de finalizacion: 30/10/2009

VREVE DESCRIPCION DE LA IA

Esta IA se vasa en dos estados, el primero es atacar y perceguir al enemigo y el segundo es alejarce del vorde.
Se vasa en distinas direcciones, angulos y otras variables para decideir que deve hacer.
La IA estara en el estado 1 (atacar y perceguir) siempre y cuando la nave no se hacerque a menos de un minimo (MIN).
La IA no utiliza minas ya que no les encontre la manera de que me favorecieran a mi mas que al enemigo.
Simplemente intenta apuntar accia la direccion a la que se mueve el enemigo y disparar.

EVOLUCION DE LA IA

Lo primero que intente hacer es darle punteria a la nave. Osea determinar la direccion a la que devia disparar (DIRECCIONATK) y
que gire en asta esa direccion.
Primero hice que apuntara a la posicion del enemigo, lo cual funcionaba solo si el enemigo estaba quieto.
Luego hice que considerara la speed y la direction del enemigo y tambien la distancia de la nave al enemigo, lo que hizo que
mejorara vastante.
Pero finalmente termine agregando el factor speed_accel y friction ademas de la dir y la rot del enemigo y una estimacion de
cuanto tardaria el disparo en llegar al enemigo, asi mismo la punteria no mejoro mucho.

Luego simplemente hice que hacelerara todo el tiempo, chocaba rapidamente con el vorde de la arena.
Cree la variable PERCEGUIR y hice que esta fuero 0 si la nave se hacercaba mucho al vorde de la arena, luego hice que checara
si PERCEGUIR era 1 en ese caso haceleraba y perceguia al enemigo de lo contrario no aceleraba y giraba asta apntar al centro de
la arena, para esto tube que crear una nueva direccion (DIRECCIONCENT).
Pero este sistema era eneficiente ya que habeses chocaba y otras veses dejaba de perseguir al enemigo en situaciones donde no
habia riesgo de chocar.
Entonces cree la veriable MIN la cual representaba la distancia segura minima del vorde de la arena. Luego puse que cuado la
nave se hacercar al MIN cambiara al estado 2 (alejarce del vorde), habian veses en la que la nave no podia respetar el margen
y terminaba entrando a ese MIN. Por eso aumente e MIN multiplicandolo por un numero.

De todas maneras la nave chacaba con el vorde de vez en cuando pero no queria aumentar mas el MIN ya que cuanto mas tiempo
pase la nave en el estado 1 es mas eficiente. Por eso cree la variable RIESGO se vasa en la velocidad de la nave, en su
direccion y en la distancia al vorde de la arena. Cuando el RIESGO es muy alto la nabe deve dejar de acelerar, pero puede
seguir apuntando y disparando.

Probando la nave vi que aveses estaba muy lejos y disparaba, luego se acercaba pero aun no podia disparar nuevamente, por lo
que hice que si las naves se hacercan muy rapidamente la nave espere para disparar asta que esten a una dispancia mas pequeña
esto mejoro la punteria.


knd144
Código: [Seleccionar]
/*hoja de progresos y funcionamiento de mi IA*/


      //funcionamiento de mi IA
/*
-Mi inteligencia artificial es un agente logico que basa su respuestas iniciales a travez de descartes de operaciones con respecto
a la direccion y vista de la nave, y tal comportamiento se mantiene en todo el juego:
-desde que inicia empieza a rotar la nave, su rotacion es calculada a manera de que sea la mas corta posible para que quede mirando
dentro de ciero rango de error de direccion a la nave oponente, asi cuando la otra nave quede al lado izquiero, mi nave rote al lado
izquierdo, si queda al lado derecho, rote al lado derecho.
-Teniendo la nave enemiga enfrente ambas mirandose, se dispara la bala estrella
-La nave solo acelera cuando tiene la nave contraria mas o menos frente a él, y desde entonces jamas deja de acelerar. Caso contrario,
en teoria la nave deja de rotar en ocasiones, pero debido a que con cada paso que de mi nave hacia adelante la direccion con respecto
al enemigo cambia, la rotacion se activa instantáneamente.
-Para la bomba se podra poner cada que cierta alarma se active(la 2, aun que tambien funciona para activar el disparo,
la vuelvo a usar para ahorrar recursos) y se cumple la condicion de que la nave enemiga
hipoteticamente biene hacia la mia, se deposita la bomba; aun que tambien llegara a depositarse aleatoreamente de manera obligada.
-El disparo se activa con 2 condiciones: activarse una variable que se inicializa solo con la alarma 2, y cuando este mirando al enemigo
empieza la balacera. Debido al giro ecagerado (o abombachado) la bara dificilmente se disparará hacia la direccion precisa en donde esta
la nave enemiga, lo que dara la oportunidad de que se desvie y la bala conlicione con la nave.



             //progreso de mi IA
/*primeramente, quiero que mi nave rote hacia dentro del campo y
que mejor que al hacerlo empiece a buscar al oponente y se dirija a este.

estoy teniendo varios problemas para determinar al enemigo frente a mi IA,
ya que con la simple direction y point_direction() no funciona; buano, a veces si
pero no se el por que debes en cuando. He intentado crear ciclos while en vez de
un if, aun que tengo los mismos resultado, igual trato con ciclos Do pero casi
siempre termino haciendo cilcos infinios, y cuando no, el codigo llega a no
repetirse y perder el resultado en el intento.
Hago nota que he intentado comprobar grado por gradola direccion a la que mira
mi IA y la direccion en la que se encuentra el oponente, no funciona como debe
ser.

he estado haciendo intentos con alarmas para ver si las funciones que detienen
el giro o hacen que la nave dispare funcionan, y así es, la cosa esta en mi
algoritmo aun que no veo en que.

ahora ya pued fijar la "vista" hacia el enemigo, y segun yo quiero es que mi nave gire
mientras el oponente no este frente a él, lo que da el problema que casi siemrpe debera
estar girando y moviendose, asi que para que mi nave no giera hacia un solo lado
y empiece a andar en espiral necesito que fije la rotacion mas corta para mirar al oponente
y creo que la clave misma es la direccion del oponente. En un principio queria checar
cual distancia en grados era mas corta (si de manera inversa al reloj, o de manera normal)
asi que use contadores en un ciclo for para que vaya checando ambas direcciones y vea cual
es mas corta segun el contador mas pequeño. Pero la verdad fue un fracaso ya que la nave
oponente siempre se mantendra en movimiento... asi que fijando la direccion misma de la
nave con erspecto a la mia podre saber cual es la rotacion mas corta, aun que tendre que
pulir detalles creo que tengo la solucion.

Hasta ahora estoy haciendo una IA que se base en los movimientos del enemigo, si tengo el suficiente tiempo
como dedicarle un dia entero, creare una estrategia mas propia. De lo contrario enviare esta a
la primera ronda y en la segunda la pulire siendo que tengo la base ya hecha.

la teoria anterior no tenia sentido a la hora de la practica, ya que su direccion puede tener
45 grados de diferencia a su direccion con respecto a mi nave... pero logre obtener una solucion
matematica que compara direccion de mi nave y direccion de mi nave con respecto a la otra
y obtuve una respuesta mas correcta. El problema es sin duda ahora una nave inestable, aunque
sin duda se comporta de una mejor manera. El problema es que avanza mucho mientras gira, pero
ya luego vere como arreglar eso. Me pondré a trabajar mas en mi ataque, ya que ya es hora
de empezar con la ofensiva, despues tratare de maneobrar mejor.
Por lo q veo un ataque no puede ser muy efectivo si mi nave es propensa a salirse de la
arena de batalla, y veo que la causa mayor es el hecho de que se pasa derecho al seguir al enemigo,
asi que por ahora estoy intentando en una ultima alternnativa el que la nave deje de
acelerar si tiene a su espalda la nave enemiga, considerando un rango, claro esta.
veo que el frenar cuando tengo de frente el borde del campo es algo tonto, mi nave tiene
la defensa natural de que aun que gire sigue avanzando y puede esquivar hasta cierto punto el
borde del campo siempre y cuando el oponente no este muy cerca de ella.

el sistema de ataque tengo pensado empezar atacando con una bala estrella justo cuando el oponente
este frente, asi que deshabilito el ataque normal al principio para que lance la bala estrella. La unica forma
que se me ocurrio para hacerlo es que el ataque normal se habilite pasado cierto tiempo despues de iniciar
la partida.
Veo que el tiempo de inicio de la ronda se toma encuenta desde que se crea la nave, por lo que solo
aumentare el tiempo para que se active la alarma.
Funciona bien el disparo estrella al principio, pero probando con migo o la copia de mi IA no funciona
mas veces, como tengo q poner intervalos de disparos y eso seria saturar mucho el codigo, ya no lo
pulire, confiare en que las demas IAs den oportunidad de disparar mas veces la estrella.

La bomba es puesta con una condicion hipotetica: si el enemigo me mira quiere decir que biene hacia a mi
y por consiguiente tomara una ruta directa, por lo que avansaré y pondré una bomba en donde estaba mi nave.
Aun que veo que por alguna razon extraña (tal vez mi logica a la hora de programar) la bomba no se pone, igual creo
que se debe a que el ataque normal esta activado, lastima, tendre que dejarlas al azar si esta condicion se
cumple cuando pase la alarma...

/*

El disparo normal actuará todo el juego, ya que por desgracia la punteria es lo que menos le pude hacer, lo que tiene
es por la rotacion natural de mi nave que siempre trata de dirigirse al enemigo.*/


ElvisKelley
Código: [Seleccionar]
//segun entiendo aqui llevo un Registro de que trata mi IAElvisKelley-V-0.1 fecha: 31/10/2009.
//Explicacion como piensa mi IA
//bueno es simple mi Ia solo detecta el angulo en grados del centro
//y se dirije a el centro. si detecta la nave enemiga la persigue
//y le dispara, si se aleja mucho del centro regresa a este
//asi evitar chocar y destruirse.
//cualidades su ataque.
//su habilidad para mantenerse en la pista.

//Problemas Surgidos.
//Espero resolverlo mas adelante.
//los problemas que afectaron.
//al principio el problema fue que se estrellava
//cosa que resolvi quitando una variable.
//esa era para detectar disparos enemigos pero causaba descontrol en la nave
//espero mejorarlo para colocarlo de nuevo mas adelante.
//por ahora el defecto es que  no esquiva las minas :-C.


Analisis de las IAs

Killer:
Citar
Gran merecedor de la corona, su IA destaco principalmente por la efectividad de sus disparos y por su capacidad de plantar bombas y esquivarlas. Si bien no tiene la ofensiva mas potente de todas, esta muy balanceada en cuanto a evacion y ataque. Disparo con capacidad de ver a futuro la posicion de su enemigo para dar en el blanco.

Krakenhimoto:
Citar
Junto con la IA de Killer estas dos IA estaban un escalon por encima del resto de las IAs. Si pusieramos cualquier IA en 20 rounds con la IA de Kraken o Killer con muchisima suerte ganarían una. En mi opinion la IA con más capacidad ofensiva y precision a la hora de atacar. No hace uso de las bombas y muy poco del starshot, esto se debe a que por su precicion de disparo le conviene mas por un balance de delay/potencia hacer uso del arma basica. Su gran debilidad es su no muy pulido sistema para esquivar bombas. Al igual que Killer, aunque con un sistema algo mejorado tambien tenia la capacidad de calcular a futuro la posicion de los enemigos para dar en el blanco.

Guacucio:
Citar
Esta IA era bastante balanceada. En ese sentido la 2da IA mas balanceada por debajo de la de Killer. No tenia gran ofensiva pero de alguna manera de las arreglaba para salir victorioso en la mayoria de sus peleas.

Alfonsos1:
Citar
Esta IA me sorprendio debo decir, esperaba mucho menos de ella. Una IA muy ofensiva, un escalon por debajo del ataque de KrakenHimoto y Killer que le dio un 4to puesto. Aunque merecía el 3ro a mi entender.

Topet:
Citar
No hay mucho que decir, una IA tipica de mitad de tabla. No destacaba por nada pero tampoco tenia carencias demasiado marcadas.

Raul Omega:
Citar
Su defensa y ataque fueron pobres. Se esperaba mas de esta IA debido a que fue el ganador de GIA1. Si aplaudo su capacidad de innovar con su sistema de inicio donde daba medio arco por el campo a ver si se suicidaban algunos jugadores. Aunque no le dio demasiado resultado. Ya que la mayoria, salvo knd144, tenian un sistema para evitar salirte del campo.

Elvis Kelley:
Citar
Una IA que trataba de mantenerce siempre cerca del centro del campo por temor a irse del radio de juego. Eso le costo ser blanco facil en practicamente todas las peleas. En cuanto a su ataque su idea era disparar constantemente, aunque la precision del disparo fuera nula, disparaba al azar practicamente en el 90% de las oportunidades. De todos modos era mejor eso a algunas IAs que por esperar el momento exacto terminaban por no disparar practicamente nunca.

knd144:
Citar
La IA Kamikaze, su ataque no estaba tan mal, pero su incapacidad de permanecer dentro del campo le costo el suicidio en 6 de 7 peleas.

Si participaste de GIA te invito a colocar esta imagen en tu firma.


2
Guerra de IAs (GIA) / ¿Que es GIA?
« en: Julio 27, 2010, 08:33:49 pm »

Este post es para aclarar un poco de que va GIA (Guerra de IAs). Se que mas de uno se marea al oir hablar del tema y no quieren leerse mis tochoposts de reglamento donde esta todo explicado, asique voy a hacer un breve resumen y cualquier duda conceptual que tengan me la hacen saber por acá.


¿Qué es GIA?


GIA, como sus siglas indican significa Guerra de IAs.
¿Entonces, qué es una IA?
En ciencias de la computación se denomina Inteligencia Artificial (IA) a la capacidad de razonar de un agente no vivo.
"Es la ciencia e ingeniería de hacer máquinas inteligentes, especialmente programas de cómputo inteligentes."

En otras palabras, todos aquellos entes que simulen cierta inteligencia se los considera IAs. Por ejemplo, cuando competimos contra la PC en el Ajedrez estamos haciendole frente a una IA. Cuando estamos jugando a un FPS como el Counter Strike hacen acto de presencia las IAs para controlar a los enemigos y a los aliados. En el AoE (Age of Empires) tambien hacen acto de presencia. Realmente si lo pensamos detenidamente están en prácticamente todos los videojuegos.

¿De que va el concurso?
Como su nombre lo indica, en este concurso compiten IAs. Esto significa que los jugadores no participan directamente de la competencia sino que lo hacen a través de sus IAs, que los representan en cada batalla.

Citar
Imaginemos que el concurso tiene la tematica de Carreras de Autos. Entonces lo que tendrian que programar los jugadores es la IAs de los Autos para que estas participen de las carreras.
Este es un concepto muy similar al que se aplica a todos los concursos de GIA.

La otra gran duda que tienen todos es, Pero, pero... ¿Cómo voy a programar una IA?, y empiezan a tener dudas existenciales de que se puede o no tocar del codigo del juego. Sepan que para cada concurso estas reglas varian ligeramente pero básicamente lo que el usuario edita es un solo objeto que es el que controla a su IA, y solo puede modificar variables de su propia IA. Mientras que los movimientos de la IA "fisicamente" se hacen a traves de una serie de scripts al que la IA llama y son comunes a todos los participantes.

Citar
Imaginemos que es una tematica de Naves Espaciales, la IA hizo unos calculos trigonometricos y sabe que debería disparar a 35° para darle a su adversario. En ese caso todos esos calculos se harían con variables internas creadas por el propio participante. Mientras que la acción de "rotar" y "disparar" la harían llamando aun script pre-establecido en el concurso, ejemplo "scr_rotar(-5)" y "scr_disparar()".




GIAs Realizados hasta el momento:
GIA_01 la Carrera de los Droides (Por KrakenHimoto)
GIA_02 Spaceship War (Por KrakenHimoto)
GIA_03 Tetris (Por Ciberman)

Para conocer mas sobre los mismos pueden dirigirse a los temas correspondientes en esta misma sección del foro.


Saludos, KrakenHimoto

3
Guerra de IAs (GIA) / GIA_01 La carrera de los Droides
« en: Julio 27, 2010, 08:19:29 pm »
Voy a hacer un resumen de este concurso que quedo en el olvido porque lo desarrolle a través de los blogs que ya no existen, y me parece interesante mencionarlo para todos aquellos que quieran participar en algun GIA futuro una mejor idea de que va el concurso.

Este GIA se llevo a cabo hace cosa de un año y pico, a finales de 2008 si la memoria no me falla.

La temática de este GIA_01 era ver quien tenia los mejores tiempos y pasaba mas cantidad de niveles en un juego de puzzles plataforma de vista lateral. El concurso consistía en varias rondas y a medida que iban destrabando los niveles se iban haciendo las nuevas rondas, asi hasta llegar al noveno nivel que era el ultimo.



Bueno, el concurso se finalizo en 5 rondas, declarandose Campeon del GIA_01 merecidamente Raul Omega. Aunque luego agregue una "6ta" en donde participa Ciberman fuera de tiempo, pero ya que hizo su IA debia ponerlo.


Les dejo tanto el editable (.gm6) como el .exe de la ultima versión para que puedan echarle un ojo y porque no, intentar hacer sus IAs, siempre serán bienvenidas por mi.

Aca les dejo tambien un link al video oficial del torneo + CibermanIA (que no participo oficialmente del concurso sino luego de finalizado) para que vean de va todo esta de Guerra de IAs :)





Registros

Raul Omega
Código: [Seleccionar]
----DATOS DE LA IA----



    Fecha de inicio: 1-Mayo-2009

    Fecha de la version 1: 2-Mayo-2009

    Fecha de la version 2: 10-Junio-2009

    Fecha de la version 3: 18-Junio-2009

    Autor: Raul_Omega

    Maximo nivel superado version 1: Nivel 6

    Maximo nivel superado version 2: Nivel 8

    Maximo nivel superado version 3: Nivel 9

 

----EXPLICACION DE SU FUNCIONAMIENTO----



En cada Step la IA detecta el proximo obstaculo a superar y tambien

los 6 obstaculos siguientes (a 16,32,48,64, etc pixeles de distancia).

Aunque apenas se ha sacado partido al calculo de obstaculos posteriores.



En total es capaz de diferenciar 13 situaciones diferentes:

1-Flechas opuestas: El droide debera saltar y andar

2-Muro: El droide debera saltar y andar

3-Pozo: El droide debera saltar y andar

4-Camino sin salida (pared): El droide cambiara su direccion

5-Dejarse caer (si  el unico camino posible es dejarse caer): El droide debera andar para caer

6-Camino libre: No hay obstaculo, el droide debera andar

7-Pinchos boca arriba: El droide debera saltar y andar o bien pararse para no caer en ellos

8-Almoada: Si se detecta una almoada bajo el droide se deja de avanzar

9-Trampolin: Se salta hasta que se alcance la maxima altura, despues continua avanzando

10-Pinchos movimiento vertical: Se para mientras los detecta

11-Pinchos movimiento horizontal: Si estan a la misma altura se saltan si no se avanza

12-Mar de pinchos de movimiento horizontal: Detecta si hay pinchos con movimiento horizontal debajo y se deja caer solo

    cuando estan lejos

13-Escalones: Este obstaculo no fue necesario de introducir hasta el nivel 9, en el se necesitaba dejarse caer

    en un huevo para poder saltar una zona de pinchos

    

    

Existe una variable posH que indica si la salida se encuentra a la izquierda o a la derecha del droide.

En caso de haber una pared el droide cambiara posH a la direccion opuesta. (Como ocurre en el nivel 5)

La variable cambiosH cuenta las veces que posH cambia de valor sin que se haya tocado una pared

en caso de que cambiosH alcanze el valor 2 significa que el droide esta oscilando en torno a la salida

debido a que esta a una altura diferente (Como ocurre en el nivel 9), si esto ocurre se fija posH hasta que se alcance

una pared.



Aparte de los obstaculos antes mencionados que se calculan con un Script, existe un tipo de obstaculo

que no es detectado y que se trata de los pinchos que miran hacia abajo. En lugar de incluirlo como un obstaculo

el droide cuando se le manda avanzar checkea que no haya un pincho de esta clase delante suyo, en caso de que lo haya no avanza.





----PROBLEMAS SURGIDOS----



El primer problema que se me planteo fue buscar la manera de detectar los obstaculos, entonces se me

ocurrio crear un script que por medio de acciones del tipo collision detectara los proximos obstaculos

y devolviese un vector obstaculo(X) con el valor igual al tipo de obstaculo (del 1 al 9), siendo la X la del primer, segundo...

hasta el septimo obstaculo por delante del droide. Si bien, salvo para el obstaculo "Dejarse caer" no tiene

utilidad conocer futuros obstaculos, pero decidi dejar asi el script por si me hacia falta posteriormente.



Una vez definido este script y el evento step donde se actua segun el obstaculo no tuve problemas hasta el

nivel 3, donde aparecen por primera vez los pinchos. Obstaculo que aun no habia implementado. Me llevo un tiempo pensar

la manera de superarlos por que tenia que calcular cuando era necesario que el droide parase de avanzar para no chocarse con

un pincho, y sin embargo si hay pocos pinchos interesa seguir avanzando para alcanzar el otro lado.

Por lo que decidi:

    -Si vspeed<=0 (estoy en el suelo o saltando): El droide sigue avanzando

    -Si vspeed>1 (estoy cayendo):

            -Si tengo un pincho justo delante: Se para en caso contrario sigue adelante con el salto

            

En realidad superar este obstaculo fue en gran medida debido a la prueba y error hasta que obtuve el resultado deseado

por ello quedo algo desordenado el codigo.



Despues de esto el siguiente problema fueron los pinchos bocaabajo que no habia incluido en el script y que

decidi en lugar de incluirlos simplemente detectarlos cuando el droide tuviese que avanzar



El siguiente problema importante aparecio en el Nivel 5, que implicaba un cambio de direccion del droide

a mitad del nivel. Para que el droide supiese para donde avanzar idee lo siguiente:

    -Mientras no se choque con una pared el droide sigue la direccion impuesta por posH segun donde este la salida

    -Si se encuentra una pared posH cambia de direccion y ya no se chequea donde esta la salida

    se supondra que se acabara encontrando

    

El ultimo problema encontrado fueron los trampolines del Nivel 6, ya que el ultimo trampolin del nivel mi droide no

lo detectaba correctamente ya que las condiciones para detectar un trampolin y para dejar de saltar sobre él

se "superponian". Con lo cual decidi poner un par de variables adicionales.

    -Saltando:

        0: El trampolin no se ha tocado o bien no hay trampolin

        1: Se esta saltando sobre el trampolin

        2: Se ha alcanzado la maxima altura, el droide avanza hasta que deja de estar sobre el trampolin, momento

            en el que Saltando vuelve a 0 para repetir el proceso con otro trampolin

    -xsalto: Coordenada x del trampolin sobre el que se esta saltando, sirve para saber si se deja de estar sobre

        el trampolin

    

En la version 2 el nivel 9 no se podia superar debido a que el droide se chocaba con unos pinchos que miran hacia abajo

debido a que para poder pasar esa zona habia que dejarse caer en un hueco situacion que era incapaz de detectar, en la

version 3 se incluyo que siempre que hubiese un escalon de 1 bloque de altura el droide lo bajase


Ciberman
Código: [Seleccionar]
------------------------------------

////////////////////////////////////|

/////Datos de la IA:////////////////|

////////////////////////////////////|

//Fecha de Inicio:17/09/2009////////|

////////////////////////////////////|

//Fecha de Finalizacion:24/09/2009//|

////////////////////////////////////|

//Autor: Ciberman///////////////////|

////////////////////////////////////|

------------------------------------



PROBLEMAS que tomaron mucho resolverse:

-nivel 1: Detección de el impulsador izquierda y derecha. cuando seguir y cuando saltar.

-Nivel 2: Detección de las paredes, y cuando devía saltar

-nivel 3: saber cuándo es que había que parar de caminar y parar el salto para no caer en los

        pinchos. basicamente el sistema utilizado comprueba si existe un pincho y en ese caso

        se fija el siguiente espacio libre, salta, e intenta caer alli.

-nivel 4: Un error. el droide detectaba que tenía que saltar al comienzo y entonces saltaba pero

        no avasaba por consecuencia. con unos ajustes de revisión alcanzó.

        Tambien fue dificultoso pasar un pinche normal que debía detectarse en el aire. Tambien

        una barrera de pinchos del final.

-Nivel 5: No se sabía cuando debía cambiar de dirección. eso tardó mucho en resolverse... Costo

        tener que bajar al nivel 2. Luego el siguiente problema fue la deteccion abanzada de pinchos.

        Cuando debía parar y cuando abanzar. Siguio con problemas el hecho de una bajada llena de

        pinches, se debío hacer que el droide reconociera cuando podía abanzar y cuando frenar para

        una correcta caida.

-Nivel 6: Al principio, con el código que le había dado avanzó el droide la mitad del nivel pero callo

        en un pozo con pinchos. Luego de unas modificaciones al código de detencion de pinchos, el

        droide pudo pasar callendo en la almhoada. Luego un problema grande surgió. Devía detectar los

        trampolines. Con un código de detección que me costó lo solucioné.

-Nivel 7: Lo superé rápido. No hubo basicamnte problemas.

-Nivel 8: Fue un poco dificil configurar el movimiento en las dos direcciones con esas rocas, pero despues

        no hubo mayores problemas.


Guacusio
Código: [Seleccionar]

//Registro



//Fecha de inicio:07-05-09

//Fecha de término:16-05-09

//Autor:guacusio



//Funcionamiento:

/*Primero trabajé con 3 variables: izq, der y salto, donde cada una podía ser true o false,

dependiendo de si el personaje debía moverse a la derecha, a la izquierda y/o saltar.

Como vi que el código se estaba haciendo muy poco estructurado y difícil de depurar y hasta de entender,

mandé todo al diablo y comencé desde el principio con otra idea que recién estaba aprendiendo: máquinas de estados finitos



Utilicé una máquina de estados finitos (la primera que hago) XD

basándome en los geniales tutoriales de Fenris:



http://www.comunidadgm.org/index.php?page=60

http://www.comunidadgm.org/index.php?page=57

http://www.comunidadgm.org/index.php?page=58

http://www.comunidadgm.org/index.php?page=59



La máquina tiene 4 estados:

quieto: no se avanza ni se salta

salto:está saltando o cayendo verticalmente, sin moverse hacia los lados

salto_avance:lo mismo que salto, pero incluye movimiento horizontal

avance:movimiento horizontal solamente, sin movimiento vertical



La dirección de avance la controla la variable avance (1=derecha, -1=izquierda, 0=sin avance)

La variable rec_avance guarda la dirección de avance en caso de detenerse, para luego retomar el avance en la dirección correcta



Los eventos para cambiar de estado son un montón. Se encuentran en los scripts asociados a los estados.

Hay explicaciones en los comentarios de esos scripts.

A continuación hay un resumen de los eventos de cada estado:



quieto:(se basa en la hipótesis de que los bloques móviles tienen como parent a obj_global_pinches)

-Si hay un tipo de pinche adelante que se mueve verticalmente y justo ahora se mueve hacia arriba permitiendo pasar, cambia al estado avance



salto:

-Si hay pinches adelante pero no hay en la próxima actualización cinemática(*), pasa al estado salto_avance

-Si abajo hay una pared y no hay pinches adelante ni está sobre un trampolín, cambia al estado avance

-Si está sobre un trampolín y ya llegó al punto más alto que puede llegar (aprox. 15 bloques de altura), cambia al estado salto_avance

(*)se refiere a los nuevos valores de x,y y gravity que calcula el script scr_step



salto_avance:

-Si hay pinches adelante, deja de moverse horizontalmente pero no cambia de estado por ahora. Si no hay, retoma el movimiento horizontal

-Si está sobre una esquina (a cualquier altura) y no hay pinches sobre su cabeza, cambia al estado salto

-Si inmediatamente abajo hay un muro, cambia al estado avance

-Si está sobre la esquina de adelante de un trampolín (a cualquier altura) y va cayendo, cambia al estado salto



avance:

-Si entra a una zona donde hay pinchos que suben y bajan, cambia al estado quieto

-Si adelante hay pinches, cambia al estado salto

-Si adelante hay un muro de hasta 3 bloques de altura, cambia al estado salto_avance, de lo contrario cambia de dirección de avance

-Si llega a una esquina y arriba no hay pinches, o si se encuentra con un slope desfavorable, o si frente a sus pies hay pinches, cambia al estado salto_avance

-Si llega al borde de un trampolín, cambia al estado salto



Otros scripts:



scr_guacusio_voltea: revisa si tiene frente al personaje una pared muy alta (más de 3 bloques de altura), si es así cambia el sentido de avance horizontal y reorna true; de otro modo retorna false

scr_guacusio_arriba: revisa si hay pinches sobre el personaje, hasta una altura de 3 bloques

scr_guacusio_abajo: devuelve 1 si el personaje está sobre suelo ahora y en el próximo estado cinemático, 2 si llega a una esquina de suelo normal y 3 si llega al borde de un trampolín

scr_guacusio_cambia_a: cambia al estado argument0, invocando las acciones asociadas al ingreso a ese estado (entre otras cosas, el valor de la variable avance)

scr_guacusio_aplasta: cambia al estado quieto si llega a una zona de pinchos que se mueven verticalmente



Suposiciones e imperfecciones

Por falta de tiempo (y de genio), esta IA no diferencia entre cojines y paredes, así que no aprovecha los primeros.

Esta IA supone que los bloques con movimiento vertical que matan al personaje tienen parent obj_global_pinches

Esta IA hace al personaje detener su avance horizontal en cada esquina si está en el estado salto o salto_avance. Esto ralentiza su avance pero fue la única forma que encontré de pasar ciertos obstáculos potenciales (que no salen en los niveles que hizo KrakenHimoto, por cierto) como pozos profundos, donde si llego y hago un salto completo desde el primer bloque que puedo, me puedo quedar atrapado en el pozo.

Esta IA, por lo dicho, no está optimizada para pasar el nivel lo antes posible, pero sí para llegar en forma segura.



Dificultades:

Todo fue difícil XD. Sin embargo, tuve especiales problemas para esquivar los pinches ya que hay una gran gama de combinaciones de posiciones relativas de los pinches respecto al jugador.

También me costó encontrar un método para hacer que el personaje supiera cuándo avanzar en sentido opuesto en el nivel 5 (aunque no fue difícil para nada implementarlo una vez se me ocurrió)

El uso de trampolines en el nivel 6 fue bastante complejo, principalmente porque no se me ocurría cuándo debía abandonar el trampolín.




Huarelion
Código: [Seleccionar]
Nombre del creador: Eduardo Ibarra (eduardo960)

---------------------- IA version 0.1 ----------------------

Fecha de inicio de la IA: Sábado 18 de Abril de 2009

Fechas de finalización de la IA: Domingo 19 de Abril de 2009

Cambios: Creación de la base de la IA, termina satisfactoriamente los 3 primeros niveles

------------------------------------------------------------



---------------------- IA version 0.2 ----------------------

Fecha de inicio de la IA: Lunes 20 de Abril de 2009

Fechas de finalización de la IA: Lunes 20 de Abril de 2009

Cambios: Optimizado el codigo de chequeo de paredes, solucionados unos detalles relacionados con los saltos de paredes

------------------------------------------------------------



---------------------- IA version 0.3 ----------------------

Fecha de inicio de la IA: Miércoles 22 de Abril de 2009

Fechas de finalización de la IA: Jueves 23 de Abril de 2009

Cambios: Solucionados algunos bugs de detecciones a la izquierda, IA un poco más inteligente (Términa los niveles en menos tiempo), Nivel 4 terminado,

arreglados más detalles relacionados con el salto del personaje, Detección de picos por encima del personaje, Detección de picos mejorada

------------------------------------------------------------



Eventos añadidos aparte de los ya por defecto:



- Alarma 1



Seguimiento de la IA:



Al comenzar con el desarrollo de mi IA del concurso GIA, lo primero que hice fue usar la lógica para planear como definiría la dirección para llegar

a su destino que sería la meta, hacer que se replantee la dirección en caso de que no encuentre un avance para aproximarse a la meta.



Los problemas que actualmente tiene mi IA es que es capaz de pasar un nivel complejo pero quedarse trabada en un nivel menos complejo, ya que el código

no esta totalmente optimizado, pero el codigo será optimizado para que pueda pasar niveles de todo tipo.



Pensamiento de la IA:



- Definir la dirección inicial a la que moverse

  - Si el checkpoint se encuentra en una posición Y muy lejana, su dirección por defecto es 1 (derecha)

    - La IA tiene un máximo de 2 intentos para pasar por una zona, si su posición X es igual después de todos los intentos, cambia de dirección

- Durante su ejecución, se pone en busqueda de aceleradores de velocidad

  - Si encuentra un acelerador de velocidad contraria a su dirección, realiza un salto, si va hacia su dirección, camina para tomar velocidad

- Durante su ejecución, se pone en busqueda de bloques que puedan evitar que continue su camino

  - Si no hay bloques que obstruyan el salto, lo realiza para pasar bloques que le impiden continuar

    - Si no es posible pasar una pared de bloques, replantea la dirección para encontrar otro camino

- Identifica si el checkpoint se encuentra debajo de el

  - Si esta por debajo de el y encuentra un espacio vacio para pasar, deja de moverse para bajar y continuar su camino

- Identifica hacia cuál dirección se acerca más al checkpoint desde la alarma 1

  - Si la dirección en la que va lo acerca más, sigue en esa, sino, cambia de dirección

- Busca e identifica los picos próximos

  - Al encontrar uno hace un cálculo para encontrar el sitio más lejano y seguro al que pueda llegar saltando

    - Al llegar a la posición deseada deja de moverse hasta que este apoyado completamente en una plataforma y sigue moviendosé




Darth RPG
Código: [Seleccionar]

Registro de la IA:

Empezada en 17/4/2009

Terminada en 20/4/2009



Creada por Darth RPG



En una primera idea decidí que simplemente se moviera a la derecha, comprobando que no haya bloques por medio de su camino a la meta.

Si los hay que los salte y que continue. Sin embargo, esta idea ya en el primer nivel me trajo dificultades. Por ello implemente un sistema

para detectar qué tipo de suelo tiene justo debajo y delante. Si es una cinta que va en contra de su movimiento, que la salte. Con esto

ya superé el primer nivel. El segundo ya fue más difícil. El código de detección con el collision_line funcionaba mal, así que, en una rabieta

hice un sistema más básico y conseguí que funcionara. El nivel tres fue, de lejos, el que más problemas me dio. Sin embargo, gracias a otra

de mis rabietas, hice un script que detectara la instancia de debajo y hice que si tenía un foso de pinchos muy ancho delante suyo y estaba en

un lugar seguro parara el salto. Con esto conseguí que superara ya el tercer nivel.



Mi IA básicamente, comprueba en qué dirección debe moverse. Luego, mira que no haya bloques en su camino. Si los hay, calcula la distancia al

más cercano y si está a 12 píxeles, salta. Si no hay bloques cerca, comprueba que no haya pozos delante y, si los hay, los salta. Además, si

está saltando y tiene un rellano cerca y un foso delante, se para en el rellano a esperar para saltar de nuevo.


BrandNew
Código: [Seleccionar]

//Bitácora de IA

/*

La primera idea que surgió fue que la IA debería estar avanzando constantemente,

pues el primer nivel es una linea recta con tan sólo un obstáculo, que era evitar

las flechas que te alentan. Así que el primer nivel fue simplísimo, y la IA lograba

un tiempo record tan solo con scr_walk(1) y detección previsiva de las molestas flechas.



Para el segundo nivel el cambio no fue mayor: el droide solo debería brincar cada vez

que detectaba una pared o un hoyo adelante. Durante este tiempo logré mejorar

el puntaje en el primer nivel y poco a poco fue mejorando el del segundo.



Para el tercer nivel se complico la cosa, puesto que ahora había pinchos sobre los

que puedes caer. Aunque la IA brincaba en presencia de un hoyo, tendìa a aventarse

directamente contra unos pinchos que se encontraban màs adelante.

Esto llevó a desarrollar un algoritmo para que el droide, al brincar, deje de moverse si prevee

que va a caer sobre pinchos. (vease el primer ciclo for{} del evento Step)



Uff, el ultimo nivel resulto el mayor reto. Primero,encontrar una manera de detectar

la dirección hacia la que el droide tiene que moverse. Después, evitar que el droide

de saltos desde muy alto para no caer y aplastarse. Después, evitar hacer contacto con

los pinchos invertidos, y al final se modifico un poco del codigo ya creado para que

el brinco del droide llegara a la ultima parte del laberinto.



En concreto, la IA funciona a base de detección previsiva del entorno para tomar una decisión.

*/


Shaoran
Código: [Seleccionar]

/*

------------------------------------

////////////////////////////////////|

/////Datos de el IA:////////////////|

////////////////////////////////////|

//Fecha de Inicio:25/04/2009////////|

////////////////////////////////////|

//Fecha de Finalizacion:28/08/2009//|

////////////////////////////////////|

//Autor: Shaoran////////////////////|

////////////////////////////////////|

------------------------------------

--------------------

|Pensamiento del IA:|

--------------------

- Se basa en verificar si adelante de ella tiene "piso" para caminar,

  de no tenerlo verifica de que se trata lo que esta adelante y de

  acorde a eso hace o no determinada accion.

-------------------  

|Problemas surgidos:|

-------------------

- Saltaba al final del nivel(sobre la meta)me costo encontrar el porque de ello

- Aun persiste el problema con lo pinches para poder pasarlos.    


Asava
Código: [Seleccionar]

No se encontró (capaz debido a su participacion no oficial ya que organizaba el concurso)




Especial agradecimiento a Ciberman por hacer la recopilacion de los registros.

Iré actualizando todo lo referente al tema... me despido, KrakenHimoto.

4
Guerra de IAs (GIA) / GIA_02 SpaceShip War ha comenzado!
« en: Octubre 24, 2009, 12:37:26 am »
GIA 02 SpaceShip War ha comenzado!

Eso! Después de varios meses de trabajo en el proyecto doy a la luz GIA2. No hay demasiado que decir, esta todo en el reglamento. Cualquier duda la consultan acá.

Espero que este concurso genere entre los usuarios de la comunidad un poco mas de interés por estos temas.

Enlace al reglamento oficial

La primer fecha de entregas de las IAs es hasta el 30/10/09, con lo que se realizará la primer ronda del concurso declarando al prematuro primer campeon

-Se trabaja en GM6. Subi 2 versiones, para los que tienen el gm registrado y para los que no. Los que usen la version no registrada no tendrán los efectos graficos (tampoco interesa a la hora de hacer la IA)
-Por temas visuales se trabaja a una resolución de 700x700 por lo que 800x600 no sirve.

Si quieren diseñar su propia nave aca les dejo los datos fundamentales






Citar
Bases de Guerra de IAs

¿Qué es GIA?

   Guerra de IAs, mejor conocido bajo las siglas "GIA" tiene como fin el ser un concurso en donde compitan IAs (Inteligencias Artificiales) en un marco de un videojuego.
   Los participantes se inscriben y generan sus IAs segun el marco y genero en el que se establezca el concurso. Por ejemplo, batallas de naves, carreras, un ajedrez, etc.

   El concurso consta de una serie de rondas que finaliza cuando se determina al Campeón definitivo. En cada ronda, la IA vencedora quedará con el título de Campeona. Luego, abra un lapso de X semanas (ej: 2 semanas) para que los competidores intenten mejorar sus IAs y asi destronar a la IA Campeona. Este ciclo se repetirá hasta la ronda en la que la ultima IA Campeona no sea destronada quedándose asi con el título de Campeona definitiva y siendo asi la ganadora del concurso.

   Luego existe una segunda etapa del concurso en la que una ves declarado al ganador del concurso se liberan todos los codigos de fuente de las IAs participantes son sus respectivos registros para que el material generado sirva a todo el mundo.

   A modo de incentivar la creacion de IAs, una ves finalizado el concurso se siguiran aceptando IAs. Claro que no estarán en el marco del concurso ni competirán por el premio pero será una forma de seguir generando material sobre IAs para el genero.

  Vamos a dar un ejemplo:
  "Supongamos que el tema seleccionado para la edición es "Carrera de Autos", en ese caso la IA campeona seria la que llegue en primer lugar."
   Pero como se dijo antes, abra un plazo en donde los demás participantes podrán intentar derrocar a la IA Campeona. Y así sucesivamente hasta que se declare una IA definitiva.
  Luego de ello todos los registros de los participantes con sus respectivas IAs serian liberadas a modo de fomentar el aprendizaje por medio de una competencia.
  En este momento se podrán seguir mejorando las IAs a partir de los códigos ya liberados. Aunque la Campeona ya haya sido declarada como oficial Campeona eterna, eso no quita que pueda ser superada una vez que se liberen los códigos.

   Para hacer las IAs los participantes van a trabajar sobre un editable pre-diseñado con el engine del tema y genero del concurso. Los participantes solo van a tener la capacidad de trabajar (picar código) sobre un solo objeto que será el del Droide/IA que va a representar al jugador. Luego, el encargado del concurso juntará todo en un editable maestro en donde se definen las rondas y compiten las IAs.



Reglamento General:

   Las acciones que pueda realizar la IA van a estar determinadas por unos scripts a los que van a tener que llamar.
Ejemplo: para "moverse a la derecha" haría un llamado al script move con el argumento "left", move(left).

   Dentro de las cosas que podrán programar sobre la IA hay ciertas reglas que deben seguir:

   1. Solo se trabaja sobre el objeto de la IA propia.
   2. No se pueden modificar variables existentes, solo chequearlas. Ej: X, Y, speed, globales.
   3. Solo se puede modificar variables creadas por uno mismo.
   4. No se puede hacer uso del evento draw.
   5. No se pueden crear instancias.
   6. Si se crean scripts deberán llamarse "scr_nombredeljuegador_nombredelscript"
   7. Abra un lapso de al menos 3 días entre cada IA enviada.
   8. No se puede hacer la IA para un room especifico, debe ser capaz que funcionar bien en cualquier ambiente. Ej: if room=x {blabla} NO
   9. Si una IA relentiza demasiado el juego el juez puede optar por no validarla.
  10. Trabajar sobre hojas distintas a las que utilizan los scripts defaults que ya vienen con el editable.
  11. En las hojas se deberá incluir un // indicando si la hoja va antes o después del script default y en caso de ser varias numerarlas.
  12. A la hora de enviar el editable modificarle el nombre agregándole un _nombre del participante al final del mismo. EJ: GIA_01 La Carrera de los Droides_KrakenHimoto


   Este tipo de acciones invalidaran a las IAs, y en caso de ser groseras como querer Cerrar el juego (como algo muy obvio) podría sancionarse al jugador invalidándolo a presentar mas IAs.

   Esto no es una regla, pero es recomendable que mientras participan no liberen el código cosa de que cada jugador tome distintos rumbos que es donde toma gracia el concurso.


Registro de las IAs:

   Los jugadores deberán hacer un seguimiento de los problemas que les fueron surgiendo en el desarrollo de sus IAs, tanto los planes que fueron cambiando de rumbo como las dificultades a lo largo de los niveles.

Deberán ponerlo con un // en el evento create del objeto IA en hojas a parte.

El Evento Create estará conformado de 3 partes:

La 1er hoja default con el script scr_create();
La 2da hoja con el registro;
La 3er hoja con los códigos propios de la IA;

Haciendo referencia a la Hoja 2, deberá estar compuesta por:

DATOS de la IA.

   También deberían agregar la fecha de inicio y finalización de la IA más el nombre del creador y la versión de la IA.

Explicación de como piensa la IA.
 Ej:
-Primero averiguo la dirección en la que se encuentra la meta
-Luego chequea que no haya pozos en la dirección a la que va.
-Si los hay, calcula una distancia segura y los salta

Explicación de problemas surgidos .
Ej:
El primer nivel me parecía fácil se superar y de hecho lo fue, aunque aun creo que puedo mejorar mi tiempo.

Respecto al segundo nivel, tuve algunos problemas con la detección de muros por lo que tuve que hacer cuenta atrás y cambiar algunas bases de la IA.

Es recomendable que vallan actualizando el registro diariamente para no perder rastros de las IAs, también los ayudará a tener noción de la evolución de sus IAs.


GIA_02 SpaceShip War

   Ésta edición de GIA consiste en una batalla de Naves Droides.

    * Las batallas se dan en 1vs1 en un formato tipo liga. En el cual al final de la misma por cantidad de victorias se determinará quien es la campeona.
    * Las Naves cuentan con 3 tipos de armas. Un disparo normal, 2 minas y 4 disparos StarShoot.
    * El disparo normal y el Starshoot hacen 1 punto de daño mientras que la mina hace 2 puntos de daño. Las naves cuentan con 6 puntos de vida.
    * Las batallas tendrán un tiempo limite de 40 segundos, y en caso que aun estén las 2 naves en funcionamiento ganará aquella con mas puntos de vida.
    * Si una nave sale del rango del escenario donde se da la batalla será destruida automáticamente.


Especificaciones de GIA_02

    * Deberán colocar en un .zip/rar el editable modificado.

    * Deberán enviarlo al siguiente correo electrónico: gia.asava@gmail.com


FAQ
¿Cuando comienza GIA SpaceShip War y cuanto durará?
23 de Octubre del 2009. Calculo que durará 1 mes y pico.

¿Cuanto tiempo me puede quitar el participar de esta competencia?
M... es muy dependiente de cada participante, pero yo creo que con un par de días que le dediques a conciencia ya tendrás una IA mas que aceptable. Si hablamos de que la competencia probablemente dure mas de 1 mes estamos hablando de ínfimo tiempo de inversión.

¿Habrá asteroides en el evento para que las naves esquiven?
No, no habrá, es un suceso muy aleatorio.

¿De a cuantas naves se harán las batallas?
Las batallas serán de 1vs1, el campo es demasiado pequeño para más, a lo sumo 3.

¿Se puede programar la IA en D&D?
No, las IAs deberán estar hechas 100% en código (GML).

¿Si las naves colisionan se destruyen ambas?
No, imaginen que una pasa por debajo de la otra. No tendría sentido hacerlas colisionar a efectos de ver cual es la mejor IA.

¿Si me salgo del campo de batalla muero?
Exactamente. (Hay una propuesta de que se transporten las naves al lado opuesto del campo)

¿Como consigo el editable para ponerme manos a la obra?
En el momento que se inicie el concurso voy a subir el editable al blog o al foro de noticias.

¿Puedo personalizar mi droide (gráficamente)?
No, por ahora no.

Scripts Disponibles

    * scr_shoot(n); dispara siendo N el tipo de disparo.
    * scr_accel(); accelera
    * scr_rot(n); rota la nave n grados. El rango va de -5 a


Como cargar un droide/IA?

   1. Crear el objeto de la IA haciendo un duplicado de una existente.
   2. Ir al obj_menu y abrir la hoja del evento create.
   3. global.JTRUE=15; //Indica el numero de jugadores IAs disponibles incluyendo la IA '0';
   4. Cargar la IA: global.Ji[0]=obj_KrakenHimoto; global.Jnick[0] =''KrakenHimoto";


Como hago referencia a mi enemigo?
Para hacer referencia a nuestro enemigo utilizamos la variable 'id_en'.
Por ejemplo, posenemigox = id_en.x; posenemigoy = id_en.y; vel_enemy= id_en.speed;

----------------------------------------
El reglamento puede ser modificado sin previo aviso (igual voy a intentar avisar si es importante)

KrakenHimoto



Es muy posible que tengan miles de dudas al respecto del concurso por la complejidad que implica llevarlo a cabo por lo que este post en el foro va a servir para resolver todas esas dudas.

Saludos y Disfrutenlo =D

5
Noticias / Como hacer preguntas inteligentes
« en: Agosto 17, 2008, 08:12:47 pm »
¿Porque todos ignoran mis preguntas y nadie las responde?

A varios de ustedes probablemente alguna vez les paso que (sobre todo si no frecuentan foros habitualmente) que formulan sus preguntas o dudas pero nadie las responde. Todos parecieran ignorarlas ya que nadie las responde y en el peor de los casos incluso son eliminadas por el staff de turno.

Hace muchos años (si, frecuento foros desde hace muchos años) encontré un artículo que explica a la perfección el dilema que mencioné en el primer párrafo.
Es bastante largo por lo que voy a dejar el link en vez de postearlo entero.
No se dejen llevar por la aparente categoría del tema, es un articulo que aplica para el 95% de los foros, solo que esta envuelto en un contexto relacionado con la categoria del foro que fue creado inicialmente el artículo.

Antes que digan "vah yo se formular preguntas, no vale la pena perder 20 minutos leyendo este articulo" sepan que se pueden sorprender gratamente. Lo recomiendo para todos, no solo para aquellos que no saben cuando ni como formular sus inquietudes.

Sin mas preámbulos acá les dejo el artículo.

Link a "Como hacer preguntas inteligentes"



El que tenga ganas de colaborar para generar conciencia coloque el código siguiente en su firma. Ocupa unos 200 caracteres.

Código: [Seleccionar]
[hr][b][size=10pt][URL=http://sindominio.net/ayuda/preguntas-inteligentes.html]- Como hacer preguntas inteligentes[/URL]
[URL=http://www.comunidadgm.org/index.php?topic=21.0]- Reglamento General[/URL]



Me despido con esta frase del articulo que aplica bastante al foro.
Citar
Si no eres capaz de ser agradecido ten al menos un poco de dignidad, no te quejes y no esperes que te traten como una frágil muñeca sólo porque seas un recién llegado de alma teatralmente hipersensible y con ilusiones de estar autorizado a todo.

6
Juegos completos / Snake RemKH H-Online
« en: Junio 04, 2008, 05:00:37 am »
  • TÍTULO: Snake RemKH
  • GÉNERO: Arcade
  • VERSIÓN: GM8 (Original: GM6)
  • SINOPSIS:

    Otra reverencia a un clasico. Es un remake del clasico Snake de 1977.
    Consta de un modo Clasico en donde la snake se alarga ilimitadamente y el modo Aventura que consta de unos 10 niveles.
    El juego a su ves, como los snakes mas recientes cuenta con varias velocidades para brindar diferente difitultad.
    Intente mantener un estilo clasico pero a su ves bastante agradable (creo ..)

    Espero que les guste :)

    Al igual que en el anterior Remake, el Asteroid, este tambien consta de una puntuacion online. En realidad dos, una para el modo clasico y otra para el modo aventura.

    EDIT de @eduardo960: Adaptación del viejo proyecto de KrakenHimoto, "Snake Rem KH", utilizando la versión 8 de Game Maker. Como novedad ofrece la integración de las puntuaciones dentro del juego, la versión anterior las visualizaba en una página web que ahora no existe más.

    DESCARGA: Descargar ZIP ó Jugar en Portal de Juegos Online

    • IMÁGENES:
    • CREDITOS: Eduardo960 - Mano derecha xD

Páginas: 1