Κεφάλαιο 9

=9. Οι χαρακτήρες μας έχουν αισθητήρια όργανα=

**Προτεινόμενος σύνδεσμος :**
[|1.http://www.mit.edu/~sil/scratch/design.pdf] Αυτός ο σύνδεσμος αποτελεί ένα video tutorial για το Scratch, εμπλουτισμένο με ειαγωγικές πληροφορίες καθώς και επιπρόσθετη ανάλυση όσον αφορά στις βασικές αρχές και τις δυνατότητες αυτού του νέου προγραμματιστικού περιβάλλοντος για τη δημιουργία διαδραστικών δραστηριοτήτων. Στόχος είναι η προσέλκυση του ενδιαφέροντος κυρίως των παιδιών μέσω πρόκλησης των ενδιαφερόντων τους με ψυχαγωγικές τεχνικές που θα τα βοηθήσουν να ξεδιπλώσουν τη φαντασία και τη δημιουργικότητά τους. 2. [] {Παραδείγματα σχετικά με τη λειτουργία broadcast} 3.[] {Απλά παραδείγματα για το πώς μπορούν να συνομιλήσουν τα sprites μου μέσω των ενολών broadcast (π.χ. πες ένα γειά)} 4.[] {Ένα βίντεο με οδηγίες για τη δημιουργία μορφών και κινουμένων σχεδίων στο Scratch, χρησιμοποιώντας απλές αρχές προγραμματισμού, το οποίο μπορεί να προσελκύσει το ενδιαφέρον των μαθητών. Χρησιμοποιεί κυρίως εντολές κίνησης και εντολές διαδραστικότητας (broadcast).}

5.[] Παραδείγματα και επεξηγήσεις κάθε εντολής στην παλέτα Αισθητήρες.

6.[] Σε αυτό τον σύνδεσμο και στο αρχείο ** [|**LACT13_TAMARA.zip**] ** οι χρήστες μπορούν μέσα από ένα παράδειγμα να δουν πως σχετίζεται η έννοια των μεταβλητών στο Scratch και πως η αλλαγή τους μπορεί να ορίσει σημαντικές αλλαγές στο πρόγραμμα.

7.[] Σε αυτό τον σύνδεσμο και στο αρχείο ** [|**LACT02_SPINNER.zip**] **οι χρήστες μπορούν να βρουν ένα παράδειγμα που αφορά στα αντικείμενα. Είναι αντικείμενο που προσφέρει αλληλεπίδραση-διάδραση. Μπορεί να χρησιμοποιηθεί σε πολλά παιχνίδια.

8.[] Σε αυτόν το σύνδεσμο μεταξύ άλλων ένα παράδειγμα (το παράδειγμα του λαβύρινθου) που συνδυάζει τις έννοιες της κίνησης, του ελέγχου και αισθητήρων.

9.[] Περιλαμβάνει Tutorial σχετικά με την έννοια της αίσθησης (μέσω αισθητήρων) που αποκτούν τα sprites, αλληλεπιδρώντας με άλλα αντικέιμενα.

10.[|http://www.cs.uni-potsdam.de/~romeike/UEWettbewerb/index-english.htm#_Toc181790515] Ένα tutorial του Scratch, που αναφέρεται κυρίως στους καθηγητές. Αρχικά κάνει μια εισαγωγή στο Scratch, αναφέρει τους διδακτικούς στόχους που μπορούν να επιτευχθούν μέσα από αυτό, καθώς και τις ηλικίες των παιδιών στα οποία αναφέρονται τα σχέδια μαθήματος που περιέχονται σε αυτό το site. Για της εξής ενότητες : Εισαγωγή σε προγραμματιστικό περιβάλλον, loops- κάνοντας κινήσεις, αλγόριθμοι- αποφάσεις βασισμένες σε γεγονότα, διαδραστικότητα με τον χρήστη, broadcasts, μεταβλητες, περιέχει σχέδιο μαθήματος με αναλυτικές οδηγίες προς τον καθηγητή για το πώς πρέπει να εισάγει αυτές τις έννοιες, τι διδακτικές μεθόδους και τί παραδείγματα πρέπει να χρησιμοποιήσει καθώς και τί projects πρέπει να αναθέσει στους μαθητές.

11.[] Σε αυτό το σύνδεσμο παρουσιάζονται κάποιες βασικές προγραμματιστικές αρχές μέσα από παραδείγματα στο Scratch. Οι ενότητες είναι: Εισαγωγή ( κίνηση της γάτας, πώς τρώει άλλα αντικείμενα, πώς αλλάζει ρούχα, πώς λέει κάποια λέξη), Εντολές ελέγχου ( φτιάχνουμε ένα ψάρι που κολυμπάει σε ένα δοχείο, μόλις ακουμπήσει το δοχείο τότε αλλάζει κατεύθυνση, επίσης μπορούμε να προσθέσουμε κουμπιά για να δημιουργεί το ψάρι μπουρπουλήθρες και να κάνει ήχο), Broadcastng μηνυμάτων (δημιουργία τριών sprites τα οποία αλλάζουν τα κοστούμια και τα backgrounds των άλλων sprites), δημιουργία ενός ολοκληρωμένου project. Για κάθε ενότητα, περιέχονται μαθήματα, φύλλα εργασίας και φύλλα με παραδείγματα.

__//9. Οι χαρακτήρες μας έχουν αισθητήρια όργανα//__ // Μαθησιακοί στόχοι //// Να κατανοούν ότι κάθε αντικείμενο έχει μια σειρά από αισθητήρες που του επιτρέπουν να αντιλαμβάνεται το περιβάλλον μέσα στο οποίο βρίσκεται (χαρακτήρες, σκηνικά κτλ.) // Να κατανοούν ότι κάθε αντικείμενο έχει μια σειρά από αισθητήρες που του επιτρέπουν να αντιλαμβάνεται την είσοδο του χρήστη (δείκτης ποντικιού, πληκτρολόγιο κτλ) //Να είναι σε θέση να χρησιμοποιούν την εντολή "ρώτησε και περίμενε" και να αντιλαμβάνονται πως αυτή συνδέεται με την είσοδο δεδομένων από το πληκτρολόγιο. Να είναι σε θέση να χρησιμοποιούν την εντολή " Όταν το πλήκτρο ... πατηθεί" που βρίσκεται στην παλέτα έλεγχος. // // Να κατανοούν την έννοια του event-based programming. // Χαρακτηριστικά Μεταβλητές Γεγονότα και event-based programming - Αιτία κι αποτέλεσμα. Εισαγωγή του γεγονότος στον προγραμματισμό// Παραδείγματα // (Ακόμα δεν έχει γίνει εισαγωγή της ένοιας του ελέγχου και της επανάληψης) Πες μου ένα γεια (εισαγωγή δεδομένων από το πληκτρολόγιο). Συγχρονίσου με το συνομιλητή σου (γραμμική εξέλιξη του παραδείγματος "Συνομιλώ αλλά όχι μόνο με ματιές" από το κεφάλαιο 8).


 * ΚΕΦΑΛΑΙΟ

9.** **Οι χαρακτήρες μας έχουν αισθητήρια όργανα ή Οι χαρακτήρες μας αντιλαμβάνονται**

9.1 Εισαγωγή 9.2 Η έννοια του γεγονότος και του γεγονοστραφή προγραμματισμού 9.3 Όταν ο χρήστης παρεμβαίνει 9.3.1 Εντολή Ρώτησε .... και Περίμενε 9.3.2 Εντολή Όταν το πλήκτρο ... πατηθεί 9.5 Ασκήσεις

//«Το οικοσύστημα αυτοπροσαρμόζεται και για κάθε δράση υπάρχει και μία αντίδραση»,// Steve Mils


 * 9.1 Εισαγωγή**

Ξεκινώντας από την δημιουργία των πρώτων Η/Υ(π.χ. του ΕΝΙΑC) μπορούμε να δούμε ότι τα προγράμματα είχαν τη μορφή της συνεχούς και προκαθορισμένης εκτέλεσης εντολών, ως επί το πλείστον αριθμητικών πράξεων. Όμως με την πρόοδο των υπολογιστικών συστημάτων και με την εξέλιξη των ανθρώπινων απαιτήσεων δημιουργήθηκε η ανάγκη για πιο «έξυπνα» προγράμματα τα οποία θα μπορούν να εντοπίζουν ενέργειες που προκάλεσε το περιβάλλον ή ο χρήστης. Ένα «γεγονός» (ή αιτία) θα καθόριζε το σύνολο των εντολών που θα εκτελεστούν και τη σειρά τους. Έτσι είχαμε τη γέννηση του «γεγονοστραφή» (event-based) προγραμματισμού. Σε αυτό το κεφάλαιο θα ασχοληθούμε με τις έννοιες του γεγονότος, του γεγονοστραφή προγραμματισμού καθώς και με εντολές που επιτρέπουν την εφαρμογή αυτού στο περιβάλλον του Scratch.Το γεγονός θεωρείται αίτιο και παράγει το ανάλογο αποτέλεσμα. Στην επόμενη ενότητα θα γίνει μια αναλυτική περιγραφή του γεγονοστραφούς προγραμματισμού. Στη συνέχεια του κεφαλαίου θα αναλύσουμε και θα χρησιμοποιήσουμε τις δύο βασικές εντολές με τις οποίες μπορεί να χρησιμοποιήσει ο χρήστης για να προγραμματίσει με γεγονότα: «Όταν το πλήκτρο πατηθεί» και «ρώτησε και περίμενε».

Ας μελετήσουμε τώρα την έννοια των γεγονότων. Τι ακριβώς εννοούμε με τη λέξη γεγονός; Κοιτάζοντας σε ένα λεξικό θα βρούμε τον ορισμό: “Γεγονός είναι κάτι, το οποίο πραγματικά έχει συμβεί”. Ο παραπάνω ορισμός είναι αρκετά γενικός και για να τον καταλάβουμε καλύτερα πρέπει να δούμε μερικά παραδείγματα γεγονότων: Όλα τα παραπάνω είναι γεγονότα, τα οποία οφείλονται είτε σε φυσικά αίτια, είτε σε ανθρώπινες παρεμβάσεις. Μελετώντας τα παραδείγματα βλέπουμε ότι τα γεγονότα περιγράφουν καταστάσεις, οι οποίες είναι ορισμένες με σαφήνεια και ακρίβεια, και δε μπορούν να μεταβληθούν. Το γεγονός είναι μια αφετηρία (αρχή, αιτία), για να εκτελεστεί μια σειρά από ενέργειες. Δηλαδή στο παράδειγμα μας το γεγονός “Τώρα άρχισε να βρέχει” είναι η αιτία, που προκαλεί την ενέργεια να πάρουμε ομπρέλα. Αντίστοιχα το γεγονός “Άναψε ο πράσινος φωτεινός σηματοδότης.” είναι η αιτία, που προκαλεί την ενέργεια να ξεκινήσουμε το αυτοκίνητο. Κοιτάζοντας την καθημερινή μας ζωή βλέπουμε πως πολλές ενέργειες μας, οδηγούνται από γεγονότα, είναι δηλαδή αποτέλεσμα γεγονότων. Ας το δούμε αυτό με ένα παράδειγμα: Ο Γιώργος κοιμάται. Στις 8 χτυπάει το ξυπνητήρι και ο Γιώργος σηκώνεται από το κρεβάτι και ντύνεται. Στη συνέχεια ανοίγει το παράθυρο και παρατηρεί τον καιρό. Έξω βρέχει, έτσι παίρνει μαζί του την ομπρέλα και πάει στο σχολείο.
 * 9.2 Η έννοια του γεγονότος και του γεγονοστραφή προγραμματισμού**
 * Τώρα άρχισε να βρέχει.
 * Το τραίνο έφτασε στον προορισμό του.
 * Η ώρα πήγε δύο το μεσημέρι.
 * Άναψε ο πράσινος φωτεινός σηματοδότης.

Στο παραπάνω απλό καθημερινό παράδειγμα μπορούμε να ξεχωρίσουμε τα εξής. Γεγονότα : Στις 8 χτυπάει το ξυπνητήρι, Έξω βρέχει. Αντίδραση: ο Γιώργος σηκώνεται από το κρεβάτι και ντύνεται, Παίρνει ομπρέλα.

Εικόνα 9.1

Ας ξεφύγουμε λίγο από την καθημερινότητα μας και ας δούμε τη συμβαίνει στον υπολογιστή. Μπορεί αυτό το μηχάνημα να κατανοεί ένα γεγονός και να εκτελεί μια σειρά ενεργειών, ως αποτέλεσμα του γεγονότος αυτού; Φυσικά και μπορεί! Στην περίπτωση, που θέλουμε να ανοίξουμε ένα αρχείο και κάνουμε διπλό κλικ πάνω του, τότε ο υπολογιστής καταλαβαίνει το γεγονός ότι έγινε διπλό κλικ πάνω σε κάποιο αρχείο και εκτελεί τις αντίστοιχες ενέργειες ώστε να το ανοίξει. Ο υπολογιστής λοιπόν αντιλαμβάνεται γεγονότα που προκαλούνται από τους χρήστες, μέσω συσκευών εισόδου, όπως πληκτρολόγιο, ποντίκι και μικρόφωνο. Αν και το παραπάνω παράδειγμα κρύβει υπερβολικά μεγάλη περιπλοκότατα πίσω του, εμείς θα περιοριστούμε στην γνώση ότι ο υπολογιστής είναι φτιαγμένος να αντιλαμβάνεται γεγονότα. Αφού λοιπόν ο υπολογιστής είναι φτιαγμένος να κατανοεί τα γεγονότα, έχουμε τη δυνατότητα να φτιάξουμε προγράμματα, στα οποία οι χρήστες θα έχουν άμεση συμμετοχή στην εκτέλεσή τους. Αυτός ο τρόπος προγραμματισμού ονομάζεται γεγονοστραφής. Ο γεγονοστραφής προγραμματισμός είναι ένα μοντέλο προγραμματισμού, που έχει ώς βασική αρχή τα προγράμματα να αντιδρούν λαμβάνοντας υπόψη γεγονότα, που αντιλαμβάνονται. Αυτά τα γεγονότα μπορεί να προέχονται από διάφορες πηγές, όπως η παρέμβαση κάποιου χρήστη (πατήθηκε το πλήκτρο κενό), μια κατάσταση στην οποία βρέθηκε ο υπολογιστής (η ώρα πήγε 5), αισθητήρες, χρονόμετρα και άλλα. Ακολουθώντας το μοντέλο του γεγονοσταφή προγραμματισμού, τα προγράμματά μας ξεφεύγουν από τη σειριακή εκτέλεση των εντολών και αποκτούν μια δυναμική εκτέλεση. Οι εντολές που γράφτηκαν δεν εκτελούνται η μια μετά την άλλη όπως μάθαμε μέχρι τώρα, αλλά εκτελούνται συγκεκριμένες εντολές, μόλις συμβεί ένα συγκεκριμένο γεγονός. Ένα γεγονός το οποίο συναντάμε στο scratch και το έχουμε δει αρκετές φορές έως τώρα χωρίς να το αναλύσουμε είναι η εντολή: Αυτό που κάνει η συγκεκριμένη εντολή είναι ο έλεγχος για το αν πατήθηκε η πράσινη σημαία. Όταν όντως το κουμπί αυτό πατηθεί, θα δημιουργηθεί ένα γεγονός το οποίο θα δηλώνει ότι το κουμπί πατήθηκε και θα εκτελεστεί ο κώδικας που ακολουθεί. Ας δούμε όμως τι γίνετε στον γεγονοστραφή προγραμματισμό. Μέχρι στιγμής στο βιβλίο έχουμε δει προγράμματα τα οποία εκτελούν εντολές σε σειρά, δηλαδή τη μια εντολή μετά την άλλη. Ο τρόπος αυτός εκτέλεσης παρουσιάζεται σχεδιαγραμματικά στην Εικόνα 9.2.1. Σε αυτή τη μέθοδο προγραμματισμού βασική δράση είναι ο σχεδιασμός και η υλοποίηση ενός προγράμματος το οποίο θα πετυχαίνει έναν προδιαγεγραμμένο στόχο, που μπορεί να είναι η κίνηση ενός αντικειμένού σε κάποια θέση ή μαθηματικοί υπολογισμοί.

Εικόνα: 9.2.1 : Βλέπουμε ότι οι εντολές εκτελούνται η μία μετά την άλλη. Δεν υπάρχει τρόπος να αλλάξουμε την ροή αυτής της εκτέλεσης. Ξέρουμε από την αρχή πια θα είναι η λειτουργία του προγράμματος.

Στην ακριβώς αντίθετη περίπτωση βρίσκετε το μοντέλο του γεγονοστραφούς προγραμματισμού, όπου οι εντολές εκτελούνται ανάλογα με τα γεγονότα που εμφανίζονται στο πρόγραμμά μας. Στην Εικόνα 9.2.2 βλέπουμε πώς είναι η εκτέλεση ενός προγράμματος με γεγονότα. Σε αυτό το μοντέλο προγραμματισμού βασική ιδέα είναι ότι σχεδιάζουμε την αντίδραση σε μια δράση. Στην περίπτωσή μας δράση θεωρείται ένα γεγονός, το οποίο συμβαίνει στο πρόγραμμά μας. Με αυτό τον τρόπο φτιάχνουμε προγράμματα τα οποία ενεργούν με διαφορετικό τρόπο κάθε φορά. Δεν γνωρίζουμε από την αρχή ποιο θα είναι το αποτέλεσμα της εκτέλεσης ενός τέτοιου προγράμματος, καθώς κάθε φορά μπορεί να εμφανίζονται διαφορετικά γεγονότα και έτσι διαφορετικά κομμάτια του προγράμματος μας να εκτελούνται.

Εικόνα: 9.2.2 : Οι εντολές που θα εκτελεστούν εξαρτώνται από το γεγονός το οποίο θα συμβεί.

Θα αναρωτιέστε πως όλα αυτά που είπαμε για τα γεγονότα και τον γεγονοστραφή προγραμματισμό μπορούμε να τα συνδέσουμε με τα προγράμματά μας στο scratch. Πώς δηλαδή μπορούμε εμείς οι προγραμματιστές να φτιάξουμε ένα πρόγραμμα το οποίο να εντοπίζει μια ενέργεια-γεγονός και να παράγει ένα συγκεκριμένο αποτέλεσμα; Οι δύο βασικές εντολές που αντιλαμβάνονται γεγονότα που προκαλεί ο χρήστης και επιτρέπουν να προσθέσουμε εντολές οταν κατι τέτοιο συμβεί είναι οι «Όταν το πλήκτρο ... πατηθεί» και «Ρώτησε .... και Περίμενε». Ας της αναλύσουμε.
 * 9.3 Όταν ο χρήστης παρεμβαίνει**


 * 9.3.1 Εντολή** **«****Όταν το πλήκτρο ... πατηθεί****»**

Πλήκτρα υπάρχουν παντού, στα κινητά, στις ηλεκτικές συσκευές, στο πιάνο, στους υπολογιστές και αλλού. Έχετε αναρωτηθεί την χρησιμότητα του καθενός; Για παράδειγμα το πιάνο αποτελείται απο 88 πλήκτρα που όλα μοιάζουν μεταξύ τους. Καθε διαφορετικό πλήκτρο που πατιέται παράγεται και ένας μοναδικός ήχος. Άρα το πάτημα των πλήκτρων καθορίζει το ηχήτικό αποτέλσμα. Στους υπολογιστές τα πλήκτρα παίζουν ακόμα μεγαλύτερο ρόλο απο ότι νομίζετε. Αρχικά οι υπολογιστές ανοίγουν με το πάτημα ενός πλήκτρου! Σε ένα κειμενογράφο τα πλήκτρα του πληκτρολογίου αναπαριστούν γράμματα και σύμβολα της γλώσσας μας. Σε όλα τα παιχνίδια που παίζουμε στον υπολόγιστή πατάμε πλήκτρα. Πλήκτρα που έχουν οριστεί να παράγουν κάποια συγκεκριμένη ενέργεια. Πώς όμως έχει οριστεί το κάθε πλήκτρο να κάνει κάτι; Το κάθε πρόγραμμα με διάφορες εντολές που διαθέτει ελέγχει αν πατήθηκε κάποιο πλήκτρο και αναλόγως δρά. Όλο αύτο όσο παράξενο και άν ακούγεται γίνεται καθόλη τη διάρκεια πού ένα πρόγραμμα τρέχει! Ας δούμε τώρα πως μπορούμε να χρησιμοποιήσουμε τα πλήκτρα στο Scratch.

Μεχρι στιγμής έχετε μετακινήσει αντικείμενα, αλλάξατε ενδυμασίες, παρήγατε ήχους αλλά τίποτα απο όλα αυτά δεν έγινε πατώντας κάποιο πλήκτρο, δηλαδή με τη θέληση του χρήστη. Η εντολή που μας διαθέτει το Scratch για να ορίσουμε διάφορες συμπεριφορές στα πλήκτρα μας είναι “όταν το πλήκτρο.. πατηθεί”.

Εικόνα 9.3

Άς φτιάξουμε για αρχή ένα απλό πρόγραμμα για να εισάγουμε την καινούργια εντολή.Το πρόβλημά μας έχει 2 αντικείμενα, το ελικόπτερο και την πίστα. Η επιθυμητή συμπεριφορά του ελικοπτέρου είναι η εξής:

α) Όταν πατάμε το πάνω πλήκτρο θέλουμε το ελικόπτερο να αλλάζει κατεύθυνση προς τα πάνω και να κινείται προς τα πάνω. β) Όταν πατάμε το κάτω πλήκτρο, θέλουμε το ελικόπτερο να αλλάζει κατεύθυνση προς τα κάτω και να κινείται προς τα κάτω. γ) Όταν πατάμε το δεξιά πλήκτρο, θέλουμε το ελικόπτερο να αλλάζει κατεύθυνση προς τα δεξιά και να κινείται δεξιά. δ)Όταν πατάμε το αριστερά πλήκτρο, θέλουμε το ελικόπτερο να αλλάζει κατεύθυνση προς τα αριστερά και να κινείται αριστερά.



