PC Master
138
XM, IT, S3M και VOC. Μπορείτε να επιλέξε-
τε το αγαπημένο σας MP3 για να το χρησι-
μοποιήσετε στο παιχνίδι σας. Προτείνεται
πάντως, για να διατηρήσετε το πρόγραμμά
σας ελαφρύ, να το μετατρέψετε σε αρχείο
OGG. Υπάρχουν πολλά δωρεάν εργαλεία
για audio conversion εάν δεν έχετε ήδη
κάποιο εγκατεστημένο στον υπολογιστή
σας (όπως, για παράδειγμα, το Free Audio
Converter, ελαφρύ και εύκολο στο χρήση:
dvideosoft.com/products/
dvd/Free-Audio-Converter.htm). Όταν
έχετε το αρχείο στα χέρια σας, βρείτε την
επιλογή Audio>Music στο Project Tree,
κάντε δεξί κλικ στη λέξη Music και επιλέξ-
τε Add audio file(s). Βρείτε το αρχείο στον
υπολογιστή σας και επιλέξτε το. Θα δείτε
ότι θα προστεθεί στο panel σας – και μάλι-
στα παίρνοντας ένα αυτόματο ScriptName
που αρχίζει από το γράμμα a. Αν επιθυμεί-
τε, μπορείτε να α λλάξετε το ScriptName
αυτό σε κάτι που θα θυμάστε ευκολότερα
ή πιο σύντομο. Μπορείτε επίσης να δοκι-
μάσετε να το ακούσετε για να δείτε αν το
πρόγραμμα το αναγνωρίζει σωστά.
Επιστρέφετε στο Living Room και ορίζε-
τε κατά τα γνωστά το hotspot του στερε-
οφωνικού σας. Του δίνετε Description,
Name και περιγραφή με το Look at
hotspot. Έπειτα, αν υποθέσουμε ότι το
μουσικό αρχείο που εισαγάγατε νωρίτερα,
πήρε το ScriptName aYmnosAEK, επιλέγε-
τε το Interact Hotspot και πληκτρολογεί-
τε το παρακάτω:
aYmnosAEK.Play();
Ήρθε η ώρα να κάνετε ένα save και να
τρέξετε το PC Master’s Saga, ώστε να δεί-
τε αν τα έχετε κάνει όλα σωστά. Πράγμα-
τι, κάνοντας Use πάνω στις πόρτες μπο-
ρείτε να μπαινοβγαίνετε από το σπίτι χω-
ρίς πρόβλημα, επομένως ως προς αυτό το
κομμάτι όλα πήγαν δεξιά. Δοκιμάστε και
το στέρεο: το ανάβετε και η μουσική παί-
ζει. Όλα καλά λοιπόν; Όχι ακριβώς. Αυτό
που κάνατε δεν ήταν πολύ έξυπνος προ-
γραμματισμός, αφού τώρα δεν μπορείτε
να την κλείσετε, ενώ αν ξανακάνετε use
πάνω στο στερεοφωνικό, θα παρατηρήσε-
τε ότι ξεκινά να παίζει και πάλι από την
αρχή, κάτι που δεν είναι η επιθυμητή λει-
τουργία ενός ηχοσυστήματος. Επομένως,
ο κώδικάς σας μάλλον χρειάζεται λίγη πε-
ρισσότερη δουλειά.
Η ενέργεια που θα πραγματοποιήσετε
στη συνέχεια είναι εξαιρετικά χρήσιμη,
αφού θα δείτε την πρώτη σας συνθήκη
ελέγχου. Η εντολή που θα δώσετε στο
πρόγραμμά σας είναι η εξής: «Αν ο παί-
κτης κάνει Use πάνω στο στερεοφωνικό,
εξέτασε αν είναι σε λειτουργία. Αν δεν εί-
ναι, άναψέ το. Αν είναι, σβήσε το». Υπάρ-
χουν πολλοί τρόποι για να πραγματοποιη-
θεί αυτό. Εμείς θα κάνουμε χρήση μίας ει-
δικής τιμής που ονομάζεται Global
Variable. Οι Global Variables είναι μετα-
βλητές που ορίζονται από τον παίκτη,
ώστε να μπορεί να ελέγχει τις τιμές τους
από οποιοδήποτε σημείο του κώδικα και
αναλόγως να δώσει στο πρόγραμμα την
κατάλληλη εντολή. Για παράδειγμα, αν ο
χαρακτήρας σας έχει τη δυνατότητα να
κάνει ντους, λογικά θα θέλετε να το κά-
νει μόνο μία φορά και όχι κάθε φορά που
πατάει το Use Icon πάνω στην ντουζιέρα.
Έτσι, ορίζετε μία σχετική μεταβλητή,
φροντίζετε, όταν γίνει το ντους, να αλλά-
ξει από 0 σε 1 και τροποποιείτε τον κώδι-
κά σας έτσι ώστε να μην επιτρέπει στον
παίκτη να μπει στην ντουζιέρα εάν η με-
ταβλητή σας έχει την τιμή 1. Μπερδευτή-
κατε; Είναι πιο απλό απ’ ό,τι ακούγεται
και θα το δούμε αμέσως στην πράξη.
Εντοπίστε τη φράση Global Variables
στο Project Tree και κάντε διπλό κλικ πά-
νω της. Στον –προς το παρόν άδειο– πίνα-
κα που βλέπετε αριστερά, κάντε δεξί κλικ
και επιλέξτε Add new variable. Είναι ση-
μαντικό να δώσετε ένα όνομα που να ορί-
ζει σαφώς σε τι αναφέρεται η μεταβλητή
σας, ειδικά εάν η χρήση της πρόκειται να
ισχύει σε όλο το φάσμα του παιχνιδιού,
αντί για ένα συγκεκριμένο δωμάτιο, όπως
στην προκειμένη περίπτωση. Τη συγκεκρι-
μένη θα την ονομάσουμε
LivingRoomStereoOn και θα της δώσουμε
ως αρχική τιμή 0. Αφού τη στιγμή που ξε-
κινάει το παιχνίδι το στερεοφωνικό είναι
σβηστό, αντιλαμβανόμαστε ότι όποτε η
τιμή της μεταβλητής μας είναι μηδενική,
θα πρέπει ο κώδικάς μας να εξασφαλίζει
ότι θα είναι κλειστό. Ως είδος της μετα-
βλητής αφήνουμε το προεπιλεγμένο int,
που δηλώνει ακέραιο αριθμό. Επιστρέ-
φουμε στο Living Room και στη συνάρτη-
ση hStereo_Interact και πληκτρολογούμε
τα παρακάτω:
if (LivingRoomStereoOn==0) { // Αν το
στερεοφωνικό είναι σβηστό
aYmnosAEK.Play(); // άναψέ το
LivingRoomStereoOn=1; // Όρισε το
στερεοφωνικό ως αναμμένο
}
else { // διαφορετικά, αν είναι
αναμμένο
aYmnosAEK.Stop(); // σβήσε το
LivingRoomStereoOn=0; // Όρισε το
στερεοφωνικό ως σβηστό
}
Σε αυτή την περίπτωση προτιμήσαμε να
συμπεριλάβουμε σχόλια στον κώδικά μας.
Αυτό είναι γενικά μία καλή ιδέα σε περί-
πτωση που στο πρόγραμμα δουλεύουν
περισσότερα από ένα άτομα και είναι
απαραίτητο να γίνεται κατανοητό με μία
ματιά, αλλά ακόμα κι αν εργάζεστε μόνοι
σας, δεν είναι πάντοτε εύκολο να ανα-
γνωρίζετε αυτό που γράψατε μήνες πριν.
Οτιδήποτε έπεται των δύο slash (//) δεν
εκτελείται, επομένως γράψτε άφοβα. Πα-
ρατηρήστε επίσης ότι οι εντολές που
εκτελούνται μόνο αν ισχύει η συνθήκη
που εξετάζουν τα if και else περικλείο-
νται σε { }. Τέλος, προσέξτε πως όταν
εξετάζετε αν μία μεταβλητή ισούται με
μία τιμή, χρησιμοποιούνται δύο σύμβολα
Εισάγοντας την εικόνα του αντικειμένου.
Επιλέγουμε το sprite που αντιστοιχεί στο inventory item που δημι-
ουργούμε.
5
6