Ruby steering behaviors

steering_b1

O, como dirían en español:
Comportamientos de dirección en Ruby.

Estos sirven para crear agentes autónomos que navegan un ambiente. Un agente armado con estos comportamientos puede ir tras otro, huir de él, esconderse, ser parte de una formación, etc.

Unos de los más interesantes de observar son los comportamientos en manada (flocking behaviors), pero sobre eso ya vendrá otro artículo. :)

En este fin de semana programé estos cuatro:

  • Seek (búsqueda)
  • Flee (huir)
  • Arrive (llegar)
  • Pursuit (persecusión)

Espero poder incluir los demás pronto, aunque creo que refactorizaré un poco antes de implementar más cosas.

Estoy planeando usarlos en mi siguiente juego, que como les había comentado es un clon del Missile Commander (ese donde tenías que derribar los misiles enemigos con los propios antes de que tocaran el suelo y destruyeran tu base).

El código

No está comentado por el momento y seguramente se puede mejorar en muchas partes, ya lo iré limpiando y ajustando en las próximas semanas.

Entre las cosas que contiene hay una clase llamada Viewport que creé para poder jugar con mis agentes en un espacio más grande sin que el tamaño de la pantalla fuera una limitante. Velo como un sandbox que puedes configurar con un tamaño arbitrario.

Por ejemplo, puedes tener un espacio virtual de 4000×3000 pixeles dentro de un viewport que mide 800×600 pixeles (reales) dentro de tu pantalla configurada a 1024×768.

Además se comporta como un toroide, es decir, los agentes pasan de un lado al otro, no pueden salirse de él.

Esto lo implementé porque estoy pensando mostrar cada comportamiento en un viewport diferente, pero todos en la misma pantalla.
Creo que también se podría usar para implementar un mini mapa, ¿no?

El demo

Hay tres agentes de diferentes colores en el demo.

Usa tu ratón. Al dar clic en algún lugar de la pantalla se pondrá una marca verde y sucederán 3 cosas:

  • El agente verde huirá de ella.
  • El agente blanco llegará a ella.
  • El agente rojo perseguirá al blanco, prediciendo su posición futura, ésta se muestra como una marca blanca enfrente del agente blanco.

Presiona D para ocultar el texto informativo.
Presiona Esc para salir del demo.

Pueden bajar la aplicación demo de GitHub: ruby_steering_behaviors

Estoy usando como referencia el excelente libro: Programming AI by Example.

Implementación en C++

Para los que anden buscando una implementación en C++ existe OpenSteer.

OpenSteer is a C++ library to help build steering behaviors for autonomous characters in games and animation. OpenSteer provides an app which displays predefined demos of steering behaviors. You can prototype, visualize and debug your own as a plug-in.
License: MIT License

Artículos relacionados:

2 Responses to “Ruby steering behaviors”


Leave a Reply

Lobos en línea

De pata de lobo

Campo de trigo en una tarde nublada.
Neuenkirchen, Deutschland. [Mayo 2007] Horizonte en el desierto 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 1/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Puesta de sol entre matorrales 1/2.
Desierto de Real de Catorce, San Luis Potosí, México. [Diciembre 2007] Horizonte en el desierto 3/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007]

Qué estoy haciendo...

Posting tweet...

Powered by Twitter Tools

Mapa de visitas

Mira…

Calendario

agosto 2009
L M X J V S D
« jul   sep »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

FireStats icon Con la potencia de FireStats