Εικόνα 9.4

Όπως είδαμε στο κεφάλαιο 5 υπάρχουν 3 διαφορετικοί τρόποι κίνησης. Εμείς θέλουμε κάθε φορά που πατάμε ένα βελάκι να πραγματοποιείται μια μικρή μετακίνηση του αντικειμένου μας, σε αυτή την περίπτωση του ελικοπτέρου. Επίσης αν θέλουμε να αλλάζει και κατεύθυνση το αντικείμενό μας τότε η καλύτερη επιλογή είναι ο συνδυασμός των εντολών δείξε στην κατεύθυνση και κινήσου βήματα. Εικόνα 9.5 Ας ρίξουμε μια ματιά στον κώδικα που αφορά το ελικόπτερο του παραδείγματός μας.

Εικόνα 9.6 Έτσι με τον συνδυασμό των 3 αυτών εντολών μπορούμε να υλοποιήσουμε την κίνηση του ελικοπτέρου μας προς μία συγκεκριμένη κατεύθυνση, την οποία έχουμε επιλέξει εμείς οι ίδιοι.Τι άλλο θα μπορούσαμε να κάνουμε; Πραγματικά ότι σας περνάει απο το μυαλό! Έχετε στην διαθεσή σας όλα τα πλήκτρα του πληκτρολογιου και ότι λειτουργία φανταζεστε. Για παράδειγμα άν ο χρήστης πατήσει “το κενό” αλλάζει το σκηνικό υπόβαθρο. Ας το υλοποιήσουμε.

