¿Cuáles son los pros y los contras de Lua vs. Python como lenguaje de script para la plataforma XNA / C #? [cerrado]

9

Estoy pensando en probar una de mis antiguas ideas para un juego. El punto central de este juego sería el posible nivel de personalización funcional del entorno y los objetos del juego (como modificar el comportamiento de un armamento de nave espacial). Para esto, el juego debería ser programable. Además, no pretendo comercializarlo, es simplemente un desafío de programación interesante para mí.

Como soy principalmente un tipo .NET, usaré XNA / C # para el juego en sí. Para las secuencias de comandos, pienso en ir con Python o Lua. Tengo experiencia previa con Python y no tengo nada en contra como lenguaje. Lua, por otro lado, es casi completamente nuevo para mí, además de algunas modificaciones menores de complementos de World of Warcraft que hice aquí y allá, y parece prometedor. Ésta es mi pregunta:

¿Cuáles son los pros y los contras de Lua vs. Python como lenguaje de script para la plataforma XNA / C #?

¿Es uno de ellos considerablemente más fácil de usar con XNA / C #? ¿Tiene alguna de ellas algunas ventajas o desventajas específicas cuando se usa con XNA / C #? ¿Por qué recomendaría uno sobre el otro para XNA / C #?

calabaza famosa
fuente
44
Sé que no estás pidiendo alternativas, pero en caso de que no lo sepas, C # también es un lenguaje de script válido, y dado que estás usando C # es de muy bajo mantenimiento.
William Mariager
2
¿Por qué necesitas un lenguaje de script? ¿Qué beneficios estás esperando?
Peter Ølsted
2
Ambos son populares, utilizados profesionalmente y definitivamente capaces de hacer la parte de secuencias de comandos. Es solo cuestión de gustos para el 99% de las aplicaciones. Python tiene una mejor biblioteca estándar y, en mi opinión, es un lenguaje más fácil de usar.
Cloudanger
1
En la línea de '¿has considerado?' ¿Has considerado a Boo ? Está diseñado para secuencias de comandos, en lugar de convertirse en un lenguaje de secuencias de comandos. Al igual que IronPython, tiene ayudantes integrados para el alojamiento (e incluso puede interpretar para objetivos como XBox).
Jonathan Dickinson el
1
Además, no descuides las secuencias de comandos visuales (similar al Staredit, el editor de Starcraft 1).
Jonathan Dickinson el

Respuestas:

11

No puedo comparar los dos, ya que hasta ahora solo he tenido experiencia incorporando IronPython en un juego de C #. Esto es lo que me gusta al respecto:

1) ¡Es fácil! Descargue las DLL de IronPython, agregue referencias en el proyecto,

 using IronPython.Hosting;

 var engine = Python.CreateEngine();
 var product = engine.Execute<System.Numerics.BigInteger>(@"
 print ' '.join(['hello', 'from', 'ironpython!'])
 a = 123456789
 b = 10
 a**b
 ");
 Console.WriteLine("a**b={0}", product);

2) Como puede ver en el ejemplo anterior, IronPython en realidad se convierte en clases BCL donde puede. el resultado del script es un System.Numerics.BigInteger en lugar de un PyObject

3) La dynamicpalabra clave en C # se creó para situaciones de interoperabilidad en las que no tiene el tipo estático disponible:

    dynamic example = engine.Execute(@"
class Example(object):
  def __init__(self):
    self.breakfast = ['ham','spam','eggs']
    self.lunch = 'BRAIINNNZ'
Example() # return an example");

    foreach(string item in example.breakfast)
        Console.WriteLine(item);
    Console.WriteLine(example.lunch);
Palanqueta
fuente
+1 para el buen ejemplo que muestra lo fácil que es hacer que la pitón de hierro se ejecute ... aunque eso no era lo que estaba pidiendo OP ;-)
tobsen
0

IronPython y C # van bien juntos, IronPython se puede agregar a C # para aumentar el rendimiento. Entonces, si sus juegos de escritura, las llamadas Python dentro de C # son una ventaja. Python en sí no puede hacer uso de XNA pero puede hacer uso de Directx, algo que C # no puede hacer directamente.

Meh
fuente
1
FWIW, Python tampoco puede hacer uso de DirectX "directamente": interactúa con él a través de contenedores basados ​​en el hecho de que D3D es una API C / COM. Así es exactamente cómo puede acceder a DirectX desde C # también.