Διαδρομές
/
Zig
Zig
/
Ασκήσεις
/
Χαρακτήρας D&D
Χαρακτήρας D&D

Χαρακτήρας D&D

Εύκολο

Εισαγωγή

Έπειτα από εβδομάδες προσμονής, εσύ και οι φίλοι σου μαζεύεστε για το πρώτο σας παιχνίδι Dungeons & Dragons (D&D). Καθώς αυτή είναι η πρώτη συνεδρία του παιχνιδιού, κάθε παίκτης πρέπει να δημιουργήσει έναν χαρακτήρα για να παίξει. Οι ικανότητες του χαρακτήρα καθορίζονται ρίχνοντας ζάρια 6 πλευρών, αλλά πού είναι τα ζάρια; Με ένα σοκ, συνειδητοποιείς ότι οι φίλοι σου περιμένουν από εσένα να φέρεις τα ζάρια, στο κάτω κάστης, δική σου ιδέα ήταν να παίξετε D&D! Πανικοβάλλεσαι, καθώς συνειδητοποιείς ότι ξέχασες να φέρεις τα ζάρια, πράγμα που θα σήμαινε ότι δεν θα γινόταν κανένα παιχνίδι D&D. Καθώς έχεις κάποιες βασικές δεξιότητες προγραμματισμού, σκέφτεσαι γρήγορα μια λύση: θα γράψεις ένα πρόγραμμα που προσομοιώνει ρίψεις ζαριών.

Οδηγίες

Σε ένα παιχνίδι Dungeons & Dragons, κάθε παίκτης ξεκινά δημιουργώντας έναν χαρακτήρα με τον οποίο μπορεί να παίξει. Αυτός ο χαρακτήρας έχει, μεταξύ άλλων, έξι ιδιότητες: strength, dexterity, constitution, intelligence, wisdom και charisma. Οι έξι αυτές ιδιότητες έχουν τιμές που καθορίζονται τυχαία. Για να το κάνεις αυτό, ρίχνεις τέσσερα ζάρια με 6 πλευρές και καταγράφεις το άθροισμα των τριών μεγαλύτερων ζαριών. Το κάνεις έξι φορές, μία για κάθε ιδιότητα.

Οι αρχικοί πόντοι ζωής του χαρακτήρα σου είναι 10 + ο τροποποιητής constitution του χαρακτήρα σου. Για να βρεις τον τροποποιητή constitution του χαρακτήρα σου, αφαίρεσε το 10 από το constitution του χαρακτήρα σου, διαίρεσε με το 2 και στρογγυλοποίησε προς τα κάτω.

Γράψε μια γεννήτρια τυχαίων χαρακτήρων που ακολουθεί τους παραπάνω κανόνες.

Για παράδειγμα, οι έξι ρίψεις των τεσσάρων ζαριών μπορεί να μοιάζουν κάπως έτσι:

  • 5, 3, 1, 6: Αγνοείς το 1 και αθροίζεις 5 + 3 + 6 = 14, το οποίο αναθέτεις στο strength.
  • 3, 2, 5, 3: Αγνοείς το 2 και αθροίζεις 3 + 5 + 3 = 11, το οποίο αναθέτεις στο dexterity.
  • 1, 1, 1, 1: Αγνοείς το 1 και αθροίζεις 1 + 1 + 1 = 3, το οποίο αναθέτεις στο constitution.
  • 2, 1, 6, 6: Αγνοείς το 1 και αθροίζεις 2 + 6 + 6 = 14, το οποίο αναθέτεις στο intelligence.
  • 3, 5, 3, 4: Αγνοείς το 3 και αθροίζεις 5 + 3 + 4 = 12, το οποίο αναθέτεις στο wisdom.
  • 6, 6, 6, 6: Αγνοείς το 6 και αθροίζεις 6 + 6 + 6 = 18, το οποίο αναθέτεις στο charisma.

Επειδή το constitution είναι 3, ο τροποποιητής constitution είναι -4 και οι πόντοι ζωής είναι 6.

Note

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

Τυχαιότητα στη Zig

Η βασική βιβλιοθήκη της Zig αποφεύγει την κρυφή καθολική κατάσταση, οπότε αντί να κρατάς τη δική σου γεννήτρια τυχαίων αριθμών, οι συναρτήσεις σου δέχονται μια διεπαφή std.Random από την οποία αντλούν τιμές. Τα tests περνούν μια γεννήτρια με σπόρο std.testing.random_seed και ελέγχουν ότι γεννήτριες με τον ίδιο σπόρο παράγουν τους ίδιους χαρακτήρες.

Έλεγχος της τυχαιότητας

Η κατανομή των τιμών των ικανοτήτων σου ελέγχεται με ελέγχους chi-squared σε επίπεδο σημαντικότητας p < 0.0001:

  • οι τιμές που επιστρέφει η ability συγκρίνονται με την αναμενόμενη κατανομή;
  • καθεμία από τις έξι ικανότητες ενός χαρακτήρα συγκρίνεται με την αναμενόμενη κατανομή;
  • το μοτίβο των μονών και των ζυγών τιμών στις έξι ικανότητες ενός χαρακτήρα συγκρίνεται με αυτό που θα παρήγαγαν ανεξάρτητες ικανότητες.

Μια σωστή υλοποίηση έχει λιγότερες από 0,01% πιθανότητες να αποτύχει σε κάθε test.

Δες τις οδηγίες παραπάνω για τον ορισμό της τιμής ικανότητας.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Zig Exercism

Έτοιμος να ξεκινήσεις την άσκηση Χαρακτήρας D&D;

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

Αναλυτική ματιά στο Χαρακτήρας D&D!

Εξερευνούμε πώς να δημιουργούμε (φαινομενικά) τυχαίες ρίψεις ζαριών. Θα μάθεις για seeds, ψευδοτυχαίους αριθμούς και μερικές συνηθισμένες παγίδες. Τέλος, θα δούμε πόσο καλός είναι ο property-based testing για τον έλεγχο συναρτήσεων που επιστρέφουν τυχαίες τιμές.