Linux Inside
90
ματίζεται η εκτέλεση του applet και ο φυλλομετρητής πραγ-
ματοποιεί έναν τελικό καθαρισμό της μνήμης προτού κλείσει.
Εμείς ανάλογα με το πότε θέλουμε να εκτελεστεί μία ενέρ-
γεια, καταχωρίζουμε τις κατάλληλες δηλώσεις στην αντίστοι-
χη από τις προηγούμενες μεθόδους.
Ανάλυση του κώδικα [3]
Η εφαρμογή μας αποτελείται από τέσσερις κλάσεις με βα-
σική την κλάση Paixnidi. Το applet αποτελεί ουσιαστικά ένα
αντικείμενο αυτής της κλάσης, μέσω της οποίας υλοποιείται
σχεδόν το σύνολο της λογικής και λειτουργίας του παιχνιδιού.
Επικουρικά χρησιμοποιούμε τις κλάσεις Raketa, Balaki,
Toublaki, οι οποίες αφορούν στα βασικά αντικείμενα του παι-
χνιδιού, δηλαδή στη ρακέτα με την οποία μπορούμε να απο-
κρούσουμε το μπαλάκι, ώστε αυτό να χτυπήσει τα τουβλάκια
και να κερδίσουμε βαθμούς. Κάθε κλάση διαθέτει μία δημι-
ουργό μέθοδο η οποία καλείται αυτόματα κατά τη δημιουργία
του αντίστοιχου αντικειμένου. Στη δημιουργό της κλάσης
Paixnidi καθορίζονται τα αντικείμενα της γραφικής διεπαφής
του applet, όπως ο καμβάς σχεδίασης των γραφικών του παι-
χνιδιού. Επίσης, ορίζονται οι ενέργειες που γίνονται με το πά-
τημα του πλήκτρου εκκίνησης του παιχνιδιού ή με το πάτημα
των πλήκτρων του πληκτρολογίου. Δημιουργούνται ακόμη τα
αντικείμενα του παιχνιδιού, δηλαδή η ρακέτα, το μπαλάκι και
τα 100 τουβλάκια. Ας αναλύσουμε τη λειτουργία των υπολοί-
πων μεθόδων της κλάσης Paixnidi. Η μέθοδος init() χρησιμο-
ποιείται για την αρχικοποίηση των αντικειμένων του παιχνιδι-
ού. Εκεί ορίζεται και η στρατηγική του τρόπου χρήσης της
προσωρινής μνήμης (buffer) της εφαρμογής. Το παιχνίδι μας
χρησιμοποιεί τη στρατηγική του διπλού buffer για να επιτευ-
χθεί ομαλότερη κίνηση και αντίδραση των αντικειμένων. Δη-
λαδή ενώ ένα καρέ προβάλλεται με βάση τα περιεχόμενα της
πρώτης «σελίδας» του buffer, το επόμενο «σχεδιάζεται» στη
δεύτερη «σελίδα» του buffer, ώστε να είναι έτοιμο για προβο-
λή και να μην υπάρχει καθυστέρηση στην προβολή των καρέ.
Η μέθοδος init() οποία εκτελείται μετά το φόρτωμα του applet
στο φυλλομετρητή και μέσω αυτής αρχικοποιούνται οι παρά-
μετροι εκτέλεσης του παιχνιδιού.
Η μέθοδος start() εκτελείται μετά την init() και ενεργοποιεί
ένα νέο νήμα εκτέλεσης (thread) του παιχνιδιού. H εφαρμογή
μας χρησιμοποιεί νήματα εκτέλεσης. Για κάθε νέο νήμα που
δημιουργείται, καλείται αυτόματα η μέθοδος run() στην οποία
ορίζονται οι επαναλαμβανόμενες ενέργειες που γίνονται στη
διάρκεια εκτέλεσης του παιχνιδιού. Η εκτέλεση του παιχνιδιού
είναι μία διαρκής επανάληψη, κατά την οποία υπολογίζονται
και σχεδιάζονται οι θέσεις και οι αντιδράσεις των αντικειμέ-
νων του παιχνιδιού, μέχρι να τελειώσει φυσιολογικά (δηλαδή,
μέχρι να καταστραφούν όλα τα τουβλάκια ή να χαθούν όλες
οι ζωές). Έτσι λοιπόν, η μέθοδος apodosi() αναλαμβάνει να
πραγματοποιήσει ελέγχους για να διαπιστωθεί αν σε κάθε κα-
ρέ έχουμε επαφή αντικειμένων και ζητά από τη μέθοδο
sxediasi() να αποδώσει τα αντικείμενα στον καμβά, στην «οθό-
νη», δηλαδή, όπου προβάλλεται η δράση του παιχνιδιού.
Η μέθοδος stop() ενεργοποιείται αυτόματα κατά την έξοδο
από την ιστοσελίδα του applet ή καλείται σε περίπτωση που
το παιχνίδι τελειώσει φυσιολογικά. Άλλες βοηθητικές μέθοδοι
αναλαμβάνουν τον έλεγχο επαφής αντικειμένων (π.χ.,
epafiBalakiRaketa()) και τις ενέργειες που γίνονται σε αυτή
την περίπτωση (π.χ., elegxosEpafisBalakiRaketa()).
Οι μέθοδοι των τριών βοηθητικών κλάσεων του παιχνιδιού
περιλαμβάνουν και αυτές δημιουργούς μεθόδους στις οποίες
γίνεται ο ορισμός των αρχικών τιμών των συντεταγμένων των
αντικειμένων του παιχνιδιού, το μέγεθος και τα όρια κίνησής
τους. Οι υπόλοιπες μέθοδοί τους έχουν ως σκοπό να απο-
φορτίσουν τον κώδικα της βασικής κλάσης από λεπτομέρειες
των αντικειμένων του παιχνιδιού, όπως η μετακίνηση, η σχε-
δίαση, η τροποποίηση ή η επιστροφή ιδιοτήτων των επιμέ-
ρους κλάσεων στη βασική (π.χ., getRect(), getKatastrafike()
κ.ά.).
Διανομή του applet [4]
Τα Java applets μπορούν να εκτελεστούν σε περιβάλλον
φυλλομετρητή με δύο τρόπους. Ο πρώτος είναι εισάγοντας
την HTML ετικέτα <applet> στον κώδικα της ιστοσελίδας που
περιλαμβάνει το applet μας. Αυτός ο τρόπος διανομής είναι
απλούστερος, αλλά συνάμα και πιο επικίνδυνος, αφού περιο-
ρίζει κατά πολύ την ασφαλή εκτέλεση του applet. Ο δεύτερος
και πιο ασφαλής τρόπος είναι χρησιμοποιώντας το πρωτό-
κολλο Java Network Launch Protocol (JNLP) [5]. Σε συνθήκες
πραγματικών εφαρμογών, όπου η ασφάλεια είναι κρίσιμη για
κάθε πληροφοριακό σύστημα, αυτός είναι ο προτεινόμενος
και ενδεδειγμένος τρόπος εκτέλεσης ενός applet σε περιβάλ-
λον φυλλομετρητή. Με μία μικρή αναζήτηση στον Παγκόσμιο
Ιστό μπορούμε να βρούμε πληθώρα παραδειγμάτων για τον
Linux Labs - Java
Διάλογος εξαγωγής ως αρχείο JAR.
4
Η εφαρμογή μας αποτελείται από τέσσερις
κλάσεις με βασική την κλάση Paixnidi. Το applet
αποτελεί ουσιαστικά ένα αντικείμενο αυτής της
κλάσης, μέσω της οποίας υλοποιείται σχεδόν το
σύνολο της λογικής και λειτουργίας του
παιχνιδιού.