Διαδρομές
/
Crystal
Crystal
/
Ασκήσεις
/
Κυνηγός κρυστάλλων
Κυνηγός κρυστάλλων

Κυνηγός κρυστάλλων

Άσκηση εκμάθησης

Εισαγωγή

Η Crystal έχει έναν τύπο γνωστό ως Bool. Αντιπροσωπεύει τις τιμές true και false.

Λογικοί τελεστές

Η Crystal έχει τρεις λογικούς τελεστές (!, ||, &&), που συνδυάζουν λογικές τιμές και φτιάχνουν εκφράσεις που παράγουν διαφορετικές τιμές.

And(&&)

Ο τελεστής and στη Crystal αντιπροσωπεύεται από το && και επιστρέφει true αν και οι δύο τιμές είναι true. Αλλιώς, επιστρέφει false. Όταν χρησιμοποιείς τον τελεστή and, μία λογική τιμή τοποθετείται στα δεξιά του && και μία άλλη στα αριστερά.

true && true
# => true

true && false
# => false

Or(||)

Ο τελεστής or στη Crystal αντιπροσωπεύεται από το || και επιστρέφει true αν τουλάχιστον μία από τις τιμές που δίνονται είναι true. Αν και οι δύο τιμές είναι false, τότε επιστρέφει false. Όταν χρησιμοποιείς τον τελεστή or, μία λογική τιμή πρέπει να τοποθετείται στα δεξιά του || και μία άλλη στα αριστερά.

true || true
# => true

true || false
# => true

false || false
# => false

Not(!)

Ο τελεστής not στη Crystal αντιπροσωπεύεται από το ! και επιστρέφει true αν η δεδομένη λογική τιμή είναι false και επιστρέφει false αν δοθεί true. Όταν χρησιμοποιείς τον τελεστή not, μία λογική τιμή πρέπει να τοποθετείται μετά τον τελεστή (!).

!true
# => false

!false
# => true

Χρήση παρενθέσεων(())

Όταν δουλεύεις με λογικές τιμές, μπορείς να χρησιμοποιήσεις παρενθέσεις για να αποφασίσεις ποιες λογικές τιμές θα αξιολογηθούν πρώτες. Το αποτέλεσμα μπορεί να διαφέρει ανάλογα με το πώς χρησιμοποιούνται οι παρενθέσεις. Στη Crystal, ό,τι βρίσκεται μέσα στις παρενθέσεις αξιολογείται πρώτα.

true && false && false || true
# => true

true && false && (false || true)
# => false

Εφόσον ό,τι βρίσκεται μέσα στις παρενθέσεις αξιολογείται πρώτα, ο τελεστής not θα εφαρμοστεί στην έκφραση μέσα στις παρενθέσεις στο παρακάτω παράδειγμα.

!true && false
# => false

!(true && false)
# => true
Note

Να χρησιμοποιείς παρενθέσεις μόνο όταν επηρεάζουν το αποτέλεσμα. Αλλιώς, πρέπει να παραλείπονται.

Οδηγίες

Βρίσκεσαι στη διαδικασία ανάπτυξης του νέου, πολυαγαπημένου παιχνιδιού Crystal Hunter. Στο παιχνίδι, είσαι ένας χαρακτήρας που κινείται τριγύρω και μαζεύει κρυστάλλους. Ο παίκτης κερδίζει μαζεύοντας όλους τους κρυστάλλους. Αν ο παίκτης έρθει σε επαφή με έναν ληστή, θα χάσει όλους τους κρυστάλλους του και το παιχνίδι. Υπάρχει μια εξαίρεση σε αυτόν τον κανόνα: ο παίκτης μπορεί να έχει ενεργό power-up που τον κάνει αόρατο στους ληστές.

Ο στόχος σου είναι να γράψεις κάποιους κανόνες που θα χρησιμοποιηθούν στο παιχνίδι.

1. Όρισε αν ο χαρακτήρας παίρνει πόντους μπόνους

Στο παιχνίδι, ο χαρακτήρας παίρνει πόντους μπόνους αν αγγίξει έναν ληστή ενώ έχει ένα power-up.

Όρισε τη μέθοδο Rules#bonus_points? που παίρνει δύο ορίσματα (αν ο χαρακτήρας έχει ενεργό power-up και αν ο χαρακτήρας αγγίζει έναν ληστή) και επιστρέφει μια τιμή Boolean (λογική τιμή) που δείχνει αν ο χαρακτήρας θα πάρει πόντους μπόνους. Η μέθοδος θα πρέπει να επιστρέφει true μόνο αν ο χαρακτήρας έχει ενεργό power-up και αγγίζει έναν ληστή, και false σε κάθε άλλη περίπτωση.

Rules.new.bonus_points?(false, true)
# => false

2. Όρισε αν ο χαρακτήρας σκοράρει

Ο παίκτης κερδίζει πόντους στο παιχνίδι όταν μαζεύει έναν κρύσταλλο ή ένα power-up.

Όρισε τη μέθοδο Rules#score?, η οποία παίρνει δύο ορίσματα (αν ο χαρακτήρας αγγίζει ένα power-up και αν ο χαρακτήρας αγγίζει έναν κρύσταλλο) και επιστρέφει μια τιμή Boolean που δείχνει αν ο χαρακτήρας σκόραρε ή όχι. Η μέθοδος θα πρέπει να επιστρέφει true αν ο χαρακτήρας αγγίζει ένα power-up ή έναν κρύσταλλο και να επιστρέφει false σε κάθε άλλη περίπτωση.

Rules.new.score?(true, true)
# => true

3. Όρισε αν ο χαρακτήρας χάνει

Όρισε τη μέθοδο Rules#lose?, η οποία παίρνει δύο ορίσματα (αν ο χαρακτήρας έχει ενεργό power-up και αν ο χαρακτήρας αγγίζει έναν ληστή) και επιστρέφει μια τιμή Boolean που δείχνει αν ο χαρακτήρας χάνει ή όχι. Η μέθοδος θα πρέπει να επιστρέφει true αν ο χαρακτήρας αγγίζει έναν ληστή και δεν έχει ενεργό power-up και να επιστρέφει false σε κάθε άλλη περίπτωση.

Rules.new.lose?(false, true)
# => true

4. Όρισε αν ο χαρακτήρας κερδίζει

Όρισε τη μέθοδο Rules#win?, η οποία παίρνει τρία ορίσματα (αν ο χαρακτήρας έχει μαζέψει όλους τους κρυστάλλους, αν ο χαρακτήρας έχει ενεργό power-up και αν ο χαρακτήρας αγγίζει έναν ληστή) και επιστρέφει μια τιμή Boolean που δείχνει αν ο χαρακτήρας κερδίζει ή όχι. Η μέθοδος θα πρέπει να επιστρέφει true αν ο χαρακτήρας έχει μαζέψει όλους τους κρυστάλλους και δεν έχει χάσει με βάση τα ορίσματα που ορίστηκαν στο μέρος 3, και να επιστρέφει false σε κάθε άλλη περίπτωση.

Rules.new.win?(false, true, false)
# => false
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Crystal Exercism

Έτοιμος να ξεκινήσεις την άσκηση Κυνηγός κρυστάλλων;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Crystal με 26 έννοιες142 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.