Quels sont les avantages et les inconvénients de Lua par rapport à Python en tant que langage de script pour la plate-forme XNA / C #? [fermé]

9

Je pense à essayer l'une de mes anciennes idées de jeu. Le point central de ce jeu serait le niveau possible de personnalisation fonctionnelle de l'environnement et des objets du jeu (comme la modification du comportement des armes d'un vaisseau spatial). Pour cela, le jeu devrait être scriptable. Je n'ai pas non plus l'intention de le commercialiser, c'est simplement un défi de programmation intéressant pour moi.

Comme je suis principalement un gars .NET, j'utiliserai XNA / C # pour le jeu lui-même. Pour les scripts, je pense à aller avec Python ou Lua. J'ai une expérience précédente avec Python et je n'ai rien contre cela en tant que langage. Lua, d'autre part, est presque complètement nouveau pour moi, à part quelques modifications mineures apportées aux extensions de World of Warcraft que j'ai faites ici et là, et cela semble prometteur. Voici donc ma question:

Quels sont les avantages et les inconvénients de Lua par rapport à Python en tant que langage de script pour la plate-forme XNA / C #?

L'un d'eux est-il considérablement plus facile à utiliser avec XNA / C #? L'un d'eux présente-t-il des avantages ou des inconvénients spécifiques lorsqu'il est utilisé avec XNA / C #? Pourquoi recommanderiez-vous l'un sur l'autre pour XNA / C #?

célèbregarkin
la source
4
Je sais que vous ne demandez pas d'alternatives, mais au cas où vous ne le sauriez pas, C # est également un langage de script valide, et puisque vous utilisez C #, sa maintenance est très faible.
William Mariager
2
Pourquoi avez-vous même besoin d'un langage de script? Quels bennefits attendez-vous?
Peter Ølsted
2
Les deux sont populaires, utilisés professionnellement et certainement capables de faire la partie script. C'est juste une question de goût pour 99% des applications. Python a une meilleure bibliothèque standard et, à mon avis, est un langage plus convivial.
Cloudanger
1
Dans le sens de «avez-vous pensé? Avez-vous pensé à Boo ? Il est conçu pour les scripts, au lieu de devenir un langage de script. Similaire à IronPython, il a des aides intégrées pour l'hébergement (et peut même interpréter pour des cibles comme la XBox).
Jonathan Dickinson
1
Ne négligez pas non plus les scripts visuels (similaires à Staredit - l'éditeur Starcraft 1).
Jonathan Dickinson

Réponses:

11

Je ne peux pas comparer les deux, car je n'ai jusqu'à présent expérimenté que l'intégration de IronPython dans un jeu C #. Voici ce que j'aime bien:

1) C'est facile! Téléchargez les DLL IronPython, ajoutez une référence dans le projet,

 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) Comme vous pouvez le voir dans l'exemple ci-dessus, IronPython se convertit en fait en classes BCL là où il le peut. le résultat du script est un System.Numerics.BigInteger plutôt qu'un PyObject

3) Le dynamicmot clé en C # a été créé pour les situations d'interopérabilité où vous n'avez pas le type statique 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);
Jimmy
la source
+1 pour le bon exemple qui montre à quel point il est facile d'obtenir du runnning en fer python .... même si ce n'était pas le cas, OP le demandait ;-)
tobsen
0

IronPython et C # vont bien ensemble, IronPython peut être ajouté à C # pour lui donner une amélioration des performances. Donc, si vos jeux d'écriture, les appels Python en C # sont un avantage. Python lui-même ne peut pas utiliser XNA mais peut utiliser Directx, ce que C # ne peut pas faire directement.

Meh
la source
1
FWIW, Python ne peut pas non plus utiliser DirectX "directement" - il interagit avec lui via des wrappers basés sur le fait que D3D est une API C / COM. C'est exactement comment vous pouvez également accéder à DirectX à partir de C #.