990 likes | 1.16k Views
Autor: Jesús Flores García Tenerife LanParty 2k9. Taller Práctico de IA y Lógica en Videojuegos. Objetivos. Taller de iniciación Aclaración conceptos Introducción de técnicas básicas Resolución cuestiones y dudas Más ameno que riguroso. Temario. Día 1: Entrando en la “ Matrix ”
E N D
Autor: Jesús Flores García Tenerife LanParty 2k9 Taller Práctico de IA y Lógica en Videojuegos
Objetivos • Taller de iniciación • Aclaración conceptos • Introducción de técnicas básicas • Resolución cuestiones y dudas • Más ameno que riguroso
Temario • Día 1: Entrando en la “Matrix” • Día 2: Buscando el camino • Día 3: Nuestro cajón de arena • Día 4: Ahora te vas y ¿yo qué hago?
Día 1: Entrando en la “Matrix” • Introducción de IA en videojuegos • Principios básicos • Objetos y Comportamientos • Máquinas de estados (FSM)
Día 2: Buscando el camino • Decisiones y Capas • Caso de Estudio: Pathfinding • Técnica de alto nivel: NavMaps • Técnica de bajo nivel: Perseguidor
Día 1: Entrando en la “Matrix” • Introducción de IA en videojuegos • Principios básicos • Objetos y Comportamientos • Máquinas de estados (FSM)
Breve Introducción de IA • NIÑO: No intentes doblar la cuchara. Eso es imposible. En vez de eso, sólo procura comprender la verdad. • NEO: ¿Qué verdad? • NIÑO: Que no hay cuchara. • NEO: ¿No hay cuchara?
Breve Introducción de IA • Falsear la realidad • Distraer la atención • Cómputos ligeros • Soluciones aceptables, no óptimas
¡Quieres empezar! Inicialización • Bucle de Juego • Fase de Update • Fase de Render Update Render Cierre
¡Código Please! if ( SGame.Init( hWnd ) ) { _________ while( msg.message != WM_QUIT ) { _________ SGame.Update( seconds ); SGame.Render(); } SGame.Destroy(); }
Mates I: Vectores y Puntos • XYZ • D3DXVECTOR3 (X, Y, Z) (X, Y, Z)
Objetos y Comportamientos Comportamiento
Patrón Estrategia OBJECT STRATEGY Strategy * strg; algorithm() STRATEGY 1 STRATEGY 2 STRATEGY 3 algorithm() algorithm() algorithm()
¿Por qué necesitamos más? • Tenemos un comportamiento simple • Queremos: • Secuencias • Comportamientos más complejos • Recordar pasos anteriores
Ejemplo: Enemigo Secuencial ESPERAR LANZAR BARRIL
FSM – Máquinas de Estados • Comportamiento Complejo Enemigo Usa Ascensor
FSM – Máquinas de Estados • Comportamiento se descompone Enemigo Usa Ascensor Pulsar Botón Entrar Pulsar Botón Salir
FSM – Máquinas de Estados • Transiciones Enemigo Usa Ascensor Pulsar Botón Entrar Pulsar Botón Salir
FSM – Máquinas de Estados • Reglas de Transición Enemigo Usa Ascensor Pulsar Botón Entrar Pulsar Botón Salir Estar Dentro Esperar Esperar
FSM – Implementación • Se debe guardar el estado actual • Secuencia de IF´s if ( state == “AAA” ) … elseif ( state == “BBB” ) … elseif ( state == “CCC” ) …
FSM – Implementación • Mejor con números (eficiencia) • Secuencia de IF´s if ( state == 0 ) … elseif ( state == 1 ) … elseif ( state == 2 ) …
FSM – Implementación • Mejor usar un switch: switch( state ) { … case 0: … break; case 1: … break; case 2: … break; }
FSM – Implementación • Un enum es más claro: switch( state ) { … case AAA: … break; case BBB: … break; case CCC: … break; }
FSM – Implementación • Válido para casos sencillos • Problema del switch de las 5000 líneas switch( state ) { … case AAA: … break; case BBB: … break; case CCC: … break; }
FSM – Implementación • Crear una función para cada estado switch( state ) { … case AAA: AAA(); break; case BBB: BBB(); break; case CCC: CCC(); break; }
FSM – Implementación • Válido para máquinas medianas • No tiene código en las transiciones switch( state ) { … case AAA: AAA(); break; case BBB: BBB(); break; case CCC: CCC(); break; }
FSM – Implementación • Los estados son clases: STATE OnEnter() OnUpdate() OnExit()
FSM – Implementación • La FSM es otra clase: STATE 1 STATE 2 FSM STATE 3 State * actual; STATE 4 STATE … STATE N
FSM – Implementación • Miles de implementaciones • Miles de artículos • Miles de extensiones • Máquinas de Máquinas de estados • Basadas en Eventos • Máquinas de pila • Máquinas multi-estados (No deterministas) • Máquinas inerciales • Máquinas Fuzzy (FuSM) • ….
No Matar Moscas a Cañonazos • Usa lo que te haga falta • No hay soluciones generales
Mates II: Entre 2 Puntos • VDistancia = PtoDestino – PtoOrigen • Distancia = Length(VDistancia) • Dirección = Normalize(VDistancia)
Mates III: Ángulos • VDistancia = PtoDestino – PtoOrigen • Ángulo = atan2( X, Z ); Z X
Día 2: Buscando el camino • Decisiones y Capas • Caso de Estudio: Pathfinding • Técnica de alto nivel: NavMaps • Técnica de bajo nivel: Perseguidor
Decisiones en el Juego • Múltiples decisiones que tomar Curarse Pulsar Botón Volver a la Base Perseguir J1 Esperar Usar Ascensor Cambiar Animación Subir Escaleras Pedir Refuerzos Disparar
Decisiones en el Juego • No es bueno que todo se resuelva a la vez Curarse Pulsar Botón Volver a la Base Perseguir J1 Esperar Usar Ascensor Cambiar Animación Subir Escaleras Pedir Refuerzos Disparar
Decisiones y Capas • Diferentes niveles / Capas de decisión: Decisiones a largo plazo Decisiones a medio plazo Decisiones a corto plazo Decisiones a inmediatas
Decisiones • Ejemplos de Decisiones: Decisiones a largo plazo Atacar Base Enemiga Decisiones a medio plazo Buscar Ruta Segura Decisiones a corto plazo Disparar a vigilante Decisiones a inmediatas Ejecutar Animación
Decisiones • Diferentes estrategias / técnicas: Decisiones a largo plazo T1 T2 Decisiones a medio plazo T3 Decisiones a corto plazo T4 Decisiones a inmediatas T5 T6
Decisiones y Capas • Distinta frecuencia de actualización: Decisiones a largo plazo 120 segs Decisiones a medio plazo 10 segs Decisiones a corto plazo 0.5 segs Decisiones a inmediatas 0.0016 segs
Decisiones y Capas • Distintos subsistemas: Perseguir J1 Volver a la Base Subir Escaleras Pedir Refuerzos Usar Ascensor Curarse Disparar Pulsar Botón Cambiar Animación