Διαδρομές
/
PHP
PHP
/
Ασκήσεις
/
Η Παρείσφρηση της Annalyn
Η Παρείσφρηση της Annalyn

Η Παρείσφρηση της Annalyn

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

Εισαγωγή

Boolean

Ο τύπος bool (συντομογραφία του Boolean, δηλαδή της λογικής τιμής) έχει μόνο δύο τιμές: true και false. Στον κώδικα, οι τιμές true και false μπορούν να γραφτούν με πεζά ή κεφαλαία γράμματα, χωρίς διαφορά.

<?php

$value_is_true = true;
$value_is_false = false;

Οι τιμές Boolean χρησιμοποιούνται συχνά σε λογικές εκφράσεις ως αποτέλεσμα ενός τελεστή και έπειτα σε δομές ελέγχου.

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

Υπάρχουν αρκετοί λογικοί τελεστές:

  • !$a: επιστρέφει true αν το $a δεν είναι true
  • $a && $b: επιστρέφει true αν το $a και το $b είναι και τα δύο true
  • $a || $b: επιστρέφει true αν το $a ή το $b είναι true
Caution

Υπάρχουν και οι τελεστές and και or, οι οποίοι είναι συμπληρωματικοί των && και || αντίστοιχα. Δεν συμπεριφέρονται με τον ίδιο τρόπο όπως οι && και || και μπορεί να δώσουν απροσδόκητα αποτελέσματα, γι' αυτό και η χρήση τους αποθαρρύνεται.

Οδηγίες

Σε αυτή την άσκηση θα υλοποιήσεις τη λογική της αποστολής για ένα νέο παιχνίδι RPG που αναπτύσσει ένας φίλος. Ο κεντρικός χαρακτήρας του παιχνιδιού είναι η Annalyn, ένα γενναίο κορίτσι με ένα άγριο και πιστό σκύλο. Δυστυχώς, η καταστροφή χτυπά, καθώς ο καλύτερός της φίλος απήχθη ενώ έψαχνε για μούρα στο δάσος. Η Annalyn θα προσπαθήσει να βρει και να ελευθερώσει τον καλύτερό της φίλο, παίρνοντας προαιρετικά και τον σκύλο της μαζί της σε αυτή την αποστολή.

Αφού πέρασε κάποιο διάστημα ακολουθώντας τα ίχνη του καλύτερού της φίλου, βρίσκει τον καταυλισμό όπου κρατείται ο φίλος της. Αποδεικνύεται ότι υπάρχουν δύο απαγωγείς: ένας πανίσχυρος ιππότης και ένας πονηρός τοξότης.

Έχοντας βρει τους απαγωγείς, η Annalyn σκέφτεται ποιες από τις παρακάτω ενέργειες μπορεί να κάνει:

  • Γρήγορη επίθεση: μια γρήγορη επίθεση μπορεί να γίνει αν ο ιππότης κοιμάται, καθώς χρειάζεται χρόνο για να φορέσει την πανοπλία του, οπότε θα είναι ευάλωτος.
  • Κατασκοπεία: μπορεί να κατασκοπεύσει την ομάδα αν τουλάχιστον ένας από αυτούς είναι ξύπνιος. Διαφορετικά, η κατασκοπεία είναι χάσιμο χρόνου.
  • Σήμα στον φυλακισμένο: μπορεί να δοθεί σήμα στον φυλακισμένο με ήχους πουλιών αν ο φυλακισμένος είναι ξύπνιος και ο τοξότης κοιμάται, καθώς οι τοξότες είναι εκπαιδευμένοι στη σηματοδότηση με ήχους πουλιών, οπότε θα μπορούσαν να υποκλέψουν το μήνυμα.
  • Απελευθέρωση του φυλακισμένου: η Annalyn μπορεί να προσπαθήσει να μπει κρυφά στον καταυλισμό για να ελευθερώσει τον φυλακισμένο. Είναι ριψοκίνδυνο εγχείρημα και μπορεί να πετύχει μόνο με έναν από τους δύο τρόπους:
    • Αν η Annalyn έχει τον σκύλο της μαζί της, μπορεί να σώσει τον φυλακισμένο αν ο τοξότης κοιμάται. Ο ιππότης φοβάται τον σκύλο και ο τοξότης δεν θα προλάβει να ετοιμαστεί πριν η Annalyn και ο φυλακισμένος δραπετεύσουν.
    • Αν η Annalyn δεν έχει τον σκύλο της, τότε αυτή και ο φυλακισμένος πρέπει να κινηθούν πολύ κρυφά! Η Annalyn μπορεί να ελευθερώσει τον φυλακισμένο αν ο φυλακισμένος είναι ξύπνιος και ο ιππότης και ο τοξότης κοιμούνται και οι δύο, αλλά αν ο φυλακισμένος κοιμάται δεν μπορεί να σωθεί: ο φυλακισμένος θα ξαφνιαστεί από την ξαφνική εμφάνιση της Annalyn και θα ξυπνήσει τον ιππότη και τον τοξότη.

Έχεις τέσσερα καθήκοντα: να υλοποιήσεις τη λογική που καθορίζει αν οι παραπάνω ενέργειες είναι διαθέσιμες με βάση την κατάσταση των τριών χαρακτήρων που βρίσκονται στο δάσος και αν ο σκύλος της Annalyn είναι παρών ή όχι.

1. Έλεγξε αν είναι δυνατή η ενέργεια "Γρήγορη επίθεση"

Υλοποίησε μια συνάρτηση με το όνομα canFastAttack που παίρνει μια τιμή Boolean (λογική τιμή) η οποία δείχνει αν ο ιππότης είναι ξύπνιος. Η συνάρτηση επιστρέφει true αν η ενέργεια "Γρήγορη επίθεση" είναι διαθέσιμη με βάση την κατάσταση του χαρακτήρα. Διαφορετικά, επιστρέφει false:

<?php
$is_knight_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false

2. Έλεγξε αν είναι δυνατή η ενέργεια "Κατασκοπεία"

Υλοποίησε μια συνάρτηση με το όνομα canSpy που παίρνει τρεις τιμές Boolean, οι οποίες δείχνουν αν ο ιππότης, ο τοξότης και ο φυλακισμένος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν η ενέργεια "Κατασκοπεία" είναι διαθέσιμη με βάση την κατάσταση των χαρακτήρων. Διαφορετικά, επιστρέφει false:

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true

3. Έλεγξε αν είναι δυνατή η ενέργεια "Σήμα στον φυλακισμένο"

Υλοποίησε μια συνάρτηση με το όνομα canSignal που παίρνει δύο τιμές Boolean, οι οποίες δείχνουν αν ο τοξότης και ο φυλακισμένος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν η ενέργεια "Σήμα στον φυλακισμένο" είναι διαθέσιμη με βάση την κατάσταση των χαρακτήρων. Διαφορετικά, επιστρέφει false:

<?php
$is_archer_awake = false;
$is_prisoner_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true

4. Έλεγξε αν είναι δυνατή η ενέργεια "Απελευθέρωση του φυλακισμένου"

Υλοποίησε μια συνάρτηση με το όνομα canLiberate που παίρνει τέσσερις τιμές Boolean. Οι τρεις πρώτες παράμετροι δείχνουν αν ο ιππότης, ο τοξότης και ο φυλακισμένος, αντίστοιχα, είναι ξύπνιοι. Η τελευταία παράμετρος δείχνει αν ο σκύλος της Annalyn είναι παρών. Η συνάρτηση επιστρέφει true αν η ενέργεια "Απελευθέρωση του φυλακισμένου" είναι διαθέσιμη με βάση την κατάσταση των χαρακτήρων και την παρουσία του σκύλου της Annalyn. Διαφορετικά, επιστρέφει false:

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
    $is_knight_awake,
    $is_archer_awake,
    $is_prisoner_awake,
    $is_dog_present
);
// => false
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
PHP Exercism

Έτοιμος να ξεκινήσεις την άσκηση Η Παρείσφρηση της Annalyn;

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