Λοιπόν, επειδή παρατηρώ με μεγάλη χαρά πως έχουμε πάρει φόρα και πάμε πολύ καλά, λέω να επιχειρήσουμε κάτι ελαφρώς πιο αναβαθμισμένο (μάλλον και πιο ενδιαφέρον). Λέω να φτιάξουμε ένα απλό guessing game, αλλά με συγκεκριμένες προδιαγραφές ώστε να εξασκεί όσα έχουμε πει μέχρι τώρα, αλλά και να κάνει και μια εισαγωγή σε πίνακες (ελάχιστη).
Το game στην εκφώνησή του είναι απλό: ζητάει από τον χρήστη έναν θετικό αριθμό πάνω από 1 που θα χρησιμοποιηθεί ως ανώτατο όριο, θα βάζει έναν τυχαίο αριθμό από το 1 μέχρι το ανώτατο όριο, και κατόπιν ο χρήστης θα εισαγάγει μαντεψιές. Το πρόγραμμα θα τον καθοδηγεί ως εξής: θα απαντάει "πιο ψηλά" αν η μαντεψιά είναι μικρότερη του σωστού αριθμού, "πιο χαμηλά" αν η μαντεψιά είναι μεγαλύτερη του σωστού αριθμού και "Συγχαρητήρια, το βρήκατε" αν η μαντεψιά είναι ίδια με τον σωστό αριθμό. Στο τέλος θα τυπώνει πόσες μαντεψιές έκανε ο χρήστης μέχρι να βρει το σωστό νούμερο.
Καταρχήν πάρτε ως δεδομένο έναν πίνακα από strings (hints), που θα τον δηλώσετε μέσα στην main ως εξής:
- Κώδικας: Επιλογή όλων
char *hints[3] = {
"\tπιο ψηλά\n", // θέση 0
"\tπιο χαμηλά\n", // θέση 1
"\tΣυγχαρητήρια, το βρήκατε\n" // θέση 2
};
Χρησιμοποιήστε μια συνάρτηση με το παρακάτω πρότυπο:
- Κώδικας: Επιλογή όλων
int hint_position(int guess, int hidden, int lim);
// όπου guess, η μαντεψιά του χρήστη
// όπου hidden, ο τυχαίος αριθμός που θα βάζει το πρόγραμμα
// όπου lim, το ανώτατο όριο
Η συνάρτηση θα επιστρέφει -1 αν η μαντεψιά του χρήστη είναι εκτός ορίων (δηλαδή μικρότερη από 1 ή μεγαλύτερη του ανώτατου ορίου) αλλιώς θα επιστρέφει τη θέση που έχει το κατάλληλο hint μέσα στον πίνακα hints, ανάλογα με τη μαντεψιά (δλδ αν η μαντεψιά είναι μικρότερη του κρυμμένου αριθμού η συνάρτηση θα επιστρέφει 0, αν είναι μεγαλύτερη θα επιστρέφει 1, αλλιώς 2).
Για να τυπώνετε την απάντηση του προγράμματος σε κάθε μαντεψιά του χρήστη, θα χρησιμοποιείτε την τιμή επιστροφής της hint_position() για να κάνετε index το κατάλληλο string μέσα από τον πίνακα hints.
Το πρόγραμμα θα τερματίζει όταν ο χρήστης βρει τον κρυμμένο αριθμό, αφού πρώτα του δείξει πόσες προσπάθειες χρειάστηκε.
Για να βάλετε το πρόγραμμα να διαλέξει έναν τυχαίο αριθμό, πρώτα ενεργοποιήστε στην αρχή της main τη γεννήτρια τυχαίων αριθμών της C σε μια γραμμή, ως εξής:
- Κώδικας: Επιλογή όλων
srand( time(NULL) ); // #include <stdlib.h> και #include <time.h>
Κατόπιν, για να καθορίσετε μεταξύ ποιων ορίων θα διαλέξει τυχαίο αριθμό το πρόγραμμα, χρησιμοποιήστε τη στάνταρ συνάρτηση:
- Κώδικας: Επιλογή όλων
int rand( void )
σε συνδυασμό με την αριθμητική πράξη % (modulus).
Δείτε την τεκμηρίωση της rand() για τη χρήση της.
Τα υπόλοιπα υλοποιήστε τα όπως θέλετε.