Κρεμάλα

Κρεμάλα

Δύσκολο

Οδηγίες

Υλοποίησε τη λογική του παιχνιδιού Κρεμάλα χρησιμοποιώντας συναρτησιακό αντιδραστικό προγραμματισμό.

Η Κρεμάλα είναι ένα απλό παιχνίδι μαντέματος λέξεων.

Ο συναρτησιακός αντιδραστικός προγραμματισμός είναι ένας τρόπος να γράφεις διαδραστικά προγράμματα. Διαφέρει από τη συνηθισμένη οπτική στο ότι, αντί να λες "όταν πατηθεί το κουμπί, αύξησε τον μετρητή", γράφεις "η τιμή του μετρητή είναι το άθροισμα των φορών που πατήθηκε το κουμπί".

Υλοποίησε τη βασική λογική πίσω από την Κρεμάλα χρησιμοποιώντας συναρτησιακό αντιδραστικό προγραμματισμό. Θα χρειαστεί να εγκαταστήσεις μια βιβλιοθήκη FRP γι' αυτό. Αυτό περιγράφεται στα αρχεία της άσκησης που αφορούν συγκεκριμένα τη γλώσσα/track.

Νέα προσέγγιση της άσκησης

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

Πρέπει να φτιάξεις έναν TCP server και ένα πρωτόκολλο ειδικού πεδίου. Αυτός ο server ξεκινά με τη λέξη που πρέπει να μαντέψεις. Το test script υλοποιεί τον client που στέλνει εντολές στον server.

Πρωτόκολλο ειδικού πεδίου

Οι εντολές του πρωτοκόλλου που πρέπει να υλοποιήσεις είναι:

  • STATUS για να επιστρέψει την τρέχουσα κατάσταση του παιχνιδιού. Η απάντηση θα είναι μια λίστα με τρία στοιχεία:
    1. τον αριθμό των λανθασμένων μαντεψιών που απομένουν,
    2. τη λέξη καλυμμένη με κάτω παύλες για τα γράμματα που δεν έχουν μαντευτεί, και
    3. ένα πεδίο κατάστασης (μία από τις τιμές "ongoing", "win" ή "lose")
  • GUESS x, όπου x είναι ένα γράμμα που πρέπει να μαντέψεις. Ο server θα απαντήσει με τη λίστα κατάστασης μετά από κάθε μαντεψιά.
  • SHUTDOWN για να τερματίσεις απομακρυσμένα τον server. Διαφορετικά, ο server θα τερματιστεί μετά από νίκη ή ήττα.

Ο server θα πρέπει να μπορεί να χειρίζεται αυτές τις εντολές ανεξάρτητα από πεζά και κεφαλαία.

Ποια θύρα χρησιμοποιεί ο server;

Ξεκίνα τον server σου χρησιμοποιώντας τον αριθμό θύρας 0: η Tcl θα βρει μια θύρα που δεν χρησιμοποιείται, ώστε να μη χρειάζεται να βάλουμε καρφωτή τιμή για τον αριθμό θύρας στο test script. Όλοι οι διερμηνευτές που τρέχουν σε μια διεργασία (μαζί και τα νήματα) μοιράζονται το ίδιο περιβάλλον, οπότε ο server μπορεί να ανακοινώσει τη θύρα του πίσω στο test script μέσω του καθολικού πίνακα env. Υπάρχει ένα παράδειγμα στο αρχικό αρχείο hangman.tcl.

Υποδείξεις

Θα χρειαστείς αυτές τις εντολές της Tcl: socket, fileevent, vwait.

Αυτό το παράδειγμα προγράμματος socket μπορεί να σε βοηθήσει να ξεκινήσεις.

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

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

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