4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος Μεταβλητές Συστήματος Η Processing χρησιμοποιεί κάποιες μεταβλητές συστήματος, όπως τις ονομάζουμε, για να μπορούμε να παίρνουμε πληροφορίες από το σύστημα κατά την εκτέλεση ενός προγράμματος. Έχουμε ήδη χρησιμοποιήσει τις μεταβλητές συστήματος mousex και mousey παρ ότι δεν τις είχαμε ονομάσει. Γνωρίζαμε όμως ότι χρησιμοποιώντας αυτές τις μεταβλητές μπορούμε να γνωρίζουμε τις συντεταγμένες της θέσης του δείκτη του ποντικιού. Επιπλέον, είδαμε ότι όταν γράφουμε το όνομα της μεταβλητής mousex ή mousey η Processing το εμφανίζει με κόκκινα γράμματα. Αυτό είναι διότι αναγνωρίζει το όνομα που δώσαμε ως το όνομα μιας μεταβλητής συστήματος. Στο προηγούμενο μάθημα που είδαμε πως μπορούμε να χρησιμοποιούμε μεταβλητές στα προγράμματα της Processing είχαμε αναφέρει ότι πριν χρησιμοποιήσουμε μια μεταβλητή πρέπει να την δηλώσουμε με έναν συγκεκριμένο τύπο (int, float, κ.λπ.) και ένα όνομα. Αυτό δεν χρειάζεται να το κάνουμε για τις μεταβλητές συστήματος, αφού είναι ορισμένες από την Processing και γνωρίζει τόσο τον τύπο τους αλλά και το όνομά τους. Όταν δηλώνουμε δικές μας μεταβλητές στα προγράμματα που γράφουμε δεν πρέπει να χρησιμοποιούμε ονόματα που έχει δεσμεύσει η Processing για τις δικές της μεταβλητές συστήματος. Στη συνέχεια παραθέτουμε τις μεταβλητές συστήματος της Processing τις οποίες θα συναντήσουμε σε επόμενα παραδείγματα. width το πλάτος (σε pixel) του παραθύρου εξόδου height το ύψος (σε pixel) του παραθύρου εξόδου framecount πλήθος frames που έχουν ήδη επεξεργαστεί framerate ρυθμός με τον οποίο επεξεργάζονται τα frames (ανά δευτερόλεπτο) screen.width το πλάτος (σε pixel) όλης της οθόνης screen.height το ύψος (σε pixel) όλης της οθόνης key το πιο πρόσφατο πλήκτρο που πατήθηκε στο πληκτρολόγιο keycode ο αριθμητικός κωδικός του πλήκτρου που πατήθηκε keypressed True ή false. Έχει πατηθεί κάποιο πλήκτρο; mousepressed True ή false. Έχει πατηθεί κάποιο κουμπί του ποντικιού; mousebutton Ποιο κουμπί του ποντικιού πατήθηκε; Το αριστερό, το δεξί ή το μεσαίο; Παράδειγμα 1
Άσκηση Πληροφορική: Εισαγωγή στον Προγραμματισμό και την Τεχνολογία των Υπολογιστών Χρησιμοποιήστε τις μεταβλητές συστήματος width και height για να εμφανίσετε στην οθόνη το παρακάτω σχήμα με το ίδιο τρόπο ανεξάρτητα από το μέγεθος του παραθύρου που ορίζεται με την size(). Το μέγεθος των σχημάτων πρέπει να μεταβάλλεται ανάλογα με το μέγεθος του παραθύρου εξόδου. (Δείτε στο προηγούμενο παράδειγμα τον τρόπο με τον οποίο το τετράγωνο σχεδιαζόταν πάντα στο κέντρο του παραθύρου εξόδου. Η αλλαγή μεγέθους των σχημάτων γίνεται με αντίστοιχο τρόπο.) Τυχαίοι Αριθμοί Στο παρακάτω παράδειγμα κώδικα βλέπουμε να σχεδιάζεται ένας κύκλος σε μια ορισμένη θέση του παραθύρου εξόδου, με συγκεκριμένη διάμετρο και χρώμα γεμίσματος και περιγράμματος. Όλες οι παράμετροι βάση των οποίων θα σχεδιαστεί ο κύκλος έχουν ορισμένες τιμές τις οποίες έχουμε αναθέσει σε μεταβλητές. Η εντολή σχεδίασης του κύκλου είναι μέσα στην draw(). Αυτό σημαίνει ότι ο ίδιος κύκλος θα σχεδιάζεται ξανά και ξανά μέχρι τον τερματισμό του προγράμματος. 2
Το αποτέλεσμα του παραπάνω κώδικα θα ήταν πολύ πιο ενδιαφέρον αν κάθε φορά που εκτελείται η εντολή σχεδιασμού ενός κύκλου στην draw() σχεδιαζόταν ένας διαφορετικός κύκλος με διαφορετικό μέγεθος, θέση και χρώμα. Για να το πετύχουμε αυτό θα χρησιμοποιήσουμε την συνάρτηση της Processing random() για την παραγωγή τυχαίων αριθμών. Η random() είναι μια συνάρτηση της Processing όπως είναι και οι συναρτήσεις line(), ellipse() κ.λπ. που έχουμε χρησιμοποιήσει πολλές φορές μέχρι τώρα. Η βασική διαφορά της random() είναι ότι το αποτέλεσμα εκτέλεσής της δεν είναι να σχεδιαστεί κάτι στο παράθυρο εξόδου αλλά να μας επιστρέψει μια τιμή, στη συγκεκριμένη περίπτωση έναν τυχαίο αριθμό. Σε αυτό μοιάζει περισσότερο με τη συνάρτηση abs() που είχαμε χρησιμοποιήσει για να υπολογίζουμε την απόλυτη τιμή ενός αριθμού. random() Παράγει τυχαίους αριθμούς. Κάθε φορά που η random() καλείται, επιστρέφει μια τυχαία τιμή εντός του καθορισμένου εύρους. Εάν μόνο μία παράμετρος περνά στη συνάρτηση, θα επιστρέψει έναν float μεταξύ μηδέν και τη τιμή της παραμέτρου. Για παράδειγμα, η random(5) επιστρέφει τιμές μεταξύ 0 και 5 (ξεκινώντας από το μηδέν, και μέχρι, αλλά μη συμπεριλαμβανομένης της τιμής 5). Εάν έχουν καθοριστεί δύο παράμετροι, η συνάρτηση θα επιστρέψει έναν float με μια τιμή μεταξύ των δύο τιμών. Για παράδειγμα, η random(-5, 10.2) επιστρέφει τιμές που ξεκινούν από -5 έως (αλλά μη συμπεριλαμβανομένης) 10.2. Έτσι η random() λειτουργεί με ακριβώς τον ίδιο τρόπο που θα ακολουθούσαμε αν θέλαμε να πει ένας φίλος μας έναν τυχαίο αριθμό. Θα του ζητούσαμε να μας πει ένα τυχαίο αριθμό εντός ενός συγκεκριμένου εύρους (π.χ. από 1 έως 100) και τον αριθμό που θα μας έλεγε θα τον χρησιμοποιούσαμε στη συνέχεια με όποιον τρόπο θέλαμε. Στο παρακάτω παράδειγμα σχεδιάζουμε ένα ορθογώνιο που το πλάτος του είναι ένας τυχαίος αριθμός από 1 έως 100. Όπως αναφέραμε και παραπάνω η συνάρτηση random() μας επιστρέφει έναν δεκαδικό (float) τυχαίο αριθμό. Αν θέλουμε έναν ακέραιο τυχαίο αριθμό τότε μπορούμε να τον μετατρέψουμε σε τέτοιο με τον τρόπο που φαίνεται στο παρακάτω παράδειγμα. Στην πραγματικότητα με το int(random(1, 100)) εκτελούμε δύο συναρτήσεις. Η random() πρώτα επιστρέφει έναν τυχαίο float από 1 έως 100 και στη συνέχεια η συνάρτηση int() μετατρέπει αυτόν τον float σε ακέραιο int. Θα μπορούσαμε με παρόμοιο τρόπο να γράψουμε την εκτέλεση της int() και random() μέσα στην rect() ως εξής: rect(100,100,int(random(1,100)),50); 3
Παράδειγμα Ξαναγράφουμε το προηγούμενο παράδειγμα με τη σχεδίαση του κύκλου, μόνο που τώρα η τιμή όλων των παραμέτρων προκύπτει με τυχαίο τρόπο. 4
Παράδειγμα Σε αυτή την εκδοχή του Zoog θέλουμε δύο επιπλέον λειτουργίες: Λειτουργία 1: Ο Zoog θα βγαίνει από το κάτω μέρος της οθόνης και στο τέλος θα βγαίνει εκτός οθόνης. Λειτουργία 2: Τα μάτια του Zoog θα χρωματίζονται με τυχαίο τρόπο όσο ο Zoog κινείται 5
Άσκηση Τροποποιήστε το παραπάνω παράδειγμα του Zoog ώστε να κινείται δεξιά και αριστερά όσο μετακινείται προς τα επάνω. Θα πρέπει να χρησιμοποιήσετε την random() σε συνδυασμό με τη μεταβλητή zoogx. Άσκηση Δημιουργήστε ένα δικό σας σχέδιο με τουλάχιστον 3 σχήματα και με τη χρήση μεταβλητών και της random() κάντε το σχήμα σας να κινείται, να αλλάζει χρώμα, μέγεθος κ.λπ. 6