Pregunta

Yo y algunos amigos estamos escribiendo un MORPG en Java, y nos gustaría usar un lenguaje de scripting para, por ejemplo. para crear misiones.

No tenemos experiencia con scripting en Java. Hemos utilizado Python, pero no tenemos mucha experiencia con él. Uno de nosotros también ha usado Javascript.

¿Qué lenguaje de scripting debemos usar? ¿Qué lenguaje de scripting no debemos usar?

¿Fue útil?

Solución

Java admite una variedad de lenguajes (de secuencias de comandos), algunos se enumeran en la Wikipedia aquí y aquí . Probablemente debería elegir el idioma con potentes capacidades de DSL y metaprogramación, como Clojure .

Pero si necesita algo más simple, JavaScript podría ser una alternativa viable.

Otros consejos

Soy responsable de un sistema híbrido Java / Jython bastante grande. Usamos Java para el desarrollo de la API central, y luego conectamos los objetos Java utilizando Jython. Esto se encuentra en un entorno de computación científica en el que necesitamos poder armar scripts de análisis de datos ad-hoc rápidamente.

Si estuviera iniciando este sistema desde cero hoy, no elegiría Jython como lenguaje de scripting. Me gusta Python bien, pero con frecuencia encuentro desajustes incómodos entre el sistema de tipo Python y el sistema de tipo Java. Por ejemplo, si solo quieres una tabla hash, ¿deberías usar un diccionario Python o un HashMap de Java? La decisión puede ser diferente dependiendo de si solo está utilizando la estructura de datos localmente en el código Python o si la está pasando a través del límite de Java. Jython hace una cierta cantidad de coerción de tipo por ti, pero no es perfecta. Es molesto incluso tener que pensar en cuestiones como esta cuando, en primer lugar, el propósito de usar un lenguaje de scripting es mejorar su productividad.

Supongo que JavaScript o JRuby tendrían problemas similares. Hoy elegiría un lenguaje de scripting que esté específicamente dirigido a la JVM y que aproveche el sistema de tipo Java. Los candidatos obvios son Groovy y Beanshell; Parece que Groovy ha estado tomando impulso últimamente, así que lo estudiaría más de cerca.

Estoy de acuerdo con la sugerencia de Viktor Jython. Aparte de eso y JavaScript (que ha mencionado, y está integrado en Java 6+ a través del paquete javax.script ), Groovy y JRuby también son dignos de ver.

Por cierto, debería consultar Wyvern , también un MMORPG escrito en Java y usando Jython para scripting Steve Yegge , su autor, tiene mucho que decir al respecto de vez en cuando. :-)

¿Qué hay de Jython?
http://www.jython.org/Project/

¿Qué hay de crear tu propio lenguaje de scripting especializado? Si su aplicación está escrita con java, puede usar ANTLR ( http://www.antlr.org/ ) para crear su código de análisis de idioma.

La razón por la que digo esto es porque un lenguaje de secuencias de comandos de propósito general puede proporcionar demasiada potencia (porque la secuencia de comandos se debe usar para misiones solo, supongo).

Pero si hacer tu propio idioma es demasiado difícil, entonces cualquiera de las sugerencias anteriores funciona, solo tienes que descubrir cómo vincular el tiempo de ejecución del juego al script. También sugiero Lua ( http://www.lua.org/ ) como otra opción que muchos juegos utilizar.

Versión corta

¡No uses un lenguaje de scripting! En su lugar, concéntrese en la capacidad de configuración (que es algo que un programador no puede hacer bien).

Versión más larga

Un argumento muy utilizado en favor de que tenga un lenguaje de scripting es que permite que los programadores más pequeños realicen tareas más triviales. No crea esto, no lo salvará en ningún momento, ya que las tareas triviales ya son realizadas por programadores reales en sin tiempo . Intente la configurabilidad en lugar de las secuencias de comandos, y tendrá un riesgo mucho menor de sangrar por algoritmos y conceptos complejos en las manos incapaces de los diseñadores de juegos. :)

La falta de hotswapping (editar y continuar) hubiera sido una razón para implementar un lenguaje de scripting en un MMOG (no quieres recargar todo el juego para un cambio de código menor), pero usando Java, con el hotswap incorporado, realmente no tiene ninguna razón para agregar un lenguaje de scripting en la parte superior.

He pasado años reflexionando sobre estas preguntas; en el día en que implementé un lenguaje completo de scripting, IDE, VM, depurador, etc. para un MMOG. Desde entonces, me he vuelto más sabio.

Si aún elige seguir el camino infinitamente horrible de no retorno, tenga en cuenta lo siguiente.

  • Escoge un lenguaje maduro que haya existido por un tiempo.
  • Las pruebas automáticas, la depuración y la edición serán una gran tarea hasta que crees tus propias herramientas / complementos / comiences a piratear en la máquina virtual.

Hasta la fecha, nunca he visto un DSL que mejoró la situación (obtener un producto más mantenible). Yo mismo, integré Python en mi motor de juego indie, pero finalmente llegué a mis sentidos y lo arranqué. " Python sin pila " es solo una forma de decir "inalcanzable pero rápido". Por favor, ¿alguien me corrige si me equivoco?

Tienes bastantes opciones:

Posiblemente incluso BeanShell ( http://www.beanshell.org/ )

Yo también soy fan de Python, así que recomiendo Jython, pero probablemente sean todas opciones razonables.

Tendría que recomendar Javascript para este propósito. Mozilla Rhino http://www.mozilla.org/rhino/ es una excelente implementación que encajaría sus necesidades perfectamente.

Recomiendo Javascript sobre Jython o JRuby debido a la familiaridad. El Javascript trivial sigue una sintaxis muy familiar que cualquiera puede usar. Sin embargo, si alguien quiere hacer algo más intenso, Javascript es un lenguaje de programación funcional muy potente.

Regularmente uso Groovy y Ruby profesionalmente y creo que su propósito es el mejor para escribir partes de aplicaciones con una lógica particularmente compleja donde Java es incómodo escribir. Javascript es una opción mucho mejor que un lenguaje de secuencias de comandos integrado para usar en un juego. No he usado Python, pero es sintácticamente similar a Ruby y creo que su propósito también sería similar.

LuaJ parece ser una buena forma de integrar Lua en Java:

http://sourceforge.net/projects/luaj/

Soy un gran fan de Python / Jython debido a la sintaxis limpia, que puede ser de tu agrado si tienes alguna experiencia con Python.

De lo contrario, Groovy se basa en la sintaxis de Java y puede ser una curva de aprendizaje más fácil si la mayoría de los desarrolladores son usuarios de Java. También tiene la ventaja de lazos más estrechos con el lenguaje Java y las bibliotecas.

Beanshell es bueno si tienes un script simple en mente, no admite clases. Sin embargo, no creo que haya tenido ningún soporte en los últimos años (el JSR pareció matarlo ...) por lo que quizás sea una mala elección si el soporte es importante para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top