Γραφικά υπολογιστών Εργαστήριο 2 Παιχνίδια μαντεύματος με τυχαίους αριθμούς και loops Σκοπός της 2ης άσκησης είναι να μάθουμε να φτιάχνουμε loops, τα οποία θα χρησιμοποιούνται για την επανάληψη μέρους του κώδικα. Τα περισσότερα παιχνίδια επαναλαμβάνουν συνέχεια τον κώδικά τους. 1. Ένα απλό παιχνίδι μαντεύματος αριθμού Ας δούμε ένα απλό παιχνίδι στο οποίο ο υπολογιστής σκέφτεται έναν αριθμό και ο χρήστης έχει έναν αριθμό από προσπάθειες προκειμένου να τον μαντέψει. : Θα σκέφτεστε ήδη τι σχέση έχει αυτό με τα γραφικά, κάποιος μας κοροϊδεύει και άλλα τέτοια! Στην πραγματικότητα, για να φτιάξουμε ένα παιχνίδι, θα πρέπει να γνωρίζουμε άριστα τη χρήση των loops. Όσοι ασχολείστε με παιχνίδια, θα είστε σίγουρα εξοικειωμένοι με τον όρο fps (frames per second). Πρόκειται για τον αριθμό των καρέ που ζωγραφίζονται ανά δευτερόλεπτο. Όσο περισσότερα είναι αυτά, τόσο πιο ομαλή μας φαίνεται η κίνηση. Με πολύ απλά λόγια, η λογική ενός παιχνιδιού με γραφικά είναι η παρακάτω:
Μέσα στο loop Draw Everything μπορεί να υπάρχει κι άλλο ένα loop. Π.χ. το παραπάνω θα μπορούσε να είναι κάτι τέτοιο: 2. Loops στην Python Τα βασικά loops στην Python είναι το for και τo while. Για να σκεφτόμαστε και λίγο προσανατολισμένα προς τα παιχνίδια, ένα for loop μπορεί να χρησιμοποιηθεί για να επαναλάβει κάτι έναν προκαθορισμένο αριθμό από φορές, ενώ ένα while για να επαναλάβει κάτι εώς ότου ο παίκτης προβεί σε κάποια ενέργεια, π.χ. πατήσει ένα κουμπί. Το ακόλουθο for loop θα τυπώσει ένα μύνημα 5 φορές. Προσέξτε τη σύνταξη, ίσως σας ξενίσει κάπως στην αρχή. Προσέξτε και τη στοίχιση. Ισχύουν οι κανόνες που είδαμε στο if: Ίσως το παραπάνω να μην αποδειχθεί υπερβολικό. Το i είναι προφανώς ο μετρητής, ενώ το range είναι αυτό που καθορίζει τον αριθμό των επαναλήψεων. Αν για παράδειγμα θέλαμε να τυπώσουμε τους αριθμούς από το 1 εώς το 10, θα αρκούσε κάτι τέτοιο:
H range μπορεί να χρησιμοποιηθεί και κάπως διαφορετικά. Δοκιμάστε το παρακάτω: Δοκιμάστε να τυπώσετε τους αριθμούς ανάποδα με range(11,1). Τι παρατηρείτε; Θα πρέπει με κάποιο τρόπο να επιβάλλουμε στην range ένα συγκεκριμένο βήμα. Δείτε το ακόλουθο παράδειγμα, που κάνει αυτό που θέλουμε: Κάποιες φορές, οι αριθμοί που επιθυμούμε να επαναληφθούν δεν μπορούν έυκολα να προκύψουν από έναν μαθηματικό τύπο. Για το λόγο αυτό, η Python μας επιτρέπει να χρησιμοποιήσουμε μια συγκεκριμένη λίστα: 3. Nested Loops στην Python Το παρακάτω δεν είναι ένα nested loop στην Python. Τι περιμένετε ότι θα τυπώσει; Αντίθετα, με λίγη προσοχή στη στοίχιση, μπορεί εύκολα να μετατραπεί σε nested loop: Άσκηση: Να φτιάξετε ένα πρόγραμμα που να υπολογίζει το άθροισμα των αριθμών από 1 εώς 100. Άσκηση: Να φτιάξετε ένα πρόγραμμα που ζητάει 5 τιμές από το χρήστη και να υπολογίζει πόσες φορές αυτός έδωσε την τιμή 0. 4. While Loops στην Python Ένα while loop μπορεί να χρησιμοποιηθεί οπουδήποτε μπορεί να χρησιμοποιηθεί και ένα for loop. Ωστόσο το τελευταίο είναι πολύ πιο εύκολο να προγραμματισθεί. Για το ακόλουθο for loop:
το αντίστοιχο while loop είναι το παρακάτω: Η σύνταξη του while μας είναι γνώριμη. Ένας φρουρός, τo i χρησιμοποιείται για να ελέγχει τον τερματισμό του βρόχου. Μια πολύ χρήσιμη εφαρμογή του while στα παιχνίδια είναι π.χ. να περιμένει το χρήστη να πατήσει κάποιο κουμπί προκειμένου να εγκαταλείψει: 5. Τυχαίοι Αριθμοί Η Python από μόνη της δεν ξέρει πώς να φτιάξει τυχαίους αριθμούς. Ωστόσο με τη βοήθεια κατάλληλης βιβλιοθήκης, κάτι τέτοιο είναι σχετικά απλό να γίνει, γράφοντας import random. Στη συνέχεια μπορούμε να δημιουργούμε τυχαίους αριθμούς. Π.χ. για να δημιουργήσουμε έναν τυχαίο αριθμό από το 0 ως το 50: Στα δύο πρώτα παραδείγματα, όταν το δίνουμε μοναδική τιμή, εννοείται ότι το εύρος από το οποίο θα εξαχθεί η τυχαία τιμή είναι από 0 εώς την τιμή που δίνουμε (εδώ 50) ενώ στα επόμενα δύο το εύρος είναι από 10 εώς 50. Μπορούμε να χρησιμοποιήσουμε λίστες, προκειμένου να πάρουμε τυχαία στοιχεία από αυτές. Π.χ. για ένα παιχνίδι πέτρα-ψαλίδι-χαρτί:
Μέχρι τώρα είδαμε παραδείγματα τυχαίων ακεραίων αριθμών. Μπορούμε να πάρουμε έναν τυχαίο δεκαδικό αριθμό από 0 εώς 1 ως εξής: και αν θέλουμε π.χ. από 10 εώς 15, πρέπει να διαθέτουμε γνώσεις μαθηματικών: Άσκηση: Να υλοποιήσετε το παιχνίδι μαντεύματος που παρουσιάστηκε στην αρχή της άσκησης. Άσκηση: Στη σειρά The Big Bang Theory, ο Sheldon κάνει ένα reboot του γνωστού σε όλους μας Πέτρα Ψαλίδι Χαρτί σε Πέτρα Ψαλίδι Χαρτί Σποκ Σαύρα. Με βάση το παρακάτω διάγραμμα στο οποίο φαίνονται οι κανόνες του παιχνιδιού, να προσπαθήσετε να φτιάξετε μια command line έκδοση του παιχνιδιού.