background image

4.8

Python API

Στην παρούσα ενότητα περιγράφεται η βιβλιοθήκη της μηχανής για χρήση μέσω της γλώσ-

σας προγραμματισμού Python.

Προτού προχωρήσουμε στο πρακτικό μέρος της υλοποίησης, κρίνεται σκόπιμο να παρου-

σιαστεί συνοπτικά η αιτιολόγηση της επιλογής της γλώσσας Python. Οι περισσότερες μηχανές

παιχνιδιών (και ιδίως οι εμπορικές) εκτός από τον γραφικό τρόπο διεπαφής του χρήστη με τις

επιμέρους λειτουργίες και τους μηχανισμούς τους, παρέχουν και μία scripting γλώσσα, μέσω

της οποίας ο χρήστης μπορεί να αξιοποιεί προγραμματιστικά τις δυνατότητες της μηχανής.

Η γλώσσα scripting δεν ταυτίζεται κατ’ ανάγκη με τη γλώσσα στην οποία έχει υλοποιηθεί

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

μηχανής επιδιώκει την αποδοτικότερη δυνατή εκτέλεση αλγορίθμων και λειτουργιών, εστιά-

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

πραγματοποιείται συνήθως σε γλώσσες χαμηλότερου επιπέδου, όπως C, C++, Rust ή Java, οι

οποίες προσφέρουν μεγαλύτερο έλεγχο ως προς τη διαχείριση μνήμης και τους μηχανισμούς

εκτέλεσης.

Αντίθετα, η scripting γλώσσα αποσκοπεί στη διευκόλυνση του χρήστη σε υψηλότερο επί-

πεδο αφαίρεσης. Στο πλαίσιο αυτό, ζητούμενο δεν είναι ο άμεσος έλεγχος πόρων, αλλά η απλό-

τητα, η ταχύτητα ανάπτυξης και η ευχρηστία. Ενδεικτικές επιλογές scripting γλωσσών στον

χώρο των μηχανών παιχνιδιών αποτελούν η C#, η Lua και η Python.

Με γνώμονα τα παραπάνω, και λαμβάνοντας υπόψη ότι η Python αποτελεί μια σύγχρονη

και ώριμη γλώσσα προγραμματισμού με σταθερό οικοσύστημα και ευρεία αποδοχή, επιλέχθηκε

ως γλώσσα διεπαφής της μηχανής.

Στο πλαίσιο της παρούσας εργασίας, δεδομένου ότι δεν υλοποιείται γραφικό περιβάλλον

διεπαφής χρήστη (GUI) για την αλληλεπίδραση με τη μηχανή, ο ρόλος της Python υπερβαίνει

αυτόν μιας απλής scripting γλώσσας. Η Python λειτουργεί ως το βασικό μέσο επικοινωνίας του

χρήστη με τη μηχανή, γεγονός που οδήγησε στην ανάπτυξη μιας ολοκληρωμένης βιβλιοθήκης

Python, η οποία εκθέτει (exposes) το σύνολο των λειτουργιών και των εργαλείων της μηχανής.

4.8.1

Τρόπος υλοποίησης

Για τη δημιουργία της Python βιβλιοθήκης της μηχανής χρησιμοποιήθηκε εξωτερική βι-

βλιοθήκη ανοιχτού κώδικα, συγκεκριμένα η pybind11. Η βιβλιοθήκη αυτή επιτρέπει την έκθεση

(binding) κλάσεων, συναρτήσεων και δομών δεδομένων της C++ προς τη γλώσσα Python, δη-

μιουργώντας μια διεπαφή διασύνδεσης μεταξύ των δύο περιβαλλόντων.

Η pybind11 βασίζεται σε σύγχρονα χαρακτηριστικά της C++ (C++11 και νεότερα) και παρέ-

χει μηχανισμούς για σχεδόν άμεση αντιστοίχιση (one-to-one mapping) κλάσεων και συναρτή-

σεων της C++ σε αντίστοιχα Python αντικείμενα. Με τον τρόπο αυτό, αντικείμενα της μηχανής

(όπως Entities και Components) μπορούν να γίνουν προσβάσιμα από Python scripts με ελάχιστη

επιπλέον λογική.

42