scripting

Consulte acerca de programas, técnicas, algoritmos etc.

scripting

Notapor carlostex » Vie Ene 22, 2010 3:08 am

Hola, hando escribiendo un videojuego de guerra de tanques, el juego cuenta con niveles y distintos ecenarios.
Entonces he estado pensando en implementar un interprete para no escribir todo ese codigo en c++ pues sera mas tedioso,ademas podria crear nuevos niveles con otras reglas sin tener que compilar de nuevo.
La pregunta es ¿alguien ha hecho algo asi y me pueda dar consejos?

Tengo una idea pero no se si sea la mejor, que es leer linea por linea el script y mediante muchos if comparar la orden y ejecutar el codigo correspondiente.
eso quiere decir que el motor del interprete tiene acceso a todos los objetos.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Notapor Juanxo » Vie Ene 22, 2010 2:08 pm

Buenas carlostex:

Este tema es uno de los que a mi me gusta también xD. Si quieres una guía para estos temas, esta el libro Game Scripting Mastery, que te explica todo el proceso de utilizar y crear tu propio lenguaje.
Pero sinceramente, este proceso es mejor dejárselo a los grandes equipos de desarrollo.
Dos de los lenguajes más utilizados para esto son Lua y Python. Quizas conozcas ya Python, pero te recomiendo más Lua, que es más ligero y más facil de integrar. Para python tendrías que pegarte con la librería boost.

Ya me contarás por cual te decantas, para ver si te puedo aconsejar algo
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Notapor carlostex » Sab Ene 23, 2010 1:20 am

Gracias por la recomendacion del libro.
Se que existe una api llamada monky o algo asi, que es un interprete de javascript que se usa en C.

Pero creo que es más complicado, entonces ¿como puedo usar lua?, acabo de ver algo en wikipedia y seguramente me va a servir mucho pues es usado en gran variedad de videojuegos y se ve muy bueno.
¿existe alguna api para interpretar ese codigo en C++?. o ¿como lo implemento en mi videojuego?.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Notapor Juanxo » Sab Ene 23, 2010 2:25 am

Lo primero es irte a la pagina de Lua y descargartelo xD.

Una vez lo tengas todo montado, tienes dos opciones:

- O bien pegarte a pelo con Lua (no es demasiado complicado), donde te pueden ayudar la documentación de Lua y alguna página

- O bien decantarte por alguna librería ya montada como LuaBind, que creo que pertenece a Boost.

Pero todo depende de lo que tengas en mente. Lua se suele utilizar con dos fines bastante distintos:

- Tienes la opción de escribir tu juego en Lua, y luego reescribir y exportar en C/C++ las partes más lentas de tu juego( esto suele ser más habitual en grupos, donde el programador crea una serie de funciones tipo en C++, las exporta y permite al diseñador programar en Lua, que es más simple que en C++, lo que quita trabajo al programador en cuanto a programar la logica del juego).

- Puedes utilizar Lua como lenguaje de apoyo para C++, es decir, almacenar las constantes, o algunas funciones de IA, o cosas similares en scripts de Lua, utilizarlos en C++, cambiar algo en el script, y asi continuamente sin necesidad de recompilar nada, ya que los scripts no necesitan recompilacion.

Por último, como consejo:

-Si no vas a utilizar demasiado el tema del scripting, te recomendaría ensuciarte un poco las manos y trabajar más directamente con Lua.

- Si por el contrario vas a utilizar un montón Lua en tu juego, utiliza LuaBind u otra librería, que te permitirán utilizar características más avanzadas. Como pega, decirte que cada minimo cambio que hagas en tu codigo de C++ en este caso te puede llevar hasta 10 seg (por el tamaño de la libreria y el hecho de que todo sean templates), lo que puede llegar a hartar un poco.

Y eso es todo de momento. Ya me contarás si puedo ayudarte en algo más
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Notapor carlostex » Sab Ene 23, 2010 7:26 am

Pues ya me leí algunos tutoriales de lua, y estoy ejecutando los primeros ejemplos y haciendo pruebas.
Me ha convencido mucho este lenguaje es lo que andaba buscando.
Los usare para mi videojuego, lo que es como la primera forma de usar lua que comentaste, escribiré el motor del juego en c++ y llamare a funciones mas simples de usar con lua, la idea es hacer mas fácil la creación de la lógica del juego, no cuento con un equipo de programación jeje, somos dos personas que andamos en este proyecto, así que nosotros la haremos de las dos partes, primero escribiremos el motor y luego la lógica.

Muchas gracias por tu tiempo e información me ha servido mucho.
Saludos
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Notapor uberiain » Lun Feb 22, 2010 10:41 am

Hola te dejo un fichero con los fuentes de un programa realizado en C++ que utiliza lua como lenguaje de script a través de luabind, es una maquina de estados finitos realizada en lua, espero que te pueda servir: http://www.telefonica.net/web2/yque/files/LuaCppFSM.zip

Te pego un ejemplo de ejecución del mencionado programa:

[C++Actor] constructor
[C++Actor_wrapper] constructor
[Miner] init is called from Lua 5.1
[C++Actor] constructor
[C++Actor_wrapper] constructor
[Wife] init is called from Lua 5.1
[C++Actor] Update---------------------------------------
Miner1: All mah fatigue has drained away. Time to find more gold!
Miner1: Walkin' to the goldmine
[C++Actor] Update---------------------------------------
Wife2: Washin' the dishes
[C++Actor] Update---------------------------------------
Miner1: Pickin' up a nugget
[C++Actor] Update---------------------------------------
Wife2: Washin' the dishes
[C++Actor] Update---------------------------------------
Miner1: Pickin' up a nugget
[C++Actor] Update---------------------------------------
Wife2: Makin' the bed
[C++Actor] Update---------------------------------------
Miner1: Pickin' up a nugget
Miner1: Ah'm leavin' the goldmine with mah pockets full o' sweet gold
Miner1: Goin' to the bank. Yes siree
[C++Actor] Update---------------------------------------
Wife2: Makin' the bed
[C++Actor] Update---------------------------------------
Miner1: Depositing gold. Total savings now: 3
Miner1: Leavin' the bank
Miner1: Walkin' to the goldmine
[C++Actor] Update---------------------------------------
Wife2: Washin' the dishes
[C++Actor] Update---------------------------------------
Miner1: Pickin' up a nugget
[C++Actor] Update---------------------------------------
Wife2: Washin' the dishes
[C++Actor] Update---------------------------------------
Miner1: Pickin' up a nugget
[C++Actor] Update---------------------------------------
Wife2: Moppin' the floor
[C++Actor] Update---------------------------------------
Miner1: Pickin' up a nugget
Miner1: Ah'm leavin' the goldmine with mah pockets full o' sweet gold
Miner1: Goin' to the bank. Yes siree
[C++Actor] Update---------------------------------------
Wife2: Washin' the dishes
[C++Actor] Update---------------------------------------
Miner1: Depositing gold. Total savings now: 6
Miner1: WooHoo! Rich enough for now. Back home to mah li'lle lady
Miner1: Leavin' the bank
Miner1: Walkin' home

Instant telegram dispatched at time: 13 by 1 for 2. Msg is 1

Message not handled **********----------*******[C++Actor] Update---------------------------------------
--
| (\_/) This is Bunny. Copy and paste
| (='.'=) Bunny into your signature to help
| (")_(") him gain world domination
uberiain
 
Mensajes: 4
Registrado: Mar Feb 16, 2010 10:32 am


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron