SlideShare a Scribd company logo
1 of 17
Download to read offline
1.Β Το Script του βασικού μενού.
Τα αρχεία τα οποία χρειάστηκε να συγγραφούν προκειμένου το βασικό μας μενού να λειτουργεί ορθά και
να έχει και τη πρέπουσα γραφική απεικόνιση εμπεριέχονται στο φάκελο MainScipts εντός του καταλόγου
Assets και περιλαμβάνονται όλα εκείνα τα αρχεία που χρησιμοποιούνται από το βασικό μας μενού. Όπως
μπορεί ευκόλως να γίνει κατανοητό από τη εικόνα παρακάτω, ορισμένα από αυτά αναλύθηκαν στη
προηγούμενη ενότητα.
Εικόνα 1.Β.1 « O φάκελος MainScripts »
Το μεγαλύτερο σε κώδικα script του παιχνιδιού, το βασικότερο ώστε να μπορέσουν να αξιοποιηθούν οι
κλάσεις οι οποίες αναφέρθηκαν στο κεφάλαιο 2.Α και το πιο πολύπλοκο ταυτόχρονος, το script
«NewMainGUI.cs». Το script αυτό αποτελεί μια καλύτερη, πιο συμμαζεμένη και πιο ευέλικτη εκδοχή του
προκατόχου του «MainGui.cs» καθώς οι όποιες εναλλαγές μετάβασης από μενού σε μενού γίνονται με
δείκτες σε συναρτήσεις ( delegates), τα απεικονιζόμενα στοιχεία ως προς το ποιο ύψος και πλάτος θα
εμφανίζονται οι εικόνες εντός των μενού βρίσκονται σε άλλες κλάσεις που δημιουργήθηκαν για αυτό το
σκοπό, όπως και τα διάφορα μηνύματα προτροπής χρήστη καθώς επίσης και της πολεμικής εξειδίκευσης
(masteries), βρίσκονται και αυτά σε διαφορετικές κλάσεις. Όλα για καλύτερη πάντα οργάνωση και για πιο
καθαρό κώδικα με βασικό και μόνο γνώμονα την μελλοντική επέκταση του παιχνιδιού. Δυστυχώς για τα
μηνύματα αυτά δεν έγινε η συγγραφή απαραίτητου κώδικα ώστε να γίνει εν τέλη η γραφική τους
αναπαράσταση, αντί αυτού τα όποια μηνύματα προτροπής ως προς τον τελικό χρήστη εμφανίζονται
μέσω της κονσόλας. Αλλά για να δείξουμε στους αναγνώστες μας πώς μπορεί να επιτευχθεί κάτι τέτοιο
ώστε να πάρουν μία ιδέα για το πώς θα μπορούσε να υλοποιηθεί, έχει γίνει πάρα πολύ καλή δουλεία στο
μενού εντός του παιχνιδιού το οποίο έχει να κάνει με τη πολεμική εξειδίκευση του χρήστη ( masteries
page ) και θα αναλυθεί εκτενέστερα στα επόμενα κεφάλαια.
Όπως ξεκαθαρίστηκε και στις εισαγωγικές ενότητες του 1ου
μέρους, το παιχνίδι μας για μπορεί να
αποτελείται από περισσότερες του ενός σκηνές ( scenes) και κάθε μία από αυτές καλείται όποτε
χρειαστεί. Στη παρούσα πτυχιακή υπάρχουν τρείς στο πλήθος σκηνές, οι «scene_1», «scene_2» και η
«scene_3». Η ονοματολογία τους δεν έχει να κάνει με τη σειρά που καλούνται από τα παιχνίδι,
ονομάστηκαν με αυτό τον τρόπο σύμφωνα με τη σειρά δημιουργίας του κατά την ανάπτυξη. Στη πρώτη
σκηνή είναι το κύριο μέρος του παιχνιδιού μας, η “πίστα” μας όπου ο παίκτης παίρνει τον έλεγχο ενός
μαχητικού αεροσκάφους και ο σκοπός του είναι να βλάψει κάποια εχθρικά ραντάρ προκειμένου να
ολοκληρωθεί το ζήτημα που απαιτεί το σενάριο του παιχνιδιού μας. Στη δεύτερη σκηνή διαδραματίζεται
το βασικό μενού του παιχνιδιού κατά το οποίο δημιουργούνται αρχεία χρηστών, ορίζεται η πολεμική τους
εξειδίκευση κ.α. τα οποία δεν κατάφεραν να ολοκληρωθούν. Τέλος στη Τρίτη σκηνή λαμβάνει μέρος ένα
τυπικό loading screen το οποίο τρέχει κατά την έναρξη του παιχνιδιού και δίνει κάποιες πληροφορίες
σχετικά με τη πτυχιακή εργασία. Στη πραγματικότητα όμως πρώτα καλείται από το παιχνίδι μας η Τρίτη
σκηνή, στη συνέχεια η δεύτερη σκηνή και τέλος η πρώτη ;
Παρακάτω θα αναλυθεί η τρόπος λειτουργίας του βασικού μενού το οποίο λαμβάνει χώρα στη δεύτερη
σκηνή ( «scene_2» ). Καθώς επίσης και στο script «NewMainGUI.cs» καθώς είναι το μόνο script το οποίο
χρειάζεται να τρέχει σε αυτή τη σκηνή και το μόνο που χρειάζεται να κληρονομεί από τη build in κλάση
του engine, τη «MonoBehaviour».
Προκειμένου να γίνεται εκτέλεση του μενού μας θα πρέπει να δημιουργήσουμε μία σκηνή, να
τοποθετήσουμε ένα άδειο game object εντός της σκηνής μας και τέλος να κάνουμε attach το
«NewMainGUI.cs». Εντός του αρχείου αυτού συμπεριλαμβάνονται μεταξύ των γραμμών κώδικα 13 – 241
όλες αυτές οι μεταβλητές που θα χρησιμοποιηθούν. Εκτός των κοινών τύπων μεταβλητών που
χρησιμοποιούνται κατά κόρο όπως int, float, Boolean και delegate γίνεται χρήση και αρκετών build in
τύπων δεδομένων όπως : μεταβλητών που περιέχουν εικόνες τύπου Texture ή Texture2D, τύποι
μεταβλητών που περιέχουν γραμματοσειρές εν ονόματι TextAsset, μεταβλητές τύπου Rect που στην
ουσία δεν είναι τίποτε άλλο παρά τετραδιάστατες μεταβλητές (x,y,z,a), μεταβλητές τύπου AudioSource,
AudioListener και AudioList οι οποίες σχετίζονται με το ηχητικό κομμάτι του μενού μας και τέλος, τους
περισσότερους τύπους δεδομένων που αναλύθηκαν στην αμέσως προηγούμενη ενότητα 1.Α του
δεύτερου μέρους της πτυχιακής παρουσίασης.
Το βασικό μας μενού αποτελεί στην ουσία από έναν τύπο δείκτη σε συνάρτηση όπως μπορεί να
διαπιστωθεί από τη παρακάτω εικόνα όπου ορίζεται μία συνάρτηση delegate με όνομα GUIMethod
χωρίς ορίσματα και ακολούθως μία ιδίου τύπου delegate με όνομα currentGUIMethod η οποία θα
δείχνει σε ανάλογα “σώματα” συναρτήσεων αναλόγως με το πού θέλει ο παίκτης να πλοηγηθεί.
Εικόνα 1.Β.2 « O φάκελος MainScripts »
Εντός της συνάρτησης Start() από τις γραμμές κώδικα 269 – 303 αποδίδεται το σώμα της συνάρτησης που
θέλουμε να δείχνει η currentGUIMethod κατά την έναρξη της σκηνής μας και στη συνέχεια
αρχικοποιούνται οι τιμές και οι μεταβλητές για τα υπόλοιπες συναρτήσεις – σώματα που θα δείχνει η
delegate μας την εκάστοτε χρονική στιγμή.
Εικόνα 1.Β.3 « Αρχικοποίηση του μενού »
Κάθε μία από τις συναρτήσεις που ξεκινάνε με «SetUp» αναφέρεται στην αρχικοποίηση για κάθε ένα από
τα υπό-μενού τα οποία βρίσκουν γραφική απεικόνιση εντός της δεύτερης σκηνής ενώ στις γραμμές
μεταξύ 307 έως 316 γίνεται η δημιουργία του αρχείου MasteriesSource.dat στο φάκελο Updateables
όπως αυτό ορίζεται από τη κλάση την οποία αναφέραμε στην ενότητα 1.Α του κεφαλαίου.
Προγραμματιστικά είναι σωστό αλλά λόγο του γεγονότος ότι το λογισμικό μας βρίσκεται ακόμη σε
εμβρυϊκό στάδιο και δεν υπήρχε χρόνος συγγραφής διαφορετικού - προγράμματος (installation.exe) το
οποίο θα εγκαθιστούσε τα απαραίτητα αρχεία για πρώτη χρήση προτού αρχίσει να τρέχει το παιχνίδι μας,
η δημιουργία του γίνεται απλώς από εδώ. Στις γραμμές 314 – 325, είναι κώδικας μέσω του οποίου
επιβεβαιώνεται η ορθή φόρτωση των δεδομένων πολεμικής εξειδίκευσης και μπορεί να αφαιρεθεί
μελλοντικά.
Ας δούμε όμως πώς και με τι τιμές αρχικοποιούμε το σώμα του πρώτου μενού επιλογών με το οποίο θα
έρθει αντιμέτωπος ο παίκτης. Ξεκινώντας με τη SetUpMainMenu() η οποία διαδραματίζεται μεταξύ των
γραμμών 1400 και 1444 :
Εικόνα 1.Β.4 « το σώμα της SetUpMainMenu() »
Τόσο το background όσο και τα εικονίδια τα οποία χρειάζονται για την απεικόνιση όλα φορτώνονται από
τον υποκατάλογο Resources εντός του φακέλου Assets. Ο πίνακας mainMenuArr[] περιλαμβάνει τις
εικόνες προς επιλογή μέσω του mouse ( New Campaign, Continue Campaign, Options και About ), ενώ ο
πίνακας TMainMenuArr[] τις ίδιες εικόνες εντός πλαισίου όταν ο παίκτης πλοηγηθεί πάνω σε αυτές. Ο
πίνακας currSelected[] είναι στη ουσία αυτός ο οποίος θα απεικονίζεται με κάθε update της GPU αφού
ενδέχεται μία μόνο επιλογή να είναι επιλεγμένη.
Εικόνα 1.Β.5 « Η επιλογή New Campaign ενεργή και μη »
Στις γραμμές 1424 - 1434 γίνεται η αρχικοποίηση των Rect τα οποία θα φέρουν τις εικόνες αυτές αφού οι
εικόνες που φέρουν πλαίσιο είναι σαφώς μεγαλύτερης διάστασης σε αντίθεση με αυτές χωρίς. Τέλος οι
μεταβλητές τύπου Boolean αρχικοποιούνται όλες σε ψευδής αφού δεν θέλουμε κατά την έναρξη κάποια
επιλογή να είναι προεπιλεγμένη.
Σημείωση : ο τρόπος που ορίζονται τα Rects είναι πάλη σωστός συντακτικά αλλά τελείως λάθος αφού
ενδέχεται το παιχνίδι να τρέχει κάθε φορά σε διαφορετική ανάλυση ή ακόμη σε τετράγωνες ή widescreen
οθόνες (monitor). πιο σωστά προγραμματιστικά θα ήταν να είχε σχεδιαστεί εξαρχής μία ομάδα κλάσεων
η οποίες να αναγνώριζαν την εκάστοτε ανάλυση και αναλόγως να διαμορφώνανε τα Rects αυτομάτως.
Στη συνέχεια αναλύεται και ο τρόπος συμπεριφοράς της συνάρτησης MainGameMenu () που καλεί τα
αντικείμενα και τις μεταβλητές που αρχικοποιήθηκαν στην SetUpMainMenu(), αφού ορίστηκαν
παραπάνω οι εικόνες και οι μεταβλητές που χρειάζεται προκειμένου να επιστρέφεται και το σωστό
αποτέλεσμα προς την οπτική του χρήστη. Παρακάτω αναλύεται και ο τρόπος χρήσης αυτών από τη
MainGameMenu() η οποία κατά την εκτέλεση της εφαρμογής μας είναι η πρώτη συνάρτηση που
εξισώνεται με την currentGUIMethod() η οποία όπως αναφέρθηκε είναι τύπου delegate και δέχεται
συναρτήσεις χωρίς επιστρεφόμενες τιμές και χωρίς ορίσματα.
Εικόνα 1.Β.7 « Η συνάρτηση MainGameMenu () »
Στη γραμμή 348 ορίζεται η θέση του mouse πάνω στην επιφάνεια της οθόνης του χρήστη ( x, y ), ενώ στης
γραμμές 350 – 356 μέσω της συνάρτησης - μέλος της κλάσης GUI την DrawTexture(Rect aRect, Texture
aTexture) εμφανίζονται στην οθόνη οι εικόνες που ορίστηκαν εντός των ορίων των πλαισίων που τις
αντιπροσωπεύουν (Rects). Όπως φαίνεται και από την εικόνα 1.Β.5 το αρχικό μας μενού από τελείται από
τέσσερα επιλεγόμενα εικονίδια. Προκειμένου να γίνεται κάθε φορά αντιληπτό από το παιχνίδι μας τη
επιλογή έδωσε ο παίκτης την εκάστοτε χρονική στιγμή, πρέπει να ακολουθείται και μία σειρά από
συνθήκες ελέγχου για το πού βρίσκεται ο κέρσορας του mouse του παίκτη και αν ο παίκτης αποπειραθεί
να πατήσει κάποιο πλήκτρο.
Τέσσερα το πλήθος των επιλογών επομένως τέσσερεις και οι συνθήκες ελέγχου που πρέπει αν ελέγχονται
την εκάστοτε χρονική στιγμή. Γραμμές 360 – 379, εντός της συνθήκης ελέγχου εξετάζεται μέσω της
συνάρτησης Contains(Vector2 aVector2) μέλος της Rect, εάν οι συντεταγμένες του mouse βρίσκονται
εντός του πλαισίου (Rect) της εικόνας την οποία και αντιπροσωπεύει. Αν η συνθήκη αυτή είναι όντως
αληθής, τότε γίνεται η αναπαραγωγή ενός μικρού ηχητικού εφέ και η νέα εικόνα της επιλογής που
συμπεριλαμβάνει την επιλογή εντός του μικρού πλαισίου “ζωγραφίζεται” ακριβώς από πάνω από τη
προηγούμενη. Αμέσως μετά εφόσον επιλογή του παίκτη γίνει αντιληπτή και όπως ορίζει ο κώδικας η
delegate μεταβλητή μας τώρα δείχνει σε μία νέα συνάρτηση με διαφορετικό σώμα, τη NewGameMenu()
και αλλάζει όλο το γραφικό περιβάλλον. Αλλιώς γραμμές κώδικα 375 – 379 οι εικόνες παραμένουν ως έχει
και δεν γίνεται καμία ενέργεια. Και ου το καθ’ εξής για κάθε μία από τις επιλογές του βασικού μενού του
παιχνιδιού. Για τις επιλογές «Options» και «About» δεν γίνεται κάποιου είδους μετάβαση αφού δεν έχει
ακόμη αποφασιστεί ούτε υλοποιηθεί η φύση των μενού τα οποία θα πρεσβεύουν. Η ίδια ακριβώς
φιλοσοφία ακολουθείται και για τη φόρτωση του μενού τη μετάβαση στο μενού κατά το οποίο
φορτώνουμε τον λογαριασμό ενός ήδη εγγεγραμμένου παίκτη στο παιχνίδι (γραμμές 381 – 395).
Εν ολίγοις εντός του παιχνιδιού η επιλογή New Campaign μας οδηγεί στο περιβάλλον δημιουργίας
λογαριασμού νέου χρήστη. Ενώ η επιλογή Load Campaign στο περιβάλλον κατά το οποίο ζητείται η
φόρτωση ενός ήδη υπάρχοντος λογαριασμού και συνέχεια του.
Με τους ίδιου ακριβώς τρόπους και μεθόδους εγκαθίστανται και τα επόμενα υπό μενού του παιχνιδιού,
κάνοντας χρήση συναρτήσεων για αρχικοποίηση των εικόνων των μεταβλητών και των τιμών των
συναρτήσεων που θα εξισώνονται με τη delegate μεταβλητή προκειμένου να επιτευχθεί η πλοήγηση
ανάμεσα στα υπό μενού του παιχνιδιού. Οι συναρτήσεις αυτές εμφανίζονται στην εικόνα που ακολουθεί :
Εικόνα 1.Β.8« Οι συναρτήσεις εγκατάστασης των γραφικών των μενού »
Εντός των γραμμών κώδικα 1400 – 1604 περιγράφεται το περιεχόμενο προς εγκατάσταση των γραφικών
που σχετίζονται με τα background των μενού, τα εικονίδια, και τις όποιες κινούμενες εικόνες ενδέχεται
αυτά να περιέχουν.
Στις γραμμές κώδικα 1608 – 1704 περιγράφεται ο τρόπος λειτουργίας των συναρτήσεων που
χρησιμοποιεί το NewMainGUI.cs προκειμένου να κάνει χρήση των συναρτήσεων δημιουργία και
φόρτωσης λογαριασμών χρηστών καθώς και της πολεμικής εξειδίκευσης αυτών, όπως αυτές αναλύθηκαν
στην αμέσως προηγούμενη ενότητα (1.Α) του τρέχοντος κεφαλαίου.
Εικόνα 1.Β.9« Συναρτήσεις εγκατάστασης και φόρτωσης δεδομένων λογαριασμών
»
Οι συναρτήσεις SaveMasteryPage(), SetUpUserSettings() και SetUpMissions() δεν συμβάλλουν κάπου
καθώς η συμπεριφορά τους δεν έχει ορισθεί ακόμη. Θα γίνει όμως παρουσίαση των υπολοίπων
συναρτήσεων που απεικονίζονται στην εικόνα 1.Β.9 αμέσως.
Εικόνα 1.Β.10 « ανάλυση των συναρτήσεων της εικόνας 1.Β.9 »
Στη γραμμή 1673 καλείται η συνάρτηση δημιουργία λογαριασμού χρήστη κάνοντας χρήση της κλάσης
UserAccount, τα ορίσματα που περνάνε από το βασικό μενού είναι το όνομα του χρήστη και το password
του. Η συνάρτηση αυτή λαμβάνει μέρος στις γραμμές κώδικα 470 -481 :
Εικόνα 1.Β.11 « Δημιουργία λογαριασμού χρήστη »
Εικόνα 1.Β.12 « Φόρτωση λογαριασμού χρήστη »
Προκειμένου να φορτωθεί το ήδη υπάρχον Account του χρήστη δημιουργούμε ένα προσωρινό προφίλ,
το οποίο μέσω της συνάρτησης LoadAccount() θα μεταφέρει τα δεδομένα του λογαριασμού από το
σκληρό δίσκο και θα τα αποδώσει στη προσωρινή μεταβλητή UserProfileFly.H μεταβλητή αυτή είναι
τύπου UserProfile και η LoadAccount όπως είχαμε ορίσει τροποποιημένη με τέτοιο τρόπο ώστε να
επιστρέφει δεδομένα τύπου UserProfile. Μέσω της χρήσης της κονσόλας (γραμμή κώδικα 1691 )
επιβεβαιώνεται στο debugging η ορθότητα των επιστρεφόμενων τύπων δεδομένων.
Παρακάτω η λειτουργία της SaveUserProfile :
Εικόνα 1.Β.13 « Αποθήκευση λογαριασμού χρήστη »
Όπως μπορούμε να διακρίνουμε και από την παρακάτω εικόνα :
Εικόνα 1.Β.14 « Τμήμα κώδικα που καλείται η SaveUserProfile »
Από τη γραμμή 948 αφού αποδοθεί η τρέχουσα πολεμική εξειδίκευση ( 939 -940 ) στη συνέχεα
αποδίδονται στη προσωρινή μεταβλητή pageMasteries της οποία τα δεδομένα αντιγράφονται στα
masteries του προσωρινού προφίλ χρήστη που έχει δημιουργηθεί για να τα φιλοξενήσει ( γραμμή 942 ).
Τέλος ακολουθεί η αποθήκευση των αλλαγών του προφίλ στο σκληρό δίσκο.
Σημείωση : οι γραμμές κώδικα 939 – 940 θα ήταν πιο πρέπον να συμπεριληφθούν εντός της συνάρτησης
SaveMasterPage() η οποία όπως αναφέραμε ήταν άδεια. ( γραμμή κώδικα 1658 )
Τέλος οι συναρτήσεις LoadMasteriesPage() και ClearMasteriesPageOnLogout(). Η πρώτη
χρησιμοποιείται ώστε να “τραβήξει” τη πολεμική εξειδίκευση του λογαριασμού με τον οποίο θα έχει
κάνει login ο παίκτης και αποδίδει τα δεδομένα αυτά της πολεμικής εξειδίκευσης στις μεταβλητές που
έχουν δημιουργηθεί για αυτό το σκοπό, ώστε αργότερα να γίνει χρήση τους από τη συνάρτηση του
γραφικού μενού το οποίο είναι υπεύθυνο ώστε να τις αναπαραστήσει.
Εικόνα 1.Β.15« Βοηθητική συνάρτηση φόρτωσης πολεμικής εξειδίκευσης »
Εικόνα 1.Β.16« Κλήση και χρήση πολεμικής εξειδίκευσης »
Προς αποσαφήνιση όρων, η MasteriesPage() εξισώνεται με τη delegate αφού είναι συνάρτηση η οποία
είναι υπεύθυνη για την προβολή των δεδομένων πολεμικής εξειδίκευσης. Ενώ η LoadMasteriesPage(),
απλώς εγκαθιστά τα δεδομένα προς απεικόνιση.
Τέλος η ClearMasteriesPageOnLogout() :
Εικόνα 1.Β.17« η λειτουργία της ClearMasteriesPageOnLogout() »
Η λειτουργία που εκτελείται μέσω αυτής της συνάρτησης είναι να καθαρίζει τα προς προβολή
δεδομένα της πολεμικής εξειδίκευσης, ώστε όταν ο παίκτης θελήσει να κάνει login με ένα διαφορετικό
λογαριασμό να μην αφήνει πίσω του υπολείμματα από προηγούμενους λογαριασμούς.
Συνεχίζουμε εντός του ίδιου αρχείου πάντα προκειμένου να αναλυθεί ο τρόπος λειτουργία και η
χρησιμότητα των παρακάτω συναρτήσεων. Εντός του NewMainGUI.cs γραμμές κώδικα ( 1035 – 1335 ) :
Εικόνα 1.Β.18« περισσότερες συναρτήσεις εντός του NewMainGUI.cs »
Στις πρώτες δύο συναρτήσεις την SetUpAudioAndEffects() και SetUpFontsAndStyles(), ορίζονται οι ήχοι
προτροπής για τις ενέργειες του παίκτη καθώς επίσης και των ηχητικών εφέ των διαφόρων επιλογών
του μενού ενώ στη δεύτερη συνάρτηση ορίζεται το είδος και το πώς θα εμφανίζεται η γραμματοσειρά
στα σημεία εκείνα που απαιτείται απεικόνιση μηνυμάτων στην οθόνη. Ακολουθούν οι PlayAnEnter() και
η PlayAclick( bool rectFlag ), μέσω των οποίων αναπαράγεται ένα διαφορετικό ηχητικό εφέ όταν ο
παίκτης πατάει κάποια επιλογή του μενού ή όταν επιθυμεί να αποθηκεύσει τις όποιες ανεργίες του. Το
ίδιο ακριβώς και για την UpgradeOrDegradeSoundFX(). Εν συνεχεία οι συναρτήσεις
UpgradeMastery(string astring ) και DegradeMastery(string astring ) μέσω των οποίων αυξομειώνονται
οι τιμές των μεταβλητών πολεμικής εξειδίκευσης οι οποίες φορτώνονται από το λογαριασμό του χρήστη
( βλέπε εικόνα 1.Β.15, LoadUserMasteriesPage() ) προτού ξανά αποθηκευτούν. Οι UpgradeMastery και
DegradeMastery καλούνται μέσω της UpgradeOrDegradeMastery(string astring). Η συνάρτηση
ShowMasteryInfo(string message) η οποία το μοναδικό πράγμα που κάνει είναι να εμφανίζει τα
στοιχεία της εκάστοτε επιλογής πολεμικής εξειδίκευσης ώστε ο χρήστης να παίρνει πληροφορίες μέσω
αυτής και να πράττει αναλόγως.
Τελειώνοντας με τις συναρτήσεις της εικόνας 1.Β18 οι υπό ρουτίνες των γραμμών 1317, 1323 και 1331
που χρησιμοποιούνται ώστε να υπάρχει κάποια χρονική ασφάλεια για τους χρόνους προσπέλασης
μεταξύ των μεταβλητών και των αρχείων μας. Η λειτουργία τους είναι ορθή και μελλοντικά ενδέχεται να
αλλάξει.
Παρακάτω γίνεται η παρουσίαση του κώδικα των συναρτήσεων που μόλις αναφέραμε. Και αμέσως μετά
θα ακολουθήσει εκτενέστερη ανάλυση για το ποιες κλάσεις χρειάστηκε να συγγραφούν και πώς εντέλει
καταλήγει προκειμένου οι πληροφορίες των στοιχείων των μηνυμάτων των χαρακτηριστικών της
πολεμικής εξειδίκευσης να παρουσιάζονται στην οθόνη του παίκτη μέσω της ShowMasteryInfo(string
message).
Εικόνα 1.Β.19 « οι συναρτήσεις SetUoAudioEffects και SetUpFontsAndStyles »
Εντός της SetUpAudioAndEffects() γίνεται η αρχικοποίηση των μεταβλητών που ορίσαμε στις πρώτες
γραμμές του script μας όπως φαίνονται και παρακάτω :

More Related Content

Featured

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 

Featured (20)

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 

Diploma_thesis_partial_A

  • 1. 1.Β Το Script του βασικού μενού. Τα αρχεία τα οποία χρειάστηκε να συγγραφούν προκειμένου το βασικό μας μενού να λειτουργεί ορθά και να έχει και τη πρέπουσα γραφική απεικόνιση εμπεριέχονται στο φάκελο MainScipts εντός του καταλόγου Assets και περιλαμβάνονται όλα εκείνα τα αρχεία που χρησιμοποιούνται από το βασικό μας μενού. Όπως μπορεί ευκόλως να γίνει κατανοητό από τη εικόνα παρακάτω, ορισμένα από αυτά αναλύθηκαν στη προηγούμενη ενότητα. Εικόνα 1.Β.1 « O φάκελος MainScripts »
  • 2. Το μεγαλύτερο σε κώδικα script του παιχνιδιού, το βασικότερο ώστε να μπορέσουν να αξιοποιηθούν οι κλάσεις οι οποίες αναφέρθηκαν στο κεφάλαιο 2.Α και το πιο πολύπλοκο ταυτόχρονος, το script «NewMainGUI.cs». Το script αυτό αποτελεί μια καλύτερη, πιο συμμαζεμένη και πιο ευέλικτη εκδοχή του προκατόχου του «MainGui.cs» καθώς οι όποιες εναλλαγές μετάβασης από μενού σε μενού γίνονται με δείκτες σε συναρτήσεις ( delegates), τα απεικονιζόμενα στοιχεία ως προς το ποιο ύψος και πλάτος θα εμφανίζονται οι εικόνες εντός των μενού βρίσκονται σε άλλες κλάσεις που δημιουργήθηκαν για αυτό το σκοπό, όπως και τα διάφορα μηνύματα προτροπής χρήστη καθώς επίσης και της πολεμικής εξειδίκευσης (masteries), βρίσκονται και αυτά σε διαφορετικές κλάσεις. Όλα για καλύτερη πάντα οργάνωση και για πιο καθαρό κώδικα με βασικό και μόνο γνώμονα την μελλοντική επέκταση του παιχνιδιού. Δυστυχώς για τα μηνύματα αυτά δεν έγινε η συγγραφή απαραίτητου κώδικα ώστε να γίνει εν τέλη η γραφική τους αναπαράσταση, αντί αυτού τα όποια μηνύματα προτροπής ως προς τον τελικό χρήστη εμφανίζονται μέσω της κονσόλας. Αλλά για να δείξουμε στους αναγνώστες μας πώς μπορεί να επιτευχθεί κάτι τέτοιο ώστε να πάρουν μία ιδέα για το πώς θα μπορούσε να υλοποιηθεί, έχει γίνει πάρα πολύ καλή δουλεία στο μενού εντός του παιχνιδιού το οποίο έχει να κάνει με τη πολεμική εξειδίκευση του χρήστη ( masteries page ) και θα αναλυθεί εκτενέστερα στα επόμενα κεφάλαια. Όπως ξεκαθαρίστηκε και στις εισαγωγικές ενότητες του 1ου μέρους, το παιχνίδι μας για μπορεί να αποτελείται από περισσότερες του ενός σκηνές ( scenes) και κάθε μία από αυτές καλείται όποτε χρειαστεί. Στη παρούσα πτυχιακή υπάρχουν τρείς στο πλήθος σκηνές, οι «scene_1», «scene_2» και η «scene_3». Η ονοματολογία τους δεν έχει να κάνει με τη σειρά που καλούνται από τα παιχνίδι, ονομάστηκαν με αυτό τον τρόπο σύμφωνα με τη σειρά δημιουργίας του κατά την ανάπτυξη. Στη πρώτη σκηνή είναι το κύριο μέρος του παιχνιδιού μας, η “πίστα” μας όπου ο παίκτης παίρνει τον έλεγχο ενός μαχητικού αεροσκάφους και ο σκοπός του είναι να βλάψει κάποια εχθρικά ραντάρ προκειμένου να ολοκληρωθεί το ζήτημα που απαιτεί το σενάριο του παιχνιδιού μας. Στη δεύτερη σκηνή διαδραματίζεται το βασικό μενού του παιχνιδιού κατά το οποίο δημιουργούνται αρχεία χρηστών, ορίζεται η πολεμική τους εξειδίκευση κ.α. τα οποία δεν κατάφεραν να ολοκληρωθούν. Τέλος στη Τρίτη σκηνή λαμβάνει μέρος ένα τυπικό loading screen το οποίο τρέχει κατά την έναρξη του παιχνιδιού και δίνει κάποιες πληροφορίες σχετικά με τη πτυχιακή εργασία. Στη πραγματικότητα όμως πρώτα καλείται από το παιχνίδι μας η Τρίτη σκηνή, στη συνέχεια η δεύτερη σκηνή και τέλος η πρώτη ; Παρακάτω θα αναλυθεί η τρόπος λειτουργίας του βασικού μενού το οποίο λαμβάνει χώρα στη δεύτερη σκηνή ( «scene_2» ). Καθώς επίσης και στο script «NewMainGUI.cs» καθώς είναι το μόνο script το οποίο χρειάζεται να τρέχει σε αυτή τη σκηνή και το μόνο που χρειάζεται να κληρονομεί από τη build in κλάση του engine, τη «MonoBehaviour». Προκειμένου να γίνεται εκτέλεση του μενού μας θα πρέπει να δημιουργήσουμε μία σκηνή, να τοποθετήσουμε ένα άδειο game object εντός της σκηνής μας και τέλος να κάνουμε attach το «NewMainGUI.cs». Εντός του αρχείου αυτού συμπεριλαμβάνονται μεταξύ των γραμμών κώδικα 13 – 241
  • 3. όλες αυτές οι μεταβλητές που θα χρησιμοποιηθούν. Εκτός των κοινών τύπων μεταβλητών που χρησιμοποιούνται κατά κόρο όπως int, float, Boolean και delegate γίνεται χρήση και αρκετών build in τύπων δεδομένων όπως : μεταβλητών που περιέχουν εικόνες τύπου Texture ή Texture2D, τύποι μεταβλητών που περιέχουν γραμματοσειρές εν ονόματι TextAsset, μεταβλητές τύπου Rect που στην ουσία δεν είναι τίποτε άλλο παρά τετραδιάστατες μεταβλητές (x,y,z,a), μεταβλητές τύπου AudioSource, AudioListener και AudioList οι οποίες σχετίζονται με το ηχητικό κομμάτι του μενού μας και τέλος, τους περισσότερους τύπους δεδομένων που αναλύθηκαν στην αμέσως προηγούμενη ενότητα 1.Α του δεύτερου μέρους της πτυχιακής παρουσίασης. Το βασικό μας μενού αποτελεί στην ουσία από έναν τύπο δείκτη σε συνάρτηση όπως μπορεί να διαπιστωθεί από τη παρακάτω εικόνα όπου ορίζεται μία συνάρτηση delegate με όνομα GUIMethod χωρίς ορίσματα και ακολούθως μία ιδίου τύπου delegate με όνομα currentGUIMethod η οποία θα δείχνει σε ανάλογα “σώματα” συναρτήσεων αναλόγως με το πού θέλει ο παίκτης να πλοηγηθεί. Εικόνα 1.Β.2 « O φάκελος MainScripts » Εντός της συνάρτησης Start() από τις γραμμές κώδικα 269 – 303 αποδίδεται το σώμα της συνάρτησης που θέλουμε να δείχνει η currentGUIMethod κατά την έναρξη της σκηνής μας και στη συνέχεια αρχικοποιούνται οι τιμές και οι μεταβλητές για τα υπόλοιπες συναρτήσεις – σώματα που θα δείχνει η delegate μας την εκάστοτε χρονική στιγμή.
  • 4. Εικόνα 1.Β.3 « Αρχικοποίηση του μενού » Κάθε μία από τις συναρτήσεις που ξεκινάνε με «SetUp» αναφέρεται στην αρχικοποίηση για κάθε ένα από τα υπό-μενού τα οποία βρίσκουν γραφική απεικόνιση εντός της δεύτερης σκηνής ενώ στις γραμμές μεταξύ 307 έως 316 γίνεται η δημιουργία του αρχείου MasteriesSource.dat στο φάκελο Updateables όπως αυτό ορίζεται από τη κλάση την οποία αναφέραμε στην ενότητα 1.Α του κεφαλαίου. Προγραμματιστικά είναι σωστό αλλά λόγο του γεγονότος ότι το λογισμικό μας βρίσκεται ακόμη σε εμβρυϊκό στάδιο και δεν υπήρχε χρόνος συγγραφής διαφορετικού - προγράμματος (installation.exe) το οποίο θα εγκαθιστούσε τα απαραίτητα αρχεία για πρώτη χρήση προτού αρχίσει να τρέχει το παιχνίδι μας, η δημιουργία του γίνεται απλώς από εδώ. Στις γραμμές 314 – 325, είναι κώδικας μέσω του οποίου επιβεβαιώνεται η ορθή φόρτωση των δεδομένων πολεμικής εξειδίκευσης και μπορεί να αφαιρεθεί μελλοντικά.
  • 5. Ας δούμε όμως πώς και με τι τιμές αρχικοποιούμε το σώμα του πρώτου μενού επιλογών με το οποίο θα έρθει αντιμέτωπος ο παίκτης. Ξεκινώντας με τη SetUpMainMenu() η οποία διαδραματίζεται μεταξύ των γραμμών 1400 και 1444 : Εικόνα 1.Β.4 « το σώμα της SetUpMainMenu() » Τόσο το background όσο και τα εικονίδια τα οποία χρειάζονται για την απεικόνιση όλα φορτώνονται από τον υποκατάλογο Resources εντός του φακέλου Assets. Ο πίνακας mainMenuArr[] περιλαμβάνει τις εικόνες προς επιλογή μέσω του mouse ( New Campaign, Continue Campaign, Options και About ), ενώ ο πίνακας TMainMenuArr[] τις ίδιες εικόνες εντός πλαισίου όταν ο παίκτης πλοηγηθεί πάνω σε αυτές. Ο πίνακας currSelected[] είναι στη ουσία αυτός ο οποίος θα απεικονίζεται με κάθε update της GPU αφού ενδέχεται μία μόνο επιλογή να είναι επιλεγμένη.
  • 6. Εικόνα 1.Β.5 « Η επιλογή New Campaign ενεργή και μη » Στις γραμμές 1424 - 1434 γίνεται η αρχικοποίηση των Rect τα οποία θα φέρουν τις εικόνες αυτές αφού οι εικόνες που φέρουν πλαίσιο είναι σαφώς μεγαλύτερης διάστασης σε αντίθεση με αυτές χωρίς. Τέλος οι μεταβλητές τύπου Boolean αρχικοποιούνται όλες σε ψευδής αφού δεν θέλουμε κατά την έναρξη κάποια επιλογή να είναι προεπιλεγμένη. Σημείωση : ο τρόπος που ορίζονται τα Rects είναι πάλη σωστός συντακτικά αλλά τελείως λάθος αφού ενδέχεται το παιχνίδι να τρέχει κάθε φορά σε διαφορετική ανάλυση ή ακόμη σε τετράγωνες ή widescreen οθόνες (monitor). πιο σωστά προγραμματιστικά θα ήταν να είχε σχεδιαστεί εξαρχής μία ομάδα κλάσεων η οποίες να αναγνώριζαν την εκάστοτε ανάλυση και αναλόγως να διαμορφώνανε τα Rects αυτομάτως. Στη συνέχεια αναλύεται και ο τρόπος συμπεριφοράς της συνάρτησης MainGameMenu () που καλεί τα αντικείμενα και τις μεταβλητές που αρχικοποιήθηκαν στην SetUpMainMenu(), αφού ορίστηκαν παραπάνω οι εικόνες και οι μεταβλητές που χρειάζεται προκειμένου να επιστρέφεται και το σωστό αποτέλεσμα προς την οπτική του χρήστη. Παρακάτω αναλύεται και ο τρόπος χρήσης αυτών από τη MainGameMenu() η οποία κατά την εκτέλεση της εφαρμογής μας είναι η πρώτη συνάρτηση που εξισώνεται με την currentGUIMethod() η οποία όπως αναφέρθηκε είναι τύπου delegate και δέχεται συναρτήσεις χωρίς επιστρεφόμενες τιμές και χωρίς ορίσματα.
  • 7. Εικόνα 1.Β.7 « Η συνάρτηση MainGameMenu () »
  • 8. Στη γραμμή 348 ορίζεται η θέση του mouse πάνω στην επιφάνεια της οθόνης του χρήστη ( x, y ), ενώ στης γραμμές 350 – 356 μέσω της συνάρτησης - μέλος της κλάσης GUI την DrawTexture(Rect aRect, Texture aTexture) εμφανίζονται στην οθόνη οι εικόνες που ορίστηκαν εντός των ορίων των πλαισίων που τις αντιπροσωπεύουν (Rects). Όπως φαίνεται και από την εικόνα 1.Β.5 το αρχικό μας μενού από τελείται από τέσσερα επιλεγόμενα εικονίδια. Προκειμένου να γίνεται κάθε φορά αντιληπτό από το παιχνίδι μας τη επιλογή έδωσε ο παίκτης την εκάστοτε χρονική στιγμή, πρέπει να ακολουθείται και μία σειρά από συνθήκες ελέγχου για το πού βρίσκεται ο κέρσορας του mouse του παίκτη και αν ο παίκτης αποπειραθεί να πατήσει κάποιο πλήκτρο. Τέσσερα το πλήθος των επιλογών επομένως τέσσερεις και οι συνθήκες ελέγχου που πρέπει αν ελέγχονται την εκάστοτε χρονική στιγμή. Γραμμές 360 – 379, εντός της συνθήκης ελέγχου εξετάζεται μέσω της συνάρτησης Contains(Vector2 aVector2) μέλος της Rect, εάν οι συντεταγμένες του mouse βρίσκονται εντός του πλαισίου (Rect) της εικόνας την οποία και αντιπροσωπεύει. Αν η συνθήκη αυτή είναι όντως αληθής, τότε γίνεται η αναπαραγωγή ενός μικρού ηχητικού εφέ και η νέα εικόνα της επιλογής που συμπεριλαμβάνει την επιλογή εντός του μικρού πλαισίου “ζωγραφίζεται” ακριβώς από πάνω από τη προηγούμενη. Αμέσως μετά εφόσον επιλογή του παίκτη γίνει αντιληπτή και όπως ορίζει ο κώδικας η delegate μεταβλητή μας τώρα δείχνει σε μία νέα συνάρτηση με διαφορετικό σώμα, τη NewGameMenu() και αλλάζει όλο το γραφικό περιβάλλον. Αλλιώς γραμμές κώδικα 375 – 379 οι εικόνες παραμένουν ως έχει και δεν γίνεται καμία ενέργεια. Και ου το καθ’ εξής για κάθε μία από τις επιλογές του βασικού μενού του παιχνιδιού. Για τις επιλογές «Options» και «About» δεν γίνεται κάποιου είδους μετάβαση αφού δεν έχει ακόμη αποφασιστεί ούτε υλοποιηθεί η φύση των μενού τα οποία θα πρεσβεύουν. Η ίδια ακριβώς φιλοσοφία ακολουθείται και για τη φόρτωση του μενού τη μετάβαση στο μενού κατά το οποίο φορτώνουμε τον λογαριασμό ενός ήδη εγγεγραμμένου παίκτη στο παιχνίδι (γραμμές 381 – 395). Εν ολίγοις εντός του παιχνιδιού η επιλογή New Campaign μας οδηγεί στο περιβάλλον δημιουργίας λογαριασμού νέου χρήστη. Ενώ η επιλογή Load Campaign στο περιβάλλον κατά το οποίο ζητείται η φόρτωση ενός ήδη υπάρχοντος λογαριασμού και συνέχεια του. Με τους ίδιου ακριβώς τρόπους και μεθόδους εγκαθίστανται και τα επόμενα υπό μενού του παιχνιδιού, κάνοντας χρήση συναρτήσεων για αρχικοποίηση των εικόνων των μεταβλητών και των τιμών των συναρτήσεων που θα εξισώνονται με τη delegate μεταβλητή προκειμένου να επιτευχθεί η πλοήγηση ανάμεσα στα υπό μενού του παιχνιδιού. Οι συναρτήσεις αυτές εμφανίζονται στην εικόνα που ακολουθεί :
  • 9. Εικόνα 1.Β.8« Οι συναρτήσεις εγκατάστασης των γραφικών των μενού » Εντός των γραμμών κώδικα 1400 – 1604 περιγράφεται το περιεχόμενο προς εγκατάσταση των γραφικών που σχετίζονται με τα background των μενού, τα εικονίδια, και τις όποιες κινούμενες εικόνες ενδέχεται αυτά να περιέχουν. Στις γραμμές κώδικα 1608 – 1704 περιγράφεται ο τρόπος λειτουργίας των συναρτήσεων που χρησιμοποιεί το NewMainGUI.cs προκειμένου να κάνει χρήση των συναρτήσεων δημιουργία και φόρτωσης λογαριασμών χρηστών καθώς και της πολεμικής εξειδίκευσης αυτών, όπως αυτές αναλύθηκαν στην αμέσως προηγούμενη ενότητα (1.Α) του τρέχοντος κεφαλαίου.
  • 10. Εικόνα 1.Β.9« Συναρτήσεις εγκατάστασης και φόρτωσης δεδομένων λογαριασμών » Οι συναρτήσεις SaveMasteryPage(), SetUpUserSettings() και SetUpMissions() δεν συμβάλλουν κάπου καθώς η συμπεριφορά τους δεν έχει ορισθεί ακόμη. Θα γίνει όμως παρουσίαση των υπολοίπων συναρτήσεων που απεικονίζονται στην εικόνα 1.Β.9 αμέσως. Εικόνα 1.Β.10 « ανάλυση των συναρτήσεων της εικόνας 1.Β.9 » Στη γραμμή 1673 καλείται η συνάρτηση δημιουργία λογαριασμού χρήστη κάνοντας χρήση της κλάσης UserAccount, τα ορίσματα που περνάνε από το βασικό μενού είναι το όνομα του χρήστη και το password του. Η συνάρτηση αυτή λαμβάνει μέρος στις γραμμές κώδικα 470 -481 :
  • 11. Εικόνα 1.Β.11 « Δημιουργία λογαριασμού χρήστη » Εικόνα 1.Β.12 « Φόρτωση λογαριασμού χρήστη » Προκειμένου να φορτωθεί το ήδη υπάρχον Account του χρήστη δημιουργούμε ένα προσωρινό προφίλ, το οποίο μέσω της συνάρτησης LoadAccount() θα μεταφέρει τα δεδομένα του λογαριασμού από το σκληρό δίσκο και θα τα αποδώσει στη προσωρινή μεταβλητή UserProfileFly.H μεταβλητή αυτή είναι τύπου UserProfile και η LoadAccount όπως είχαμε ορίσει τροποποιημένη με τέτοιο τρόπο ώστε να επιστρέφει δεδομένα τύπου UserProfile. Μέσω της χρήσης της κονσόλας (γραμμή κώδικα 1691 ) επιβεβαιώνεται στο debugging η ορθότητα των επιστρεφόμενων τύπων δεδομένων. Παρακάτω η λειτουργία της SaveUserProfile :
  • 12. Εικόνα 1.Β.13 « Αποθήκευση λογαριασμού χρήστη » Όπως μπορούμε να διακρίνουμε και από την παρακάτω εικόνα : Εικόνα 1.Β.14 « Τμήμα κώδικα που καλείται η SaveUserProfile » Από τη γραμμή 948 αφού αποδοθεί η τρέχουσα πολεμική εξειδίκευση ( 939 -940 ) στη συνέχεα αποδίδονται στη προσωρινή μεταβλητή pageMasteries της οποία τα δεδομένα αντιγράφονται στα masteries του προσωρινού προφίλ χρήστη που έχει δημιουργηθεί για να τα φιλοξενήσει ( γραμμή 942 ). Τέλος ακολουθεί η αποθήκευση των αλλαγών του προφίλ στο σκληρό δίσκο.
  • 13. Σημείωση : οι γραμμές κώδικα 939 – 940 θα ήταν πιο πρέπον να συμπεριληφθούν εντός της συνάρτησης SaveMasterPage() η οποία όπως αναφέραμε ήταν άδεια. ( γραμμή κώδικα 1658 ) Τέλος οι συναρτήσεις LoadMasteriesPage() και ClearMasteriesPageOnLogout(). Η πρώτη χρησιμοποιείται ώστε να “τραβήξει” τη πολεμική εξειδίκευση του λογαριασμού με τον οποίο θα έχει κάνει login ο παίκτης και αποδίδει τα δεδομένα αυτά της πολεμικής εξειδίκευσης στις μεταβλητές που έχουν δημιουργηθεί για αυτό το σκοπό, ώστε αργότερα να γίνει χρήση τους από τη συνάρτηση του γραφικού μενού το οποίο είναι υπεύθυνο ώστε να τις αναπαραστήσει. Εικόνα 1.Β.15« Βοηθητική συνάρτηση φόρτωσης πολεμικής εξειδίκευσης »
  • 14. Εικόνα 1.Β.16« Κλήση και χρήση πολεμικής εξειδίκευσης » Προς αποσαφήνιση όρων, η MasteriesPage() εξισώνεται με τη delegate αφού είναι συνάρτηση η οποία είναι υπεύθυνη για την προβολή των δεδομένων πολεμικής εξειδίκευσης. Ενώ η LoadMasteriesPage(), απλώς εγκαθιστά τα δεδομένα προς απεικόνιση. Τέλος η ClearMasteriesPageOnLogout() :
  • 15. Εικόνα 1.Β.17« η λειτουργία της ClearMasteriesPageOnLogout() » Η λειτουργία που εκτελείται μέσω αυτής της συνάρτησης είναι να καθαρίζει τα προς προβολή δεδομένα της πολεμικής εξειδίκευσης, ώστε όταν ο παίκτης θελήσει να κάνει login με ένα διαφορετικό λογαριασμό να μην αφήνει πίσω του υπολείμματα από προηγούμενους λογαριασμούς. Συνεχίζουμε εντός του ίδιου αρχείου πάντα προκειμένου να αναλυθεί ο τρόπος λειτουργία και η χρησιμότητα των παρακάτω συναρτήσεων. Εντός του NewMainGUI.cs γραμμές κώδικα ( 1035 – 1335 ) :
  • 16. Εικόνα 1.Β.18« περισσότερες συναρτήσεις εντός του NewMainGUI.cs » Στις πρώτες δύο συναρτήσεις την SetUpAudioAndEffects() και SetUpFontsAndStyles(), ορίζονται οι ήχοι προτροπής για τις ενέργειες του παίκτη καθώς επίσης και των ηχητικών εφέ των διαφόρων επιλογών του μενού ενώ στη δεύτερη συνάρτηση ορίζεται το είδος και το πώς θα εμφανίζεται η γραμματοσειρά στα σημεία εκείνα που απαιτείται απεικόνιση μηνυμάτων στην οθόνη. Ακολουθούν οι PlayAnEnter() και η PlayAclick( bool rectFlag ), μέσω των οποίων αναπαράγεται ένα διαφορετικό ηχητικό εφέ όταν ο παίκτης πατάει κάποια επιλογή του μενού ή όταν επιθυμεί να αποθηκεύσει τις όποιες ανεργίες του. Το ίδιο ακριβώς και για την UpgradeOrDegradeSoundFX(). Εν συνεχεία οι συναρτήσεις UpgradeMastery(string astring ) και DegradeMastery(string astring ) μέσω των οποίων αυξομειώνονται οι τιμές των μεταβλητών πολεμικής εξειδίκευσης οι οποίες φορτώνονται από το λογαριασμό του χρήστη ( βλέπε εικόνα 1.Β.15, LoadUserMasteriesPage() ) προτού ξανά αποθηκευτούν. Οι UpgradeMastery και DegradeMastery καλούνται μέσω της UpgradeOrDegradeMastery(string astring). Η συνάρτηση ShowMasteryInfo(string message) η οποία το μοναδικό πράγμα που κάνει είναι να εμφανίζει τα στοιχεία της εκάστοτε επιλογής πολεμικής εξειδίκευσης ώστε ο χρήστης να παίρνει πληροφορίες μέσω αυτής και να πράττει αναλόγως. Τελειώνοντας με τις συναρτήσεις της εικόνας 1.Β18 οι υπό ρουτίνες των γραμμών 1317, 1323 και 1331 που χρησιμοποιούνται ώστε να υπάρχει κάποια χρονική ασφάλεια για τους χρόνους προσπέλασης μεταξύ των μεταβλητών και των αρχείων μας. Η λειτουργία τους είναι ορθή και μελλοντικά ενδέχεται να αλλάξει.
  • 17. Παρακάτω γίνεται η παρουσίαση του κώδικα των συναρτήσεων που μόλις αναφέραμε. Και αμέσως μετά θα ακολουθήσει εκτενέστερη ανάλυση για το ποιες κλάσεις χρειάστηκε να συγγραφούν και πώς εντέλει καταλήγει προκειμένου οι πληροφορίες των στοιχείων των μηνυμάτων των χαρακτηριστικών της πολεμικής εξειδίκευσης να παρουσιάζονται στην οθόνη του παίκτη μέσω της ShowMasteryInfo(string message). Εικόνα 1.Β.19 « οι συναρτήσεις SetUoAudioEffects και SetUpFontsAndStyles » Εντός της SetUpAudioAndEffects() γίνεται η αρχικοποίηση των μεταβλητών που ορίσαμε στις πρώτες γραμμές του script μας όπως φαίνονται και παρακάτω :