Δημιουργούμε με τη βοήθεια της ζωγραφικής 3 διαφορετικά υπόβαθρα. Εικόνα 9.7 Ο κώδικας που μας επιτρέπει να αλλάζουμε πίστα όταν πατήσουμε το κενό πλήκτρο είναι ο παρακάτω. Εικόνα 9.8 Όπως παρατηρούμε, κάνουμε πάλι χρήση της εντολής "Όταν το πλήκτρο... πατηθεί", αυτή τη φορά σε συνδυασμό με την εντολή "Επόμενο υπόβαθρο" από την παλέτα όψεις.

Στο κεφάλαιο 8 είδαμε πως μπορούμε να δημιουργήσουμε μια μελωδία χρησιμοποιώντας το scratch. Ας δούμε τώρα πως θα μπορούσαμε με τη χρήση της εντολής "Όταν το πλήκτρο... πατηθεί" να επεκτείνουμε τα παραδείγματα που είδαμε, με σκοπό να παίζουμε εμείς το ρόλο του πιανίστα. Συγκεκριμένα θα υλοποιήσουμε ένα πρόγραμμα το οποίο θα περιέχει ένα αντικείμενο, το πιάνο.

Εικόνα 9.9

Όπως είδαμε στο προηγούμενο παράδειγμα με το ελικόπτερο, μπορούμε να αναθέσουμε σε κάθε πλήκτρο του πληκτρολογίου μια κίνηση του ελικοπτέρου προς μια συγκεκριμένη κατεύθυνση, και πατώντας τα πλήκτρα που έχουμε ορίσει ως επιθυμητές κινήσεις να ελέγχουμε το ελικόπτερο μέσα στο παιχνίδι. Η δημιουργία του πιάνου στο scratch είναι κάτι ανάλογο με το παιχνίδι του ελικοπτέρου, μόνο που τώρα θα πρέπει να αναθέσουμε σε κάθε πλήκτρο μια νότα του πιάνου. Εικόνα 9.10

