Quali sono i pro e i contro di Lua vs. Python come linguaggio di scripting per la piattaforma XNA / C #? [chiuso]


9

Sto pensando di provare una delle mie idee antiche per un gioco. Il punto centrale di questo gioco sarebbe il possibile livello di personalizzazione funzionale dell'ambiente di gioco e degli oggetti (come la modifica del comportamento di un'arma spaziale). Per questo il gioco dovrebbe essere programmabile. Inoltre, non intendo commercializzarlo, è solo una sfida di programmazione interessante per me.

Dato che sono principalmente un ragazzo di .NET, userò XNA / C # per il gioco stesso. Per lo scripting penso di andare con Python o Lua. Ho precedenti esperienze con Python e non ho nulla contro di esso come lingua. Lua d'altra parte è quasi completamente nuovo per me, oltre ad alcune piccole modifiche ai componenti aggiuntivi di World of Warcraft che ho fatto qua e là, e sembra promettente. Quindi questa è la mia domanda:

Quali sono i pro e i contro di Lua vs. Python come linguaggio di scripting per la piattaforma XNA / C #?

Uno di questi è notevolmente più facile da usare con XNA / C #? Uno di questi presenta alcuni vantaggi o svantaggi specifici se utilizzato con XNA / C #? Perché consiglieresti uno sopra l'altro per XNA / C #?


4
So che non stai chiedendo alternative, ma nel caso in cui non lo sapessi, C # è anche un linguaggio di scripting valido e dal momento che stai usando C # è molto bassa manutenzione.
William Mariager,

2
Perché hai persino bisogno di un linguaggio di scripting? Quali vantaggi ti aspetti?
Peter Ølsted,

2
Entrambi sono popolari, usati professionalmente e sicuramente in grado di fare la parte degli script. È solo una questione di gusti per il 99% delle applicazioni. Python ha una libreria standard migliore e secondo me è un linguaggio più user-friendly.
Cloudanger,

1
Sulla falsariga di "hai considerato?" Hai considerato Boo ? È progettato per lo scripting, invece di diventare un linguaggio di scripting. Simile a IronPython ha degli helper integrati per l'hosting (e può persino interpretare obiettivi come l'XBox).
Jonathan Dickinson,

1
Inoltre, non trascurare gli script visivi (simile a Staredit - l'editor di Starcraft 1).
Jonathan Dickinson,

Risposte:


11

Non posso confrontare i due, dato che finora ho solo avuto esperienza nell'incorporare IronPython in un gioco C #. Ecco cosa mi piace al riguardo però:

1) È facile! Scarica le DLL IronPython, aggiungi riferimento nel progetto,

 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) Come puoi vedere dall'esempio sopra, IronPython in realtà converte in classi BCL dove può. il risultato dello script è un System.Numerics.BigInteger anziché un PyObject

3) La dynamicparola chiave in C # è stata creata per situazioni di interoperabilità in cui non è disponibile il tipo statico:

    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);

+1 per il buon esempio che mostra quanto sia facile far correre il pitone di ferro .... anche se non era quello che OP stava chiedendo ;-)
tobsen

0

IronPython e C # vanno bene insieme, IronPython può essere aggiunto a C # per aumentarne le prestazioni. Quindi, se i tuoi giochi di scrittura, le chiamate Python in C # sono un vantaggio. Python stesso non può usare XNA ma può usare Directx qualcosa che C # non può fare direttamente.


1
FWIW, Python non può nemmeno usare DirectX "direttamente" - interagisce con esso tramite wrapper in base al fatto che D3D è un'API C / COM. Questo è esattamente il modo in cui puoi accedere a DirectX anche da C #.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.