Προσθέτοντας λειτουργικότητα scripting σε .NET εφαρμογές

ψήφοι
62

Έχω ένα μικρό παιχνίδι γραμμένο σε C #. Χρησιμοποιεί μια βάση δεδομένων ως back-end. Είναι ένα παιχνίδι ανταλλαγής καρτών , και θα ήθελα να εφαρμόσουν τη λειτουργία των καρτών ως σενάριο.

Αυτό που εννοώ είναι ότι ουσιαστικά έχει μια διεπαφή, ICard, η οποία μια τάξη κάρτα εργαλεία ( public class Card056 : ICard) και η οποία περιλαμβάνει τη λειτουργία που καλούνται από το παιχνίδι.

Τώρα, για να κάνει το πράγμα διατηρήσιμη / moddable, θα ήθελα να έχω την τάξη για κάθε κάρτα, όπως πηγαίο κώδικα στη βάση δεδομένων και ουσιαστικά συγκεντρώνουν κατά την πρώτη χρήση. Έτσι, όταν έχω να προσθέσω / αλλάξετε μια κάρτα, θα το προσθέσω μόνο στη βάση δεδομένων και να πει την αίτησή μου για να ανανεώσετε, χωρίς να χρειάζεται καμία εγκατάσταση συναρμολόγησης (ειδικά από τη στιγμή που θα πρέπει να μιλάμε για 1 συναρμολόγησης ανά κάρτα που σημαίνει εκατοντάδες συνελεύσεις) .

Είναι πιθανό αυτό? Καταχωρήστε μια κατηγορία από ένα αρχείο προέλευσης και, στη συνέχεια υπόσταση σε αυτό, κ.λπ.

ICard Cards[current] = new MyGame.CardLibrary.Card056();
Cards[current].OnEnterPlay(ref currentGameState);

Η γλώσσα είναι η C #, αλλά επιπλέον μπόνους αν είναι δυνατόν για να γράψει το σενάριο σε οποιαδήποτε γλώσσα ΝΕΤ.

Δημοσιεύθηκε 02/08/2008 στις 00:22
πηγή χρήστη
Σε άλλες γλώσσες...                            


9 απαντήσεις

ψήφοι
37

Oleg Shilo της C # λύση Script (στο πλαίσιο του σχεδίου Κώδικα ) είναι πραγματικά μια μεγάλη εισαγωγή για να παρέχει ικανότητες σενάριο στην αίτησή σας.

Μια διαφορετική προσέγγιση θα ήταν να εξετάσει μια γλώσσα που είναι ειδικά κατασκευασμένες για scripting, όπως IronRuby , IronPython , ή Λούα .

IronPython και IronRuby είναι και οι δύο διαθέσιμες σήμερα.

Για έναν οδηγό για την ενσωμάτωση IronPython διαβάσετε Πώς να ενσωματώσετε IronPython υποστήριξη σενάριο στην υπάρχουσα εφαρμογή σας σε 10 εύκολα βήματα .

Lua είναι μια scripting γλώσσα που χρησιμοποιείται συνήθως στα παιχνίδια. Υπάρχει ένα compiler Lua για .NET, που διατίθεται από CodePlex - http://www.codeplex.com/Nua

Αυτό βάση κώδικα είναι μια μεγάλη διαβάσει, αν θέλετε να μάθετε για την οικοδόμηση ενός compiler σε .NET.

Μια διαφορετική οπτική γωνία συνολικά είναι να προσπαθήσουμε PowerShell . Υπάρχουν πολλά παραδείγματα ενσωμάτωσης PowerShell σε μια εφαρμογή - εδώ είναι μια εμπεριστατωμένη έργο σχετικά με το θέμα: Powershell σήραγγας

Απαντήθηκε 02/08/2008 στις 02:49
πηγή χρήστη

ψήφοι
7

Ίσως να είναι σε θέση να χρησιμοποιήσει IronRuby γι 'αυτό.

Διαφορετικά, θα πρότεινα να έχετε έναν κατάλογο όπου μπορείτε να τοποθετήσετε precompiled συνελεύσεις. Στη συνέχεια, θα μπορούσατε να έχετε μια αναφορά στο ΣΠ στη συνέλευση και την τάξη, και να χρησιμοποιήσετε τον προβληματισμό για να φορτώσετε τις κατάλληλες συνελεύσεις κατά το χρόνο εκτέλεσης.

