8. Σκορ

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

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

Το επόμενο βήμα είναι να μετρήσουμε σε πόσα αστεράκια έκανε κλικ ο χρήστης. Έχουμε ήδη δει πώς υλοποιούμε το σκορ (Κεφάλαιο 6) αλλά σε αυτό το παιχνίδι χρειάζεται να γίνει αρκετά διαφορετικά ώστε ο χρήστης να βλέπει το σκορ στην οθόνη του. Αν το αστέρι εξαφανίζεται την πρώτη φορά που ο χρήστης το πατάει με το ποντίκι, δεν έχει νόημα να μετρήσουμε το σκορ. Για αυτό τον λόγο το σκορ θα το μετρήσουμε αφού πρώτα υλοποιήσουμε την επέκταση 7.2. Μια υλοποίηση είναι να αντικατασταθεί η εντολή getWorld().removeObject(this) με τις εξής εντολές:

Kώδικας 8.1:

int worldWidth=getWorld().getWidth();
int worldHeight = getWorld().getHeight();
setLocation(Greenfoot.getRandomNumber(worldWidth), Greenfoot.getRandomNumber(worldHeight));

Σε μια μεταβλητή υπολογίζουμε το πλάτος του κόσμου μας (worldWidth) και το ύψος του (worldHeight). Μετά χρησιμοποιούμε την εντολή setLocation για να μετακινηθεί το αστέρι σε μια τυχαία θέση με μέγιστη τιμή το worldWidth όσον αφορά τον άξονα x, και σε μια τυχαία θέση με μέγιστη τιμή το worldHeight όσον αφορά τον άξονα y.

Ξέρουμε ότι το πλάτος του κόσμου (width) είναι 600 και το ύψος (height) 400 όμως δεν χρησιμοποιούμε αυτούς τους αριθμούς γιατί μπορεί να θέλουμε αργότερα να τους αλλάξουμε (π.χ. αν αποφασίσουμε ότι η εφαρμογή μας απευθύνεται σε κινητά). Με την προτεινόμενη υλοποίηση μπορούμε απλά να αλλάξουμε τις διαστάσεις στον κώδικα του World και δεν θα χρειαστεί να κάνουμε περαιτέρω αλλαγές.

Επειδή το σκορ είναι το ίδιο σε όλο το παιχνίδι και δεν έχει κάθε αστέρι το δικό του θα χρησιμοποιήσουμε τη λέξη-κλειδί static για να ορίσουμε την μεταβλητή score. Δηλώνοντας την μεταβλητή score σαν στατική η τιμή της μεταβλητής δεν συνδέεται με το αντικείμενο της κλάσης, αλλά με την ίδια την κλάση. Δεν θέλουμε η μεταβλητή score να είναι ορατή από άλλες κλάσεις, γιατί θέλουμε να αλλάζει μόνο όταν ένα αστέρι αλλάζει θέση. Τέλος η μεταβλητή score θα είναι ακέραια, δηλαδή το σκορ δεν θα έχει δεκαδικά ψηφία. Τέλος η μεταβλητή score αρχικά είναι 0.

Ορίζουμε λοιπόν την μεταβλητή score ως εξής:

Kώδικας 8.2:

private static int score = 0;

Η μεταβλητή score αυξάνεται κατά 1 όταν το αστέρι αλλάζει θέση. Για να δούμε την τιμή της μεταβλητής score σε αυτή την φάση θα χρησιμοποιήσουμε την εντολή System.out.println(score); που θα εμφανίσει ένα παράθυρο με το σκορ. Σίγουρα θα ήταν καλύτερο το σκορ να εμφανίζεται μέσα στον κόσμο όπως γίνεται σε όλα τα παιχνίδια και όχι σε ξεχωριστό παράθυρο. Αυτό θα το κάνουμε στη συνέχεια.

Kώδικας 8.3:

setLocation(Greenfoot.getRandomNumber(worldWidth), Greenfoot.getRandomNumber(worldHeight));
score = score + 1;
System.out.println(score);
comments powered by Disqus