Όπως παρατηρούμε έχουμε συνδυάσει την εντολή "Όταν το πλήκτρο ... πατηθεί" με την εντολή "Παίξε νότα ... για ... χρόνους " από την παλέτα ήχος. Με αυτόν τον τρόπο πατώντας ένα πλήκτρο στο πληκτρολόγιο μας το πρόγραμμα παίζει τη νότα που έχει ανατεθεί στο συγκεκριμένο αυτό πλήκτρο. Εικόνα 9.11 Ας ρίξουμε μια ματιά σε όλες τις εντολές του προγράμματος μας. Εικόνα 9.12

Στο παράδειγμα αυτό έχουμε προσπαθήσει να απεικονίσουμε την ακολουθία των πλήκτρων του πιάνου στο πληκτρολόγιο. Όπως βλέπουμε η μόνη διαφορά του παραδείγματος αυτού με το παραπάνω είναι ότι έχουμε χρησιμοποιήσει περισσότερες εντολές και αυτό γιατί πρέπει να καθορίσουμε τη συμπεριφορά του προγράμματος μας με βάση των αριθμό των νοτών. Έτσι τα πλήκτρα που πρέπει να ορίσουμε είναι αρκετά περισσότερα.

Ας προσπαθήσουμε τώρα με λίγα λόγια να συνοψίσουμε την λειτουργία της εντολής "Όταν το πλήκτρο... πατηθεί". Στην εντολή μας, το «όταν» έχει τη μορφή ενός ελέγχου. Δηλαδή όταν συμβεί ένα συγκεκριμένο γεγονός στο πρόγραμμά μας αυτό θα πυροδοτήσει ένα αποτέλεσμα.Το γεγονός το οποίο ελέγχει η «όταν» είναι αυτό που ακολουθεί, δηλαδή «το πλήκτρο…πατηθεί». Αυτό το κομμάτι αναφέρεται σε ένα συγκριμένο πλήκτρο από το πληκτρολόγιό μας το οποίο μπορεί να πατηθεί. Το πλήκτρο αυτό το ορίζουμε εμείς και μπορεί να είναι οποιοδήποτε. Το scratch μας προσφέρει μια λίστα πλήκτρων στα οποία μπορούμε να εισάγουμε τον έλεγχο μας. Ας σκεφτούμε για παράδειγμα το γνωστό παιχνίδι Pacman. Το αντικείμενο Pacman απλά μετακινείται μέσα στις πίστες με σκοπό να μαζεύει φρουτάκια και να αποφεύγει τους κακούς. Διαπιστώνουμε ότι στο scratch μπορουμε να υλοποιήσουμε την κίνηση του pacman με τη χρήση της “όταν το πλήκτρο πατηθεί” 4 φόρες, μία για κάθε βελάκι. Όπως είναι αυτονόητο το πρόγραμμά μας θα ελέγχει μόνο αν πατηθεί κάποιο από αυτά τα συγκεκριμένα πλήκτρα, και δε θα δώσει καμία σημασία στο αν πατηθεί κάποιο άλλο πλήκτρο εκτός αυτών.

Πόσες φορές σας έχουν ρωτήσει κάτι και περιμένουν μια απάντηση για να συνεχιστεί ο διάλογος ή για να ολοκληρωθεί κάποια ενέργεια; Στην προκειμένη περίπτωση η απάντηση σας θεωρείται ως ένα γεγονός η οποία θα πυροδοτήσει μία ενέργεια. Στο Scratch η εντολή ** «Ρώτησε ... και περίμενε» ** βρίσκεται στην παλέτα Αισθητήρες. Η μορφή της είναι η παρακάτω: Εικόνα 9.13 Ρώτησε και περίμενε
 * 9.3.2 Εντολή «Ρώτησε .... και Περίμενε»**

Καταλαβαίνουμε αμέσως ότι η εντολή «Ρώτησε ... και περίμενε» είναι μια εντολή που ακολουθεί την τεχνική και τη φιλοσοφία του γεγονοστραφούς προγραμματισμού. Δηλαδή το πρόγραμμα περιμένει ένα γεγονός, στην προκειμένη περίπτωση μια απάντηση από το χρήστη, δηλαδή εμάς, ώστε να μπορέσει να συνεχίσει την εκτέλεση των εντολών που βρίσκονται μετά την εντολή «Ρώτησε ... και περίμενε». Ας γνωρίσουμε όμως αυτήν την εντολή με ένα παράδειγμα. Στο παραδειγμα αυτό θα δειξουμε πως σε ένα προγραμμα του scratch μπορούμε να ενσωματώσουμε μια εντολή όπως η παραπάνω. Θα δειξουμε πως ενα «γεγονός» όπως η απάντηση μας μεσω της εισόδου του πληκτρολογίου μπορεί να ξεκινήσει μια σειρά από άλλες «εργασίες» όπως αλλαγές ενδυμασίας καθώς και κίνηση. Ας φτίαξουμε λοιπόν τον χαρακτήρα μας, τον αργοπορημένο Κόμη. Στο πρόγραμμα μας έχουμε δύο αντικείμενα τον αργοπορημένο Κόμη και το σκηνικο. Οι ενέργειες του Κόμη είναι οι εξής: Αφού λάβει απάντηση για το τι ώρα είναι αλλάζει ενδυμασία και “αποχωρεί” απο το σκηνικό.

Εικόνα 9.14 Ο κόμης μας

Πριν "τρέξουμε" το πρόγραμμα μας ας δούμε αναλυτικότερα ποιες εντολές έχουμε χρησιμοποιήσει: Αρχίζουμε με την εντολή ** «Όταν στο ... γίνει κλικ» ** από την παλέτα του Ελέγχου. Εικόνα 9.15

Συνεχίζουμε με την εντολή **«****Ρώτησε ... και περίμενε****»**, η οποία είναι και η εντολή που μας ενδιαφέρει: Εικόνα 9.16

Στη συνέχεια έχουμε τις εντολές **«****Πες...****»** και **«****Αλλαγή σε ενδυμασία...****»** από την παλέτα Όψεις: Εικόνα 9.1 7

Προσθέτουμε την εντολή **«****κινήσου ομαλά # δευτερόλεπτα στο** **x****: ...** **y****: ...****»** από την παλέτα Κίνηση (για την εντολή της κίνησης βλέπε κεφάλαιο 5.3) έτσι ώστε η νυχτερίδα μας να φύγει απο το σκηνικό: Εικόνα 9.18

Τέλος, προσθέτουμε δύο ακόμα εντολές έτσι ώστε όταν το πρόγραμμα τελείωνει να επανατοποθείται ο κόμης στην αρχική του θέση και με την κατάλληλη μορφη. Εικόνα 9.19

Ας δούμε τώρα βήμα βήμα την εκτέλεση του προγράμματος μας. Πατώντας το πράσινο σημαιάκι για να ξεκινήσει η εκτέλεση βλέπουμε το εξής: Όπως παρατηρούμε με τη χρήση της εντολής **«****Ρώτησε ... και περίμενε****»** το αντικείμενο, στη συγκεκριμένη περίπτωση ο Κόμης, μας κάνει μια ερώτηση, ενώ στο κάτω μέρος της επιφάνειας εργασίας εμφανίζεται ένα πεδίο διαλόγου στο οποίο εμείς μπορούμε να δώσουμε μια απάντηση. Πρέπει να σημειώσουμε ότι ο Κόμης είναι πολύ πεισματάρης, και δεν θα μας αφήσει σε ησυχία μέχρι να του δώσουμε μια απάντηση. Το σημαντικό στοιχείο της εντολής είναι ότι το πρόγραμμα δεν θα προχωρήσει στην εκτέλεση των παρακάτω εντολών μέχρι να λάβει μια δική μας απάντηση, δημιουργώντας έτσι μια μορφή αλληλεπίδρασης μεταξύ του αντικειμένου μας και εμάς τους ίδιους! Βλέπουμε δηλαδή ότι η εντολή **«****Ρώτησε ... και περίμενε****»** "σπάει" το πρόγραμμα μας σε δύο μέρη, περιμένοντας μια δική μας ενέργεια για να μπορέσει να συνεχίσει την εκτέλεση του. εικόνα 9.20 Ό κόμης αναρωτίεται

Ας δώσουμε λοιπόν στον Κόμη μας μια απάντηση, ας πούμε ότι η ώρα πήγε 12 όπως βλέπουμε και στην εικόνα 9.21: Εικόνα 9.21 Δίνοντας την απάντηση Πληκτρολογώντας «12» στο πεδίο διαλόγου που μας έχει ανοίξει το πρόγραμμα μας και πατώντας το enter βλέπουμε (εικόνα 9.22) τον Κόμη να μεταμορφώνεται σε νυχτερίδα, χρησιμοποιώντας την εντολή **«****αλλαγή ενδυμασίας****»** από την παλέτα Όψεις και να φεύγει βιαστικά και πάνω από όλα, με στυλ... : Εικόνα 9.22 Ο κόμης αποχωρεί..

Ας δώσουμε τώρα ένα ακόμα παράδειγμα οπου καλούμαστε να δημιουργήσουμε ένα πρόγραμμα στο οποίο θα επιτυγχάνεται διάλογος! Το περιβάλλον μας θα είναι η αυλή του σχολείου. Τα αντικείμενα μας είναι 2, το σκηνικό του σχολείου κ ένα κορίτσι. Το κορίτσι κάνει ερωτήσεις και εμείς με τη σειρά μας απαντάμε δίνοντας έτσι συνέχεια στο διάλογο. Εικόνα 9.23 Θα έχουμε μια σύντομη κ ευγενική συνομιλία με τη φίλη μας. Το προγραμμά μας θα έχει ως εξής: Εικόνα 9.24 Αυτή είναι η, απαραίτητη, εντολή εκκίνησης

Εικόνα 9.25 Η εντολή «Ρώτησε…και περίμενε» που όπως φαντάζεστε παίζει τον πιο σημαντικό ρόλο στο συγκεκριμένο πρόγραμμα.

Εικόνα 9.26

Εικόνα 9.27

Κάποιες από τις απαιτόυμενες εντολές ώστε ο χαρακτήρας που δημιουργήσαμε να μπορεί να κανει «διάλογο» εμφανίζοντας τις ερωτήσεις και τις απαντήσεις.

Ας δούμε τώρα το παραδειγμά μας σε λειτουργία. Η φίλη μας θα ξεκινισει τη συνομιλία! Εικόνα 9.28

Εδώ το πρόγραμμα μας θα συνεχίσει τον διάλογο μόλις δώσουμε μια απαντηση, όπως θα ήταν φυσικό κ στον πραγματικό κοσμο.

Εικόνα 9.29

Δίνουμε την απαντησή μας από την είσοδο του πληκτρολογίου, πράγμα που το πρόγραμμα αντιλαμβάνεται σα το γεγονός που του επιτρέπει να συνεχίσει την εκτελεσή του.

Τωρα θα λάβουμε μιαν απάντηση.είπαμε ότι πετυχαίνουμε διαλογο, ετσι δεν είναι;

Εικόνα 9.30

Ο χαρακτήρας μας στα πλαίσια του διαλόγου θα μας κάνει άλλη μια ερώτηση!

Εικόνα 9.31

Και πάλι το πρόγραμμα περιμενει την είσοδο από το πληκτρολόγιο.

Εικόνα 9.32

Απαντάμε με ευγένεια.

Με αποτέλεσμα να ο χαρακτήρας κορίτσι να ανταποκριθει με ακομα δυο φράσεις.

Εικόνα 9.33

Εικόνα 9.34

Εφαρμογές προς Υλοποίηση:
 * 9.4 Ασκήσεις**