Αν θέλετε πραγματικά να καταρτίσει κατά το χρόνο εκτέλεσης θα μπορούσατε να χρησιμοποιήσετε το CodeDOM, τότε μπορείτε να χρησιμοποιήσετε την αντανάκλαση για να φορτώσετε το δυναμικό σύστημα. MSDN άρθρο που θα μπορούσαν να βοηθήσουν .

Απαντήθηκε 02/08/2008 στις 05:18
πηγή χρήστη

ψήφοι
6

Εάν δεν θέλετε να χρησιμοποιήσετε το DLR μπορείτε να χρησιμοποιήσετε Boo (η οποία έχει διερμηνέα) ή θα μπορούσε να εξετάσει το έργο Script.NET (S #) για CodePlex . Με τη λύση Boo μπορείτε να επιλέξετε ανάμεσα καταρτίζονται σενάρια ή τη χρήση του διερμηνέα, και Boo κάνει ένα ωραίο scripting γλώσσα, έχει ένα ευέλικτο συντακτικό και μια επεκτάσιμη γλώσσα μέσω της ανοικτής αρχιτεκτονικής compiler της. Script.NET φαίνεται ωραίο πάρα πολύ, αν και θα μπορούσε εύκολα να επεκτείνει τη γλώσσα, καθώς και του ένα έργο ανοικτού πηγαίου κώδικα και χρησιμοποιεί ένα πολύ φιλικό Compiler Γεννήτρια ( Irony.net ).

Απαντήθηκε 06/08/2008 στις 17:28
πηγή χρήστη

ψήφοι
5

Είμαι χρησιμοποιώντας LuaInterface1.3 + Lua 5,0 για NET 1.1 εφαρμογής.

Το θέμα με Boo είναι ότι κάθε φορά που θα αναλύσει / μεταγλώττιση / eval κωδικό σας on the fly, δημιουργεί μια σειρά από μαθήματα boo έτσι θα πάρετε τις διαρροές μνήμης.

Lua στην άλλη πλευρά, δεν το κάνει αυτό, γι 'αυτό είναι πάρα πολύ σταθερό και λειτουργεί θαυμάσια (Ι μπορούν να περάσουν αντικείμενα από C # για να Λούα και προς τα πίσω).

Μέχρι στιγμής δεν το έχω βάλει σε παραγωγή ακόμα, αλλά φαίνεται πολλά υποσχόμενο.

Είχα ζητήματα διαρροές μνήμης σε PROD χρησιμοποιώντας LuaInterface + Lua 5,0 , ως εκ τούτου, θα χρησιμοποιηθεί Lua 5.2 και να συνδέεται απευθείας σε C # με DllImport. Οι διαρροές μνήμης ήταν μέσα στη βιβλιοθήκη LuaInterface.

Lua 5,2: από http://luabinaries.sourceforge.net και http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/lua-5.2_Win32_dll7_lib.zip/download

Μόλις το έκανα αυτό, όλα τα διαρροές μνήμης μου είχαν φύγει και η εφαρμογή ήταν πολύ σταθερή.

Απαντήθηκε 17/07/2012 στις 18:08
πηγή χρήστη

ψήφοι
5

Θα ήθελα να προτείνω τη χρήση LuaInterface όπως έχει εφαρμοστεί πλήρως Lua, όπου φαίνεται ότι Nua δεν είναι πλήρης και πιθανόν δεν εφαρμόζει κάποιες πολύ χρήσιμες λειτουργίες (coroutines, κλπ).

Αν θέλετε να χρησιμοποιήσετε κάποια από τα έξω προσυσκευασμένα μονάδες Lua, θα πρότεινα τη χρήση κάτι προς την κατεύθυνση της 1.5.x σε αντίθεση με τη σειρά 2.x που βασίζεται πλήρως διαχειριζόμενο κώδικα και δεν μπορεί να εκθέσει την απαραίτητη C API.

Απαντήθηκε 17/09/2008 στις 02:41
πηγή χρήστη

ψήφοι
5

Θα μπορούσατε να χρησιμοποιήσετε κάποια από τις γλώσσες DLR, το οποίο παρέχει έναν τρόπο για να φιλοξενήσει πολύ εύκολα τη δική σας πλατφόρμα προγραμματισμού. Ωστόσο, δεν χρειάζεται να χρησιμοποιήσετε μια γλώσσα scripting γι 'αυτό. Θα μπορούσατε να χρησιμοποιήσετε C # και να το μεταφράσει με τον πάροχο C # κώδικα. Εφ 'όσον το φορτώσετε στο δικό AppDomain του, μπορείτε να φορτώσουν και να ξεφορτώσουν το με την καρδιά σας.

Απαντήθηκε 02/08/2008 στις 07:16
πηγή χρήστη

ψήφοι
4

Η κύρια εφαρμογή που πουλάει τμήμα μου κάνει κάτι παρόμοιο με την παροχή προσαρμογές πελάτη (πράγμα που σημαίνει ότι δεν μπορώ να δημοσιεύσετε οποιαδήποτε πηγή). Έχουμε ένα C # εφαρμογή που φορτώνει δυναμικά scripts VB.NET (αν και οποιαδήποτε γλώσσα ΝΕΤ θα μπορούσε να υποστηριχθεί εύκολα - VB επιλέχθηκε επειδή η ομάδα προσαρμογής προήλθε από ένα υπόβαθρο ASP).

CodeDom Χρησιμοποιώντας .NET του θα συγκεντρώνει τα σενάρια από τη βάση δεδομένων, χρησιμοποιώντας το VB CodeDomProvider(ενοχλητικά από defaults θα .NET 2, αν θέλετε να υποστηρίξετε 3,5 χαρακτηριστικά που χρειάζεστε για να περάσετε ένα λεξικό με «CompilerVersion» = «v3.5» σε κατασκευαστή της ). Χρησιμοποιήστε τη CodeDomProvider.CompileAssemblyFromSourceμέθοδο για να το υπολογίσουν (μπορείτε να περάσετε τις ρυθμίσεις για να το αναγκάσει να συγκεντρώνουν μόνο στη μνήμη.

Αυτό θα είχε ως αποτέλεσμα εκατοντάδες συνελεύσεις στη μνήμη, αλλά θα μπορούσε να θέσει όλα κώδικας των δυναμικών τάξεων μαζί σε ένα ενιαίο συγκρότημα, και ξαναμεταγλωττίσετε το σύνολο της παρτίδας μετά από κάθε τροποποίηση. Αυτό έχει το πλεονέκτημα ότι θα μπορούσατε να προσθέσετε μια σημαία για την κατάρτιση σε δίσκο με ένα προσχέδιο προϋπολογισμού για όταν είστε έλεγχο, επιτρέποντάς σας να διορθώσετε μέσω της δυναμικής κώδικα.

Απαντήθηκε 10/08/2008 στις 16:24
πηγή χρήστη

ψήφοι
4

Ναι, έχω σκεφτεί αυτό, αλλά σύντομα κατάλαβα ότι ένα άλλο τομέα-ειδικά-Γλώσσα (DSL) θα ήταν ένα κομμάτι πάρα πολύ.

Ουσιαστικά, θα πρέπει να αλληλεπιδρούν με gamestate μου στη ενδεχομένως απρόβλεπτους τρόπους. Για παράδειγμα, μια κάρτα θα μπορούσε να έχει έναν κανόνα «Όταν αυτή κάρτες εισάγετε το παιχνίδι, όλα τα ζόμπι τσιράκια σας κερδίσει +3 επίθεση εναντίον υπό τους εχθρούς, εκτός αν ο εχθρός είναι ευλογημένο». Δεδομένου ότι τα παιχνίδια καρτών εμπορικών συναλλαγών στρίψτε βάση, η GameState Manager θα απολύσει OnStageX εκδηλώσεις και αφήστε τα φύλλα να τροποποιήσει άλλες κάρτες ή το GameState με οποιοδήποτε τρόπο τις ανάγκες της κάρτας.

Αν προσπαθήσω να δημιουργήσετε ένα DSL, θα πρέπει να εφαρμόσει ένα αρκετά μεγάλο σύνολο δυνατοτήτων και, ενδεχομένως, τον ενημερώνει διαρκώς, η οποία μετατοπίζει τις εργασίες συντήρησης σε ένα άλλο μέρος χωρίς να το αφαιρέσετε.

Γι 'αυτό ήθελα να μείνω με ένα «πραγματικό» γλώσσα .NET ουσιαστικά είναι σε θέση να φωτιά ακριβώς το γεγονός και αφήστε την κάρτα χειραγωγήσουν την gamestate με οποιονδήποτε τρόπο (εντός των ορίων της ασφάλειας πρόσβασης κώδικα).

Απαντήθηκε 02/08/2008 στις 00:49
πηγή χρήστη

ψήφοι
3

Η επόμενη έκδοση του .NET (5,0;) είχε πολλή συζήτηση για το άνοιγμα του «μεταγλωττιστή ως υπηρεσία», η οποία θα κάνει τα πράγματα όπως αξιολόγηση άμεση σενάριο δυνατόν.

Απαντήθηκε 27/11/2010 στις 03:12
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more