Menudo tema habeis sacado. Además, la conversación esta adquiriendo cierto tono freaky. Como me gusta
En primer lugar puntualizar que no soy informático aunque trabajo con ellos y lo poco que sé de como funciona un juego, lo he leído en algún lado o me lo han contado.Por lo que sé un juego básicamente suele constar de:
Un motor gráfico que se encarga básicamente de renderizar (pintar) las imagenes por pantalla o hacer cosas sencillas como detectar colisiones
Un motor físico que se dedica a calcular todos los parámetros físicos del juego. Dependiendo del juego, la importancia de este puede ser nulo (Wargame con hexágonos) a super importante (un Shooter en 3D). Puede parecer un tema menor, pero conseguir que cuando un vehículo se desplaza por un terreno ondulado, el movimiento parezca real o que las explosiones no sean un mero flash que aparece en la pantalla, se las trae y se usan modelos físicos y matemáticos bastante complejos. Si se trata de un juego de carrera de coches o un simulador de un avión, ya ni hablamos.
Un motor lógico que define como interactuan todos los elementos entre si, como por ejemplo como calcular los puntos de vida, como abrir una puerta, que pasa si disparo a través de una ventana, ... Normalmente en este caso, lo que se suele hacer, es desarrollar el enorme conjunto de funciones en un lenguaje de alto nivel orientado a objetos (p.ej. C++) y organizarlo en forma de una librería jerarquizada. Para facilitar la vida a los desarrolladores de escenarios, normalmente se desarrolla una capa intermedia (i.e un interprete) para que se pueda interactuar con el motor lógico mediante algún lenguaje de scriptting de más alto nivel (p.ej. Python o un lenguaje propio). Además, el motro lógico suele incorporar un motor de eventos para simplificar la creación de escenarios. En shooters más antiguos (Medal of Honor, Call of Duty) cantaba un montón ya que nada más cruzar una puerta automáticamente surgian de la nada un par de enemigos o al cruzar una esquina aparecía el dichoso tanque.
Una IA. Yo creo que como bien se ha dicho, esta es la madre de todos los corderos y es donde radica que un juego sea bueno o no. Por lo que intuyo y se deduce de los manuales/editores, al ser un tema extremadamente complejo los juegos la suelen dividir en varias capas.
Una primera capa a la que podríamos llamar IA táctica en la que se calculan/determinan como se comportan las unidades individualmente: en el caso de un shooter, alguien me dispara por lo que respondo al fuego, me escondo detrás de un barril .... o en el caso de un Wargame, dadas las fuerzas que tengo en un punto cual es la combinación óptima de ordenes para conquistar un hexágono dado o como desplazarme de A a B (pathfinding). Normalmente esta parte es de bajo nivel y está hardcodeada y no es modificable.
Una segunda capa que suele usarse para establecer el comportamiento "local", por ejemplo en un shoter una unidad me dispara mientras otra intenta rodearme o en un wargame como organizar las fichas para establecer una posición defensiva en unas colinas.
Finalmente una I.A. de más alto nivel (llamemosla estratégica) que define un poco el plan de la I.A. para un escenario dado. Por ejemplo, si tomo la ciudad A ponte en situación defensiva, si destruyo un 10 % de sus fuerzas lanza un contrataque. Esta parte puede ser "escriptable" (p.e.j en el TOAW en el que el comportamiento de la I.A. a alto nivel es determinado por el desarrollador del escenario) o la determina el programa automáticamente a pertir de una serie de reglas (un ETR en un mapa aleatorio). Aunque, obviamente, cada programa es un un mundo y se pueden definir cuantos niveles se quieran.
Sin tener ni idea, hacer un motor gráfico para un juego que no pretenda competir en el campo de las 3D con los efectos que me permite generar la ultima tarjeta gráfica de 600 €, debe ser bastante trabajo pero existe bastante documentacion y a malas se puede comprar una licencia de motor gráfico sencillo (o algo desfasado).
Para la parte física, más de lo mismo. O bien te pillas una licencia si quieres hacer pijadas (p.ej. Havoc) o bien te lo curras, tu mismo. En este caso, debe existir bastante literatura y por ejemplo, calcular el efecto de una explosión sobre el terreno en un juego como el Combat Mission no debe ser extremadamente complejo.
La parte del motor lógico no deja de ser programación "clásica" y lo único que se necesita es echarle horas y más horas.
Finalmente, el caso de la I.A. me parece el más difícil ya que en mi opinión es más un arte que una ciencia. Por ejemplo pongamos el juego del ajedrez que es un juego con unas reglas relativamente sencillas (nada que ver con los tochos de más de 200 páginas que llevan algunos Wargames) y sin embargo, es realmente difícil definir en una hoja de papel que reglas tiene uno que seguir para ser un buen jugador o un completo inutil. Hace un tiempo y por simple curiosidad estuve mirando por la Web y salvo para problemas puntuales como el algoritmo A* que ha citado Molinator o los sistemas "expertos" (por experiencia en otros campos, no creo demasiado en ellos...) , es casi imposible encontrar nada. Entre que la gente del mundo Universitario parece no darles demasiada importancia y las compañias guardan como oro en paño este tipo de conocimiento, es como un conocimiento oculto en el que alguien te tiene que iniciar.