Αλληλεπίδραση αντικειμένων

Το κεφάλαιο σε pdf.
Κατεβάστε το

Ερωτήσεις Κεφαλαίου
Απαντήστε τις

Στο Κεφάλαιο 4 προγραμματίσαμε ένα ποντίκι ώστε να κινείται με τυχαίο τρόπο. Σε αυτό το κεφάλαιο θα προσθέσουμε ένα τυράκι και θα πρέπει όταν το ποντίκι ακουμπήσει το τυράκι το τυράκι να εξαφανίζεται (τρώγεται).

Μια μορφή μπορεί να ανιχνεύσει αν ακουμπάει μια άλλη μορφή με τη μέθοδο isTouching().

Εισάγετε μια νέα μορφή (Actor) με όνομα cheese και εικόνα pizza_cheese.png. Η μορφή αυτή δεν θα έχει κάποιο πρόγραμμα θα προγραμματίσουμε τη μορφή mouse να την εξαφανίζει όταν την ακουμπήσει. Για να καταλάβει η μορφή mouse αν ακουμπάει μια άλλη μορφή υπάρχει η μέθοδος isTouching(). Για να περιορίσουμε την εντολή ώστε να ανιχνεύει αν αυτό που ακούμπησε ήταν αντικείμενο της κλάσης cheese μπορούμε να χρησιμοποιήσουμε τη μέθοδο ως εξής:

isTouching(cheese.class)

Kώδικας 5.1:

//Random movement
move(1);
if (Greenfoot.getRandomNumber(100)>50)
{
    turn(90);
}
//Check if it is touching cheese
if (isTouching(cheese.class))
{
System.out.println("Touching");
}

Μια μορφή μπορεί να εξαφανίσει τις μορφές τις οποίες ακουμπάει με τη μέθοδο removeTouching().

Θα δείτε ότι την πρώτη φορά που θα ακουμπήσει η μορφή mouse την μορφή cheese θα εμφανιστεί ένα παράθυρο με τη λέξη Touching, από εκείνη τη στιγμή και μετά στο παράθυρο θα εμφανίζεται η λέξη κάθε φορά που το ποντίκι ακουμπάει το τυράκι.

Αντί να εμφανίζεται η λέξη Touching το ποντίκι θα έπρεπε να εξαφανίζει το τυράκι. Αυτό μπορεί να γίνει με την εντολή removeTouching που επίσης θα χρησιμοποιηθεί με όρισμα cheese.class.

Kώδικας 5.2:

//Random movement
move(1);
if (Greenfoot.getRandomNumber(100)>50)
{
    turn(90);
}
//Check if it is touching cheese
if (isTouching(cheese.class))
{
removeTouching(cheese.class);
}

Μπορούμε να χρησιμοποιήσουμε δικές μας μεθόδους για τις ομάδες των εντολών που επιτελούν μια συγκεκριμένη λειτουργία. Οι μέθοδοι εφόσον ασχολούνται μόνο με την κίνηση και δεν υπολογίζουν κάποιο αποτέλεσμα μπορούν να μην επιστρέφουν τίποτε. Έτσι δηλώνονται με void ονομα_συνάρτησης().

Οι νέες μέθοδοι θα δηλωθούν έξω από το σώμα της act(). Είναι η πρώτη φορά που θα γράψουμε κώδικα έξω από τη μέθοδο act οπότε θα χρειαστεί ιδιαίτερη προσοχή.

Kώδικας 5.3:

public void act() 
    {
        // Add your action code here.
        randomMove();
        touchingCheese();
    }
void randomMove(){
        move(1);
        if (Greenfoot.getRandomNumber(100)>50)
        {
            turn(90);
        }
    }
void touchingCheese(){
        if (isTouching(cheese.class))
        {
            removeTouching(cheese.class);
        }
    }

Για να δημιουργήσουμε αντικείμενα μιας κλάσης, όπως θυμάστε, πατάμε δεξί κλικ στο εικονίδιο της κλάσης και στη συνέχεια new όνομα_κλάσης(). Έτσι, εμφανίζεται ένα αντικείμενο της επιλεγμένης κλάσης και το τοποθετούμε πάνω στο πλέγμα. Αυτό μπορεί να γίνει και με την εντολή addObject(), με την εντολή αυτή δεν θα χρειάζεται να βάζουμε τα αντικείμενα χειροκίνητα κάθε φορά αλλά θα εμφανίζονται αυτόματα κάθε φορά που πατάμε Compile. Η εντολή addObject εκτελείται μέσα στον constructor του world (δεξί κλικ στην υποκλάση του world και επιλέγετε Open Editor).

Η εντολή addObject() συντάσσεται ως εξής:

addObject(new όνομα_κλάσης(),θέση_x,θέση_y);

Χρησιμοποιούμε την εντολή addObject για να εισάγουμε αντικείμενα στον κόσμο με αυτόματο τρόπο

Με το new όνομα_κλάσης() δημιουργείται ένα αντικείμενο αυτής της κλάσης και με την εντολή addObject το αντικείμενο αυτό εισάγεται σε συγκεκριμένη θέση στο πλέγμα.

Για παράδειγμα, μπορούμε να κάνουμε το ποντίκι να εμφανίζεται στη μέση της οθόνης κάθε φορά.

Kώδικας 5.4:

super(8, 8, 60); 
addObject(new mouse(), 4, 4);

Επέκταση 5.1

Μπορείτε να εισάγετε αυτόματα ένα τυράκι, σε συγκεκριμένη θέση; Π.χ. στην θέση 1,6.

Επέκταση 5.2

Μπορείτε να εισάγετε αυτόματα τρία τυράκια, σε τυχαίες θέσεις; Θυμηθείτε τη μέθοδο Greenfoot.getRandomNumber().

Επέκταση 5.3

Μπορείτε να βάλετε τις εντολές addObject() που χρησιμοποιήσατε σε μια νέα μέθοδο με όνομα addObjects; Έτσι ο constructor της bkg θα έχει μόνο δύο εντολές, την super και την addObjects.

Επέκταση 5.4

Προσθέστε το αντικείμενο lemur με εικόνα lemur.png. Προγραμματίστε το να κινείται και αυτό με τυχαίο τρόπο και όποτε αγγίζει το ποντίκι να το τρώει.
comments powered by Disqus