Transcript φυλλο εργασιας 3
ΕΙΔΙΚΑ ΘΕΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 03
Σε αυτό το ΦΕ θα μάθουμε πώς αναγνωρίζουμε αν είμαστε σε επαφή με κάποιον άλλο ηθοποιό (actor) και στη συνέχεια να τον εξαφανίζουμε από τον κόσμο (world) και πώς να κάνουμε τον κώδικά μας πιο ευανάγνωστο χρησιμοποιώντας μεθόδους. 1.
2.
Ανοίγουμε το σενάριο που δημιουργήσαμε στο ΦΕ02 Θα προσθέσουμε μία νέα κλάση που θα την ονομάσουμε
Worm
. Η κλάση
Worm
θα προέρχεται και αυτή από την κλάση
Αctor
. Δεξί κλικ στην κλάση
Actor
Επιλέγουμε
New Subclass
Τα ονόματα των κλάσεων έχουμε συμφωνήσει να ξεκινούν με κεφαλαίο γράμμα Στο πλαίσιο διαλόγου που εμφανίζεται γράφουμε το όνομα της κλάσης και επιλέγουμε για εικόνα τη “worm.png” Στη συνέχεια κλικ στο
Οκ
Βλέπουμε ότι η νέα κλάση προστέθηκε αλλά εμφανίζεται με πλάγιες ρίγες Αυτό σημαίνει ότι θα πρέπει να κάνουμε
Compile
(
Μεταγλώττιση
) για να ισχύουν οι αλλαγές Η κλάση Worm δεν θα έχει κώδικα. Δηλαδή τα σκουλήκια θα παραμένουν στο σημείο που τοποθετήσαμε 3.
Θα επεκτείνουμε τον κώδικα της κλάσης
Crab
ώστε όταν ένα καβούρι έρθει σε επαφή με ένα σκουλήκι να τρώει το σκουλήκι. Για το σκοπό αυτό ανοίγουμε τον κώδικα της κλάσης Crab που είναι ως εξής
4.
Στο τέλος της μεθόδου act() θα προσθέσουμε κώδικα που θα ελέγχει αν το καβούρι έρχεται σε επαφή με κάποιο σκουλήκι θα χρησιμοποιήσουμε τη μέθοδο
getOneObjectAtOffeset
() Η μέθοδος αυτή δέχεται τρεις παραμέτρους Χ – η Χ συντεταγμένη σχετική με τη θέση του αντικειμένου Υ— η Υ συντεταγμένη σχετική με τη θέση του αντικειμένου Cls – η κλάση του αντικειμένου που ψάχνουμε Και επιστρέφει Ένα αντικείμενο που βρίσκεται στη συγκεκριμένη θέση ή null αν δεν βρει τίποτα Επειδή θέλουμε να δούμε τι υπάρχει ακριβώς από κάτω μας θα βάλουμε
μηδέν
στις δύο πρώτες και στην τρίτη την κλάση
Worm
που μας ενδιαφέρει Το αποτέλεσμα που θα μας επιστρέψει η συνάρτηση πρέπει να το αποθηκεύσουμε κάπου. Για το σκοπό αυτό δημιουργούμε μία μεταβλητή worm με τη δήλωση
Actor worm;
Ο κώδικας που θα γράψω έχει ως εξής:
Actor worm; worm = getOneObjectAtOffeset(0,0,Worm.class);
Προσθέστε τον κώδικα και μεταγλωττίστε. Βάλτε μερικά worms και ένα crab. Εκτελέστε το σενάριο. Τι παρατηρείτε; Χρειάζεται ακόμη κάτι για να φτάσουμε στο επιθυμητό αποτέλεσμα
5.
Χρειάζεται να ελέγξουμε αν υπάρχει σκουλήκι στη θέση και αν ναι να το διαγράψουμε από τον κόσμο. Η τιμή που επιστρέφει η συνάρτηση αν δεν βρει σκουλήκι είναι
null
. Έτσι λοιπόν αν η τιμή δεν είναι
null
σημαίνει ότι υπάρχει σκουλήκι και πρέπει να το διαγράψουμε. Ο κώδικας είναι ο παρακάτω
If (worm != null) { } World world; world=getWorld(); world.removeObject(worm);
6.
Μεταγλωττίστε το σενάριο. Τοποθετείστε μερικά σκουλήκια και ένα καβούρι και δοκιμάστε την εφαρμογή. 7.
O κώδικας που χρησιμοποιούμε στη μέθοδο act() χωρίζεται σε δύο τμήματα. Το πάνω τμήμα του κώδικα ασχολείται με την κίνηση και το κάτω με το φάγωμα των σκουληκιών Θα γράψουμε δύο μεθόδους για την συμπεριφορά. Τη μέθοδο moveAndTurn() και τη μέθοδο eat(), τις οποίες θα παραθέσουμε μετά τη μέθοδο act(). Η μέθοδος act() πάρει την παρακάτω μορφή:
public void act() { moveAndTurn(); } eat();
Οι δύο μέθοδοι που θα γράψουν δεν έχουν παραμέτρους και δεν επιστρέφουν τιμές. Μπορούν λοιπόν να δηλωθούν όπως η μέθοδος act(). Προσπαθήστε να γράψετε τις δύο μεθόδους και δείτε πόσο πιο ευανάγνωστος γίνεται ο κώδικάς μας!!