1)Υλοποιείστε με τη βοήθεια της εντολής "Όταν το πλήκτρο ... πατηθεί" και χρησιμοποιώντας τις εντολές από την παλέτα ήχος ένα μουσικό όργανο, το οποίο θα παίζετε εσείς οι ίδιοι πατώντας πλήκτρα στο πληκτρολόγιο. Μπορείτε να χρησιμοποιήσετε τους ήχους που σας παρέχει το scratch ή/και να ηχογραφήσετε δικού σας ήχους.

2)Υλοποιείστε με τη βοήθεια της εντολής "Ρώτησε ... και περίμενε" μια εικονική συναλλαγή με το περίπτερο της γειτονιάς σας, χρησιμοποιώντας εντολές από τις παλέτες έλεγχος, όψεις και κίνηση. Το σενάριο της συναλλαγής προϋποθέτει την μετακίνηση του αντικειμένου πελάτη προς το περίπτερο, την συζήτηση μεταξύ των αντικειμένων πελάτη και περιπτέρου, και την μετακίνηση του πελάτη από το περίπτερο. Καλείστε να εμπλουτίσετε αυτό το σενάριο με όποιον τρόπο θέλετε και χρησιμοποιώντας εντολές από όλες τις παλέτες που έχετε διδαχθεί.

3)Υλοποιείστε με τη βοήθεια της εντολής "Όταν το πλήκτρο ... πατηθεί" και της εντολής "Ρώτησε ... και περίμενε" μια θεατρική παράσταση, στην οποία εσείς οι ίδιοι θα είστε ο σκηνοθέτης, επιλέγοντας ποιος χαρακτήρας του έργου θα εμφανιστεί, τι θα πει και τι θα κάνει με το πάτημα ενός συγκεκριμένου πλήκτρου. Χρησιμοποιείστε κάποιο σενάριο από μια θεατρική παράσταση, μια ταινία που έχετε παρακολουθήσει, η φτιάξτε ένα δικό σας σενάριο. Μπορείτε να χρησιμοποιήσετε εντολές από όλες τις παλέτες που έχετε διδαχθεί.

Θεωρητικές Ερωτήσεις 1)Να καταγραφούν τα γεγονότα που αντιλαμβάνεται το πρόγραμμα και τις διαφορετικές συμπεριφορές που δημιουργούνται σε ένα παιχνίδι Pacman. 2)Ποιά είναι η διαφορά του σειριακού μοντέλου προγραμματισμού με το μοντέλο προγραμματισμού με γεγονότα; 3)Δικαιολογήστε γιατί είναι απαραίτητος ο γεγονοστραφής προγραμματισμός και συγκεκριμένα η εντολή όταν το πλήκτρο πατηθεί για τα περισσότερα παιχνίδια. 4)Συζητήστε με τους συμμαθητές σας σχετικά με τον αν θα ήταν δυνατή η υλοποίηση του προγράμματος Ελικόπτερο χωρίς την χρήση της Οταν το πλήκτρο πατηθεί και γενικά χωρίς την χρήση γεγονότων. 5)Ποιό είναι το βασικό χαρακτηριστικό της Ρώτησε και Περίμενε. 6)Χωριστείτε σε ομάδες και αναφέρετε προγράμματα που θα είναι χρήσιμη η εντολή Ρώτησε και Περίμενε. 7)Συμπλήρώστε το σταυρόλεξο.

1) _ _ Γ _ _ _ _ _ _ _ _ _ 2) _ _ _ _ _ Ε _ _ _ _ _ _ _ _ _ _ _ _ 3) _ _ _ Γ _ _ _ 4) _ _ _ _ _ _ _ _ _ _ _ _ Ο _ _ _ _ _ _ _ 5) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Ν _ 6) _ _ _ _ _ _ _ _ Ο _ _ _ 7) Σ _ _ _ _ _ _ _ _ _ _

1.Προγραμματισμός που βασίζεται σε γεγονότα. 2.Προγραμματισμός που βασίζεται σε αντικείμενα. 3.Παλέτα στην οποία βρίσκεται η εντολή όταν το πλήκτρο πατηθεί(μια λέξη). 4.Εντολή που αντιλαμβάνεται γεγονότα απο το πάτημα των πλήκτρων. 5.Απαραίτητη εντολή για να ξεκινήσει μια συζήτηση. 6.Μονάδα εισόδου που προκαλεί γεγονότα. 7.Δημιουργουνται διαφορετικές .... ανάλογα με το γεγονός

Ανακεφαλαιόνοντας, περιγράψαμε την έννοια του γεγονότος και αναλύσαμε το μοντέλο του γεγονοστραφούς προγραμματισμού και τις διαφορές του με την σειριακή εκτέλεση. Μέσω κατάλληλων παραδειγμάτων εξηγήσαμε τη χρήση των δύο βασικών εντολών(βλέπε Πίνακα 9.1) που χειρίζονται τα γεγονότα και δημιουργούν διαφορετικές συμπεριφορές εκτέλεσης.
 * __Ανακεφαλαίωση__**

Πίνακας 9.1
 * Εντολές || **Επεξήγηση Εντολών** ||
 * «Όταν το πλήκτρο πατηθεί» || Αντιλαμβάνεται αν ο χρήστης πάτησε το πλήκτρο που έχουμε ορίσει για να εκτελέσει την ενέργεια που ακολουθεί ||
 * «Ρώτησε .. και περίμενε» || Εμφανίζει την ερώτηση που θέλουμε και περιμένει απάντηση από το πληκτρολόγιο ||