Βίντεο: Coding Challenge #3: The Snake Game 2024
Στο Ruby, μπορείτε να δημιουργήσετε ένα ορθογώνιο στην οθόνη χρησιμοποιώντας την τεχνολογία ASCII. Εάν επρόκειτο να σχεδιάσετε ένα ορθογώνιο σε χαρτί γεμάτο με ένα μοτίβο, τι θα έπρεπε να κάνετε; Αρχικά, μπορείτε να σχεδιάσετε το περίγραμμα του ορθογωνίου και, στη συνέχεια, να χρωματίσετε στο εσωτερικό.
Αλλά για το πρόγραμμά σας στο Ruby, θα θελήσετε να αντλήσετε το σχήμα από την κορυφή στο κάτω μέρος, μία γραμμή τη φορά. Πώς θα περιγράφατε πώς να το κάνετε αυτό; Όπως και εδώ:
-
Σχεδιάστε την κορυφή του ορθογωνίου χρησιμοποιώντας το εξωτερικό (ή άκρο) σχέδιο για την πρώτη γραμμή.
-
Για κάθε μια από τις γραμμές που συνθέτουν τις πλευρές και το εσωτερικό του ορθογωνίου, τραβήξτε την αριστερή άκρη, όλη τη μέση και, στη συνέχεια, το δεξί άκρο.
Επαναλάβετε αυτό το βήμα μέχρι να χρειαστεί να σχεδιάσετε το κάτω μέρος του ορθογωνίου.
-
Σχεδιάστε το κάτω μέρος του ορθογωνίου ακριβώς όπως τραβήξατε το πάνω άκρο.
Αυτός είναι ένας αλγόριθμος για την σχεδίαση ορθογωνίων γραμμών ανά γραμμή από πάνω προς τα κάτω.
Ένας αλγόριθμος είναι απλώς μια ακολουθία βημάτων που ακολουθείτε για να ολοκληρώσετε κάποια εργασία ή υπολογισμό. Σε αυτή την περίπτωση, γράψατε την ακολουθία για να σχεδιάσετε ένα ορθογώνιο με σάρωση από πάνω προς τα κάτω, γραμμή με γραμμή.
Η έκδοση Ruby του αλγορίθμου σας μοιάζει πολύ με την αγγλική έκδοση:
-
Ρυθμίστε δύο μεταβλητές που διευκολύνουν να δουν τι συμβαίνει. Θα χρησιμοποιήσετε την επιλογή του χρήστη για το μέγεθος του σχήματος τόσο ως προς το ύψος όσο και ως το πλάτος του σχήματος που πρόκειται να σχεδιάσετε:
height = shape_size width = shape_size
-
Θα σχεδιάσετε τη γραμμή ορθογωνίου κατά γραμμή, ρυθμίστε έναν βρόχο που θα επαναλάβει τον κωδικό σας για κάθε σειρά (αυτό σημαίνει ότι χρειάζεστε τον κώδικα σχεδίασης για την εκτέλεση ύψος φορές):
1. upto (ύψος) να | σειρά | # Ο κώδικας σχεδίασης πηγαίνει εδώ τέλος
Οι βρόχοι είναι ένας ισχυρός τρόπος να επαναληφθεί ο κώδικας αρκετές φορές (ή ακόμα και ένας άπειρος αριθμός φορές)! Ο Ruby έχει διάφορους τρόπους να προγραμματίσει έναν βρόχο. Η μέθοδος upto είναι ένας εύκολος τρόπος για να μετρήσετε από τον αρχικό αριθμό σε έναν τελικό αριθμό. Για το ορθογώνιο, θέλετε να μετρήσετε αρχίζοντας από το 1 για την πρώτη σειρά και ολοκληρώνοντας την καταμέτρηση όταν φτάσετε στον αριθμό που αντιπροσωπεύει το ύψος.
-
Τώρα, για να λειτουργήσει ο αλγόριθμος, πρέπει να ελέγξετε για να δείτε τη σειρά που θέλετε να εκτυπώσει το πρόγραμμα. Έχετε τρεις περιπτώσεις: την πρώτη σειρά, τις μεσαίες σειρές και την τελευταία σειρά. Προσθέστε στην περίπτωση της πρώτης γραμμής στη μέση του βρόχου σας:
αν η σειρά == 1 βάζει εξωτερικό_ολόγο * το τέλος πλάτους
Αν η μεταβλητή σειρά είναι ίση με μία, το πρόγραμμα θα χρησιμοποιήσει βάζει για να εκτυπώσει την επιλογή σας για το εξωτερικό_διαλόγιο αρκετές φορές ίσο με το πλάτος.
Χρησιμοποιείτε αν δηλώσεις όταν θέλετε να δείτε αν κάποια προϋπόθεση είναι αληθής ή ψευδής.Το σύμβολο == στον Ruby θέτει την ερώτηση: "Το πράγμα στην αριστερή πλευρά είναι ίσο με το πράγμα στη δεξιά πλευρά του συμβόλου ==; "Αν είναι, τότε ο Ruby θα τρέξει τις γραμμές του κώδικα μέχρι να υπάρξει μια άλλη συνθήκη ή μια λέξη κλειδιού.
-
Στη συνέχεια, προσθέστε έναν έλεγχο για να δείτε αν αυτή είναι η τελευταία σειρά. Η λέξη-κλειδί elsif ξεκινά μια άλλη δοκιμή κατάστασης και το τοποθετείτε ακριβώς πριν από την προηγούμενη λέξη-κλειδί. Αυτό δεν είναι ορθό λάθος, παρεμπιπτόντως. Ο Ruby έχει απλώς έναν αστείο τρόπο να λέει "αλλιώς αν"! Ολόκληρο το πράγμα θα έχει την εξής μορφή:
αν η σειρά == 1 βάζει το εξωτερικό_letter * το πλάτος elsif row == το ύψος βάζει το εξωτερικό_letter * το τέλος του πλάτους
-
Τέλος, πρέπει να χειριστείτε την εμφάνιση όλων των γραμμών στη μέση, προσθέστε μια τελευταία προϋπόθεση χρησιμοποιώντας την άλλη λέξη-κλειδί του Ruby. Αυτός ο κώδικας πηγαίνει ακριβώς πριν από τη λέξη-κλειδί στο τέλος. Εδώ είναι ολόκληρο το μπλοκ του Ruby:
if row == 1 θέτει εξωτερικό_letter * πλάτος elsif σειρά == ύψος βάζει έξω_letter * πλάτος άλλο middle = εσωτερικό_letter * (πλάτος -2) θέτει "# {outside_letter} # {middle} # { outside_letter} "end
Η μεσαία περίπτωση φαίνεται περίπλοκη. Τι κάνει; Λοιπόν, σύμφωνα με τον αλγόριθμό σας, πρέπει να σχεδιάσετε τα αριστερά και τα δεξιά άκρα και τα πάντα στη μέση.
Η μεσαία μεταβλητή υπολογίζει τη συμβολοσειρά που αντιπροσωπεύει το κέντρο του ορθογωνίου. Εάν αφαιρέσετε ένα για τον χαρακτήρα αριστερού άκρου και ένα για το δεξιό χαρακτήρα άκρου, το τελικό πλάτος της μέσης είναι το πλήρες πλάτος μείον δύο χαρακτήρες.
Η τελική εντολή puts χρησιμοποιεί την επεξεργασία συμβολοσειρών για να δημιουργήσει τη συνδυασμένη σειρά.
-
Εκτελέστε το πρόγραμμά σας και δείτε αν έχετε λάθη. Έχετε κάτι σαν αυτό που εμφανίζεται εδώ; Αν δείτε ένα σφάλμα που λέει κάτι σαν τη σύγκριση του Fixnum με το String απέτυχε, αυτό σημαίνει ότι ο Ruby είχε έναν σκληρό χρόνο χρησιμοποιώντας την τιμή inside shape_size ως αριθμό.
Ο Ruby δεν είναι σίγουρος για τη χρήση των συμβολοσειρών για αριθμούς.Γιατί υπάρχει πρόβλημα όταν πληκτρολογήσατε αριθμό; Λοιπόν, παίρνει διαβάζει στην είσοδο σας, αλλά διαβάζει όλους τους χαρακτήρες που πληκτρολογείτε ως μια συμβολοσειρά. Πρέπει να βοηθήσετε τον Ruby να μετατρέψει τη σειρά σε έναν αριθμό.
-
Αλλάξτε τις δύο γραμμές στις οποίες ρυθμίζετε τις μεταβλητές ύψους και πλάτους για να χρησιμοποιήσετε τη μέθοδο to_i, δηλαδή μετατρέψτε τα περιεχόμενα αυτής της μεταβλητής σε ακέραιο αριθμό:
height = shape_size. to_i πλάτος = size_size. to_i
Εκτελέστε ξανά τον κωδικό σας. Επιτυχία!
Είναι αυτό το πιο συναρπαστικό ορθογώνιο του κόσμου;