Παιχνίδι μνήμης με εικόνες

 

Ταυτότητα Σεναρίου

 

·         Τίτλος: Παιχνίδι μνήμης με εικόνες

 

·         Γνωστικό Αντικείμενο: Εφαρμογές Πληροφορικής-Υπολογιστών

 

·         Διδακτική Ενότητα: Διερευνώ - Δημιουργώ-Ανακαλύπτω, Συνθετικές εργασίες. Δημιουργικές δραστηριότητες με χρήση πακέτων λογισμικού, προγραμματιστικών εργαλείων, υπηρεσιών του Internet, εκπαιδευτικού λογισμικού.

 

·         Τάξη: Β' Λυκείου

 

·         Εκτιμώμενη Διάρκεια: 5 ώρες

 

Σύντομη ανασκόπηση σεναρίου

 

 

Στο πλαίσιο της εργασίας, οι μαθητές καλούνται να κατασκευάσουν ένα γνωστό παιχνίδι μνήμης. Η οθόνη δράσης περιλαμβάνει έναν πίνακα χωρισμένο σε 16 κελιά. Τα κελιά αυτά περιέχουν εικόνες από διάφορα κοχύλια. Κάθε κοχύλι επαναλαμβάνεται δύο φορές, σε τυχαία σημεία. Οι απεικονίσεις είναι καλυμμένες αρχικά (Εικόνα 16 - 1) και μόνο όταν ο χρήστης κάνει κλικ με το ποντίκι σε κάποιο κελί αποκαλύπτει την κρυμμένη εικόνα.

 

 

 

Εικόνα 17 - 1

 

Σκοπός είναι με δύο συνεχείς «αποκαλύψεις» να εμφανιστούν δύο ίδιες εικόνες, οπότε και παραμένουν ανοιχτές (Εικόνα 16 - 2). Αν δεν επιτευχθεί αυτό, τα κελιά κλείνουν και πάλι. Ο χρήστης, πρέπει να θυμάται τις θέσεις των εικόνων που έχει ανοίξει ώστε κάθε φορά που ανοίγει κάποια να αναζητά το ζευγάρι της. Αν η μνήμη του είναι δυνατή, σύντομα θα καταφέρει να ανακαλύψει όλα τα ζεύγη και να τερματίσει έτσι το παιχνίδι (Εικόνα 16 - 3).

Εικόνα 17 - 2

 

Εικόνα 17 - 3

 

 

AgentSheets, Ζωγραφική.

 

 

Οι προσομοιώσεις προσφέρονται σε δύο διαφορετικές εκδόσεις: Η μία έκδοση, η οποία περιέχει και τον πηγαίο κώδικα, αποτελεί έργο του AgentSheets και λειτουργεί μόνο στο περιβάλλον της εφαρμογής AgentSheets. Η δεύτερη έκδοση είναι σε μορφή applet και λειτουργεί μέσω ενός οποιουδήποτε φυλλομετρητή (Internet Browser), όπως ο Internet Explorer ή ο Mozilla Firefox.

 

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

 

Για να λειτουργήσουν ορθά τα applets θα πρέπει ο υπολογιστής να έχει εγκατεστημένο το Java Runtime Environment (JRE) και ο φυλλομετρητής να είναι ενεργοποιημένος ως προς την εκτέλεση εντολών Java (Java enabled). To JRE μπορείτε να το κατεβάσετε από το Internet (http://www.java.com), αλλά για ευκολία εγκαθίσταται αυτόματα και κατά την εγκατάσταση του AgentSheets.

 

Αν έχετε εγκαταστήσει το AgentSheets ή έχετε κατεβάσει το JRE στον υπολογιστή σας και παρόλα αυτά δεν μπορείτε να δείτε τις προσομοιώσεις στα applets, τότε θα πρέπει να ελέγξετε τις ρυθμίσεις του φυλλομετρητή που χρησιμοποιείτε. Στον I.E. επιλέξτε Εργαλεία -> Επιλογές Internet. Στο παράθυρο που ανοίγει επιλέξτε Ασφάλεια -> Προσαρμοσμένο Επίπεδο και εκεί κάντε κλικ στην επιλογή Ενεργοποίηση κάτω από την περιγραφή Εκτέλεση βοηθητικών εφαρμογών της Java. Αντίστοιχα, στο Mozilla  Firefox επιλέξτε Εργαλεία -> Επιλογές. Στο παράθυρο που ανοίγει επιλέξτε Περιεχόμενο και κάντε κλικ στο πεδίο Ενεργοποίηση Java.

 

Συσχέτιση γνωστικού αντικειμένου και σεναρίου

 

Η υλοποίηση των συνθετικών εργασιών της ενότητας Διερευνώ-Δημιουργώ-Ανακαλύπτω από τους μαθητές, στοχεύει στην εξοικείωσή τους με τα σύγχρονα προγραμματιστικά εργαλεία, μέσα από μια προσπάθεια εύρεσης ορθού και αποτελεσματικού τρόπου επίλυσης ενός δεδομένου προβλήματος .

 

Στη συγκεκριμένη εργασία, οι μαθητές καλούνται να υλοποιήσουν ένα παιχνίδι που τους είναι ήδη γνωστό αφού κυκλοφορούν διάφορες υλοποιήσεις του στο εμπορίο. Ωστόσο, το πιθανότερο είναι να μην το έχουν δει ποτέ με μια «κατασκευαστική» ματιά. Στόχος λοιπόν είναι να περάσουν οι μαθητές από την πλευρά του χρήστη-παίκτη στην πλευρά του κατασκευαστή, να αναζητήσουν την ορθολογικότερη λύση και σε τελική φάση να αντιληφθούν πώς με καλά δομημένη λογική και με πλήρη αξιοποίηση των εργαλείων που διαθέτουν μπορούν να επιτύχουν την επιθυμητή λειτουργικότητα ευκολότερα από όσο φαντάζονταν αρχικά.

 

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

Ο εκπαιδευτικός πρέπει σε κάθε φάση να αφήσει ελεύθερους τους μαθητές να εκφράσουν τις απόψεις τους και έπειτα από αποτυχημένες προσπάθειες και συζήτηση να καταλήξουν στη λύση.

Πρέπει να γίνουν αντιληπτά από τους μαθητές τα διακριτά στάδια ανάπτυξης ενός έργου λογισμικού (Σχεδίαση-Ανάλυση-Υλοποίηση-Έλεγχος).

 

Εκπαιδευτικές δραστηριότητες

 

Δραστηριότητα 1: « Παιχνίδι μνήμης με εικόνες»

Γενικοί διδακτικοί στόχοι:

 

·         Να εξοικειωθούν με το προγραμματιστικό περιβάλλον.

·         Να αποκτήσουν ορθολογική σκέψη στην προσπάθειά τους να επιλύσουν προγραμματιστικά κάποιο δοθέν πρόβλημα και να μπορούν να το αποδομήσουν κατάλληλα σε επιμέρους εργασίες.

·         Να αντιληφθούν ότι φαινομενικά δύσκολα προβλήματα μπορούν να λυθούν με απλό και αποτελεσματικό τρόπο.

 

Ειδικοί διδακτικοί στόχοι:

 

·         Να μπορούν να ορίσουν τους απαραίτητους για ένα πρόβλημα πράκτορες και να αντιληφθούν την έννοια των διάφορων απεικονίσεων.

·         Να κατανοήσουν την έννοια της συμπεριφοράς ενός πράκτορα και να την ταυτίσουν εννοιολογικά με το σύνολο των μεθόδων του.

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

·         Να ξεκαθαρίσουν τους τρόπους κλήσης μίας μεθόδου και τον τρόπο που αντιδρά ο αντίστοιχος πράκτορας σε αυτή.

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

·         Να ξεκαθαρίσουν την έννοια της  μεταβλητής προσομοίωσης  και της μεταβλητής πράκτορα.

 

Προαπαιτούμενα:

 

Για την υλοποίηση της συγκεκριμένης συνθετικής εργασίας πρέπει ο εκπαιδευτικός να έχει αποκτήσει εμπειρία στη δημιουργία προσομοιώσεων με το προγραμματιστικό περιβάλλον Αgentsheets και να έχει υλοποιήσει τουλάχιστον την προσομοίωση Virus Attack. Το ίδιο ισχύει και για τους μαθητές.

 

Χρονισμός εφαρμογής:

 

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

 

Προετοιμασία:

 

Για την υλοποίηση της δραστηριότητας θα πρέπει να υπάρχει στο σχολικό εργαστήριο εγκατεστημένο το AgentSheets. Επίσης, η χρήση του βιντεοπροβολέα για την επίδειξη της υλοποιημένης λύσης του κάθε προβλήματος από τον εκπαιδευτικό, θα βοηθούσε στην αποτελεσματικότερη ροή της δραστηριότητας μέσα στα πλαίσια της μιας διδακτικής ώρας. Ανάλογα με το δυναμικό της τάξης, ο εκπαιδευτικός μπορεί να αποφασίσει εάν οι μαθητές θα δουλέψουν στο AgentSheets με ήδη δημιουργημένες τις οντότητες (πράκτορες) ή αν θα τις δημιουργήσουν μόνοι τους χρησιμοποιώντας τα σχεδιαστικά εργαλεία του περιβάλλοντος.

Ροή της δραστηριότητας:
Βήμα 1ο (Διάρκεια: 1 διδακτική ώρα)

 

Σε πρώτη φάση ο διδάσκων θα πρέπει να εισάγει τους μαθητές στο νόημα της εργασίας. Θα διατυπώσει το πρόβλημα αναλυτικά και θα το επιδείξει με τη βοήθεια του βιντεοπροβολέα, ώστε να γίνει πλήρως αντιληπτή από τους μαθητές η επιθυμητή λειτουργικότητα (Εικόνες 17 - 1, 2 και 3). Οι μαθητές πρέπει να έχουν πλήρη γνώση της ακριβούς συμπεριφοράς του παιχνιδιού προκειμένου να συμμετέχουν ενεργά στην υλοποίησή του στα επόμενα βήματα.

 

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

 

Οι προτεινόμενοι Πράκτορες:

 

Πράκτορας Εικόνα: Πρόκειται για τον πράκτορα των διαφόρων εικονιδίων (κοχύλια) που βρίσκονται στα κελιά του πίνακα του παιχνιδιού και αρχικά είναι καλυμμένα. Το πλήθος των απεικονίσεών του ισούται με το πλήθος θέσεων του πίνακα διά δύο, αφού κάθε εικόνα εμφανίζεται δύο φορές στο παιχνίδι.

 

Πράκτορας Κάλυμμα: Τα αντικείμενα τύπου Κάλυμμα τοποθετούνται πάνω από τα αντικείμενα τύπου Εικόνα προκειμένου να κρύψουν την απεικόνιση των τελευταίων. Ο πράκτορας Κάλυμμα έχει μόνο μία απεικόνιση.

 

Οι μαθητές ενεργοποιούν έπειτα το πρόγραμμα Agentsheets προκειμένου να δημιουργήσουν τους παραπάνω πράκτορες. Επιλέγουν Αρχείο->Νέο Έργο. Καθορίζουν το όνομα έργου και τις διαστάσεις των πρακτόρων. Σημειώνεται ότι όλοι οι πράκτορες ενός έργου έχουν τις ίδιες διαστάσεις και αυτές δεν είναι δυνατό να αλλάξουν μετά την δημιουργία του. Γίνεται εστίαση στην Εικονοθήκη του έργου (Εικόνα 17 - 4), που στη φάση αυτή είναι κενή και εξετάζονται οι επιλογές πάνω σε αυτή.

 

Εικόνα 17 - 4

 

Για την δημιουργία νέου πράκτορα επιλέγεται το αντίστοιχο κουμπί Νέος Πράκτορας, ενώ για τις διάφορες απεικονίσεις Νέα Απεικόνιση, έχοντας πάντα επιλεγμένο τον πράκτορα για τον οποίο προορίζεται η απεικόνιση. Με διπλό κλικ επάνω σε μια απεικόνιση ή με την επιλογή Επεξεργασία απεικόνισης, την τροποποιούμε με δύο τρόπους: είτε κάνοντας χρήση των σχεδιαστικών εργαλείων που προσφέρονται, είτε εισάγοντας εικόνα από εξωτερικό αρχείο με Αρχείο->Εισαγωγή Εικόνας (Εικόνα 17 - 5).

 

Εικόνα 17 - 5

 

Για τις απεικονίσεις του πράκτορα Εικόνα οι μαθητές μπορούν να εισάγουν τις δοθείσες εικόνες. Εναλλακτικά μπορούν να σχεδιάσουν μόνοι τους τις απεικονίσεις με τα σχεδιαστικά εργαλεία που προσφέρονται ή ακόμη και να δημιουργήσουν εικόνες στη Ζωγραφική και έπειτα να τις εισάγουν. Με τον τελευταίο τρόπο μπορούν ακόμη και να γράψουν τα ονόματά τους (με το εργαλείο κειμένου της Ζωγραφικής), να τα εισάγουν ως εικόνες στις απεικονίσεις και να δώσουν έτσι ένα διαφορετικό ύφος στο παιχνίδι. Για την απεικόνιση του πράκτορα Κάλυμμα ισχύουν τα ίδια. Οι πράκτορες είναι τώρα έτοιμοι (Εικόνα 17 - 6).

 

Εικόνα 17 - 6

 

Βήμα 2ο (Διάρκεια: 1 διδακτική ώρα)

 

Στο στάδιο αυτό θα δημιουργηθεί το Πεδίο Εργασίας του παιχνιδιού. Οι μαθητές επιλέγουν Αρχείο->Νέο Πεδίο Εργασίας και ανοίγει ένα κενό πεδίο. Με Αρχείο ->Φόρτωμα Φόντου εισάγουν το φόντο από τον φάκελο με τις Εικόνες. Έχοντας επιλεγμένο τον προς τοποθέτηση πράκτορα και με χρήση του εργαλείου εισαγωγής (Εικόνα17 - 7), τοποθετούνται στο πεδίο πρώτα οι απεικονίσεις και έπειτα από πάνω τα καλύμματα (Εικόνες 17 - 8,9).

 

Εικόνα 17 - 7

 

Εικόνα 17 - 8

 

Με Αρχείο->Αποθήκευση αποθηκεύεται το έτοιμο πλέον Πεδίο Εργασίας. Ξεκινά ένας προβληματισμός για τον τρόπο «αποκάλυψης» των εικόνων κατά την εκτέλεση του παιχνιδιού. Στο σημείο αυτό γίνεται εκτενής αναφορά στις έννοιες μέθοδος και ενεργοποιητής. Αναφέρεται ότι ο κώδικας ενός προγράμματος δεν είναι ένα σύνολο εντολών που εκτελούνται σειριακά αλλά δομείται σε μεθόδους που αντιστοιχούν σε πράκτορες και εκτελούνται έπειτα από άκουσμα μηνυμάτων. Τα μηνύματα αυτά μπορεί να απευθύνονται σε συγκεκριμένο πράκτορα ή σε ομάδα πρακτόρων. Ακόμα, μπορεί να υπάρχουν μέθοδοι που εκτελούνται καθ' όλη τη διάρκεια λειτουργίας του προγράμματος και άλλες που εκτελούνται αυτόματα μόλις δημιουργηθεί κάποιος πράκτορας.

 

Εικόνα 17 - 9

 

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

 

Να γίνει στο σημείο αυτό σύνδεση των παραπάνω με τους προκαθορισμένους Ενεργοποιητές (Εικόνα 17 - 10) και αναφορά στη λειτουργία του καθένα.

 

Εικόνα 17 - 10

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

 

Επανερχόμενοι στο θέμα της αποκάλυψης των εικόνων εισάγουμε τους μαθητές στην έννοια του  συμβάντος ενεργοποίησης. Το ορίζουμε ως αποτέλεσμα κάποιας πράξης του χρήστη που όταν λαμβάνει χώρα, ο πράκτορας που το δέχεται εκτελεί κάποια ορισμένη λειτουργία. Προφανώς, στην περίπτωσή μας το συμβάν αυτό είναι το κλικ του ποντικιού. Ο πράκτορας που θα «ακούει» το συμβάν αυτό, λέγεται ακροατής και είναι ο πράκτορας Κάλυμμα.

 

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

 

Οι μαθητές τον επιλέγουν στην Εικονοθήκη και είτε κάνουν διπλό κλικ, είτε δεξί κλικ και Επεξεργασία Συμπεριφοράς και ανοίγουν έτσι το παράθυρο Συμπεριφοράς του (Εικόνα 17 - 11).

 

Εικόνα 17 - 11

 

Παρατηρούμε ότι ο Ενεργοποιητής της υπάρχουσας (κενής) μεθόδου είναι ο «Κατά τη λειτουργία». Ρωτάμε τα παιδιά αν είναι κατάλληλος για τη συμπεριφορά που θέλουμε να ορίσουμε και αποφασίζουμε να τον αλλάξουμε σε «Ποντίκι». Για το σκοπό αυτό κάνουμε δεξί κλικ στην ετικέτα της μεθόδου και Αλλαγή Ενεργοποιητή->Ποντίκι.

Εξετάζουμε τους τροποποιητές (Modifiers) στη λίστα που εμφανίζεται και κάνουμε μικρό σχολιασμό. Εδώ προτείνεται να χρησιμοποιηθεί κάποιος από αυτούς (π.χ right), γιατί στο περιβάλλον Agentsheets τα συμβάντα του ποντικιού αναγνωρίζονται ακόμη και όταν η προσομοίωση δεν είναι σε κατάσταση εκτέλεσης, γεγονός που μπορεί να προκαλέσει σύγχυση. Μπορούμε αφού υλοποιηθεί η προσομοίωση να απομακρύνουμε τον τροποποιητή αυτό.

 

Ακολουθεί η απόφαση για τη δράση που θα λαμβάνει χώρα κάθε φορά που θα γίνεται κλικ σε πράκτορα Κάλυμμα. Οι μαθητές επιλέγουν Εργαλεία->Συλλογή Δράσεων (Εικόνα 17 - 12) και εξετάζουν τις δράσεις που προσφέρονται. Για να αποκαλυφθεί η κρυμμένη εικόνα πρέπει να υποχωρήσει το Κάλυμμα που δέχεται το κλικ. Επιλέγεται λοιπόν η δράση «Εξαφανίζω», γίνεται αναφορά στη λειτουργία της, και προστίθεται στη μέθοδο (Εικόνα 17 - 13).

 

Εικόνα 17 - 12

 

Εικόνα 17 - 13

 

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

 
Βήμα 3ο (Διάρκεια: 1 διδακτική ώρα)

 

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

 

Με Εργαλεία->Συλλογή Συνθηκών και Εργαλεία->Συλλογή Δράσεων εξετάζονται για άλλη μια φορά οι δράσεις και οι συνθήκες και πιο συγκεκριμένα η συνθήκη Δω και η δράση Θέτω την ιδιότητα ίσο με. Ο εκπαιδευτικός μπορεί να ανατρέξει στο εγχειρίδιο αναφορών του Agentsheets προκειμένου να επεξηγήσει τη λειτουργία τους. Ακολουθεί η υλοποίηση της μεθόδου (Εικόνα 17 - 14).

 

Η ιδιότητα value είναι η μοναδική τιμή που περιγράφηκε παραπάνω. Να γίνει ταύτιση της έννοιας ιδιότητα και μεταβλητή. Όπως η συμπεριφορά ενός πράκτορα περιγράφεται από τις μεθόδους του, έτσι οι ιδιότητές του περιγράφονται από τις μεταβλητές. Η μεταβλητή value λοιπόν είναι μεταβλητή πράκτορα. Κάθε πράκτορας τύπου Εικόνα δηλαδή, θα έχει μία μεταβλητή value που τον χαρακτηρίζει.

 

Εικόνα 17 - 14

 

Στο σημείο αυτό έχει οριστεί η μέθοδος ανάθεσης των τιμών, αλλά ακόμη κι αν εκτελεστεί τώρα  η προσομοίωση κανένας πράκτορας Εικόνα δεν θα αποκτήσει τιμή value γιατί η μέθοδος initialize δεν καλείται πουθενά. Το ερώτημα τώρα είναι πώς και πού θα καλείται η μέθοδος αυτή. Μπορεί να κληθεί «κατά τη λειτουργία» του πράκτορα Εικόνα; Η απάντηση είναι ναι, όμως υπό συνθήκη. Αν εισάγουμε κλήση της μεθόδου initialize σε μέθοδο που εκτελείται «κατά τη λειτουργία», η ανάθεση των τιμών θα γίνεται συνεχώς και δεν θα σταματήσει ποτέ μέχρι τον τερματισμό της προσομοίωσης. Αυτό που χρειάζεται είναι να εκτελείται μία μόνο φορά για κάθε πράκτορα. Αυτό επιτυγχάνεται με μία νέα μεταβλητή πράκτορα, τη set (Εικόνα 17 -15).

 

Εικόνα 17 - 15

 

Αν η μεταβλητή set είναι 0, που σημαίνει ότι ο πράκτορας Εικόνα δεν έχει πάρει τιμή για την value, τότε εκτελεί τη μέθοδο της ανάθεσης (initialize) και έπειτα θέτει τη set ίση με 1, ώστε να μην επαναληφθεί η απόδοση τιμής.

 

Γίνεται έλεγχος  της παραπάνω υλοποίησης. Οι μαθητές επιλέγουν run, εξαφανίζουν με το ποντίκι κάποιο κάλυμμα για να αποκτήσουν πρόσβαση σε πράκτορα Εικόνα, έπειτα επιλέγουν τον τελευταίο και Εργαλεία->Ιδιότητες Πράκτορα για να ελέγξουν τη τιμή της μεταβλητής value (Εικόνα 17 - 16).

 

Εικόνα 17 - 16

 

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

 

Πώς όμως θα γίνεται η προσπέλαση της ανοιχτής Εικόνας, ώστε να πάρουμε την τιμή της; Μελετάμε τη συνθήκη «Αν είμαι στοιβαγμένο κάτω από ένα». Από τη στιγμή που δεν υπάρχει συνθήκη με άρνηση, δηλαδή της μορφής «αν δεν είμαι στοιβαγμένο κάτω από», πρέπει να σκαρφιστούμε άλλο τρόπο. Θα θεωρούμε όλες τις εικόνες ανοιχτές και έπειτα με χρήση της συνθήκης «Αν είμαι στοιβαγμένο κάτω από ένα», θα ξεχωρίζουμε αυτές που είναι κλειστές και έτσι με έμμεσο τρόπο θα έχουμε πρόσβαση στην ανοιχτή Εικόνα.

 

Πρέπει να αποδώσουμε στους πράκτορες Εικόνα μια μεταβλητή πράκτορα που να δηλώνει την κατάστασή τους. Η μεταβλητή αυτή θα ονομαστεί open. Αν ένας πράκτορας Εικόνα είναι καλυμμένος, η open θα έχει τιμή 0. Αν ανοίξει για να ελεγχθεί θα έχει τιμή open=1. Αν έχει παραμείνει ανοιχτός επειδή έχει ήδη ελεγχθεί και βρέθηκε με το ζευγάρι του έχει open=2.

 

Εικόνα 17 - 17

 

Θα αλλάξουμε τη μέθοδο του πράκτορα Κάλυμμα που ενεργοποιείται με το κλικ του ποντικιού (Εικόνα 17 - 17) με τρόπο ώστε: στο πρώτο κλικ να θέτει σε όλες τις εικόνες open=1 (μέθοδος open), έπειτα να θέτει στις κλειστές open=0 (μέθοδος check_for_closed), τέλος να αποδίδει σε μια μεταβλητή προσομοίωσης (@value1) την τιμή της Εικόνας που άνοιξε (μέθοδος check1).

Στο δεύτερο κλικ, να θέτει σε όλες τις εικόνες open=1, έπειτα να θέτει στις κλειστές open=0, να αποδίδει σε μια δεύτερη μεταβλητή προσομοίωσης  (@value2) την τιμή της Εικόνας που άνοιξε (μέθοδος check2) και τέλος να κάνει τη σύγκριση (μέθοδος compare).

Για να γίνεται διάκριση μεταξύ πρώτου και δεύτερου κλικ, χρησιμοποιείται η μεταβλητή προσομοίωσης @turn. Αν turn=0, είναι το πρώτο κλικ, αν turn=1 πρόκειται για το δεύτερο.

 

Αφού γίνουν τα παραπάνω ξεκάθαρα στους μαθητές μελετούν τις δράσεις Εκπέμπω και Κάνω. Επεξηγείται η λειτουργία τους. Και οι δύο δράσεις προκαλούν κλήση μεθόδου. Στην περίπτωση του Εκπέμπω αποδέκτες είναι όλοι οι πράκτορες που υπάρχουν στο πεδίο και ανήκουν σε συγκεκριμένο τύπο που αναφέρεται ως παράμετρος στην δράση. Στην περίπτωση του Κάνω, ένας μοναδικός πράκτορας δέχεται την κλήση της μεθόδου, η οποία και είναι ορισμένη στην συμπεριφορά του. Υλοποιείται η μέθοδος όπως φαίνεται στην Εικόνα 17 - 17 και την επόμενη ώρα θα  προγραμματιστούν οι νέες μέθοδοι που καλούνται από αυτή.

 

Βήμα 4ο (Διάρκεια: 1 διδακτική ώρα)

 

Στο στάδιο αυτό συζητάμε με τους μαθητές τις συμπεριφορές που πρέπει να προστεθούν στους πράκτορες Εικόνα και Κάλυμμα. Ξαναβλέπουμε τη μέθοδο που ορίστηκε στο Κάλυμμα και λέμε ότι πρέπει να υλοποιήσουμε συγκεκριμένα στον πράκτορα Εικόνα τις μεθόδους Open, check_for_closed, check1 και check2 και στον πράκτορα Κάλυμμα τη μέθοδο compare. Υπενθυνίζουμε ότι η μέθοδος Open σε συνδυασμό με την check_for_closed (Εικόνα 17 - 18) προκαλεί  έμμεση προσπέλαση της ανοιχτής κάθε φορά Εικόνας. Υπενθυμίζουμε επίσης το ρόλο της μεταβλητής open (0-κλειστό,1-ανοιχτό προς έλεγχο, 2-ανοιχτό και ήδη ελεγμένο). Υλοποιούνται οι δύο αυτές μέθοδοι.

 

Εικόνα 17 - 18

Περνάμε στις μεθόδους που δεσμεύουν τις τιμές των ανοιχτών εικόνων, check1 και check2 (Εικόνα 17 - 19).

 

Εικόνα 17 - 19

 

Οι μέθοδοι αυτές εκτελούνται από όλες τις Εικόνες αφού καλούνται μέσω της δράσης Εκπέμπω με το κλικ σε κάλυμμα. Η συνθήκη open=1, όμως λειτουργεί σαν φίλτρο και μόνο για την ανοιχτή εικόνα γίνεται η απόδοση της τιμής. Εμφανίζεται και μία νέα μεταβλητή, η checked. Αυτή χρησιμοποιείται γιατί στο δεύτερο άνοιγμα, υπάρχει ήδη ανοιχτή μία Εικόνα (οpen=1), αλλά θέλουμε την τιμή της δεύτερης. Έτσι όποτε γίνεται δέσμευση της τιμής μιας ανοιχτής Εικόνας αυτή «τσεκάρεται» (checked=1), ώστε να μην ελεγχθεί ξανά. Απομένει να υλοποιηθεί ο έλεγχος με την μέθοδο compare (Εικόνα 17 - 20).

 

Εικόνα 17 - 20

 

Αν οι μεταβλητές value1 και value2 έχουν ίδιες τιμές, γεγονός που σημαίνει ότι άνοιξαν δύο ίδιες εικόνες, αυτές πρέπει να παραμείνουν ανοιχτές, διαφορετικά πρέπει να κλείσουν και πάλι μετά από μικρή αναμονή.

 

Περνάμε στην υλοποίηση των μεθόδων correct και close (Εικόνα 17 - 21).

 

Αν ο παίκτης ανοίξει δύο διαφορετικές Εικόνες (close), αυτές εντοπίζονται με την συνθήκη open=1 και έπειτα κλείνουν και πάλι. Να μελετηθεί εδώ η δράση δημιουργώ. Έπειτα οι ιδιότητες open και checked επανέρχονται στην τιμή μηδέν, ώστε στην επόμενη προσπάθεια του παίκτη να είναι δυνατός ο έλεγχος. Αν έχουμε επιτυχία (correct), το ζεύγος των Εικόνων που άνοιξαν αποκτά τιμή 2 για την ιδιότητα open, για να μην ελεγχθεί ξανά σε επόμενη προσπάθεια.

 

 

Εικόνα 17 - 21

 

Οι μαθητές μπορούν να ελέγξουν τώρα το παιχνίδι.

 

Βήμα 5ο (Διάρκεια: 1 διδακτική ώρα)

 

Η τελευταία ώρα της εργασίας προσφέρεται για να γίνουν βελτιώσεις στη λειτουργία  του παιχνιδιού.

 

Η περισσότερο προφανής αδυναμία στην υπάρχουσα υλοποίηση είναι η στατικότητα, με την έννοια ότι ο χρήστης παίζει συνεχώς στο ίδιο ταμπλό. Αυτό που θέλουμε να επιτύχουμε μέχρι το τέλος αυτού του βήματος είναι η δυνατότητα νέου παιχνιδιού. Θα προστεθεί δηλαδή ένα κουμπί με τίτλο «Νέο παιχνίδι», το οποίο θα αλλάζει τυχαία τις θέσεις των εικόνων, θα τις εμφανίζει για πολύ μικρό διάστημα και θα τις καλύπτει ξανά, ώστε να ετοιμάζει τον πίνακα για εκκίνηση νέου παιχνιδιού.

 

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

 

Εντοπίζουμε την ανάγκη δημιουργίας νέου πράκτορα που θα μπει κάτω από τις εικόνες και θα χρησιμοποιηθεί ως παράμετρος στην κλήση των Εικόνων να μετακινηθούν τυχαία. Ο πράκτορας αυτός θα ονομαστεί Φόντο και η απεικόνισή του μπορεί να είναι απλώς ένα γεμάτο ορθογώνιο (Εικόνα 17 - 22).

 

Εικόνα 17 - 22

 

Δημιουργούμε έναν ακόμη πράκτορα για το κουμπί νέου παιχνιδιού. Τον ονομάζουμε  Επανεκκίνηση και για την απεικόνισή του είτε εισάγουμε τη διαθέσιμη εικόνα, είτε προτρέπουμε τα παιδιά να τη σχεδιάσουν μόνα τους (Εικόνα 17 - 23).

 

Αν τώρα αφήσουμε τον πίνακα με τις 16 θέσεις ως έχει και βάλουμε πίσω από κάθε Εικόνα έναν πράκτορα Φόντο, η κλήση της δράσης Μετακινούμαι Τυχαία δεν θα έχει κανένα αποτέλεσμα, γιατί δεν υπάρχει «χώρος» για μετακίνηση. Κάθε εικόνα βλέπει στις γειτονικές της θέσεις πράκτορες τύπου Εικόνα, οπότε δεν μετακινείται. Πρέπει κάποια θέση του πίνακα να καταληφθεί μόνο από έναν πράκτορα Φόντο. Αυτό όμως κάνει τις διαθέσιμες για εικόνες θέσεις 15 που είναι περιττός αριθμός και δεν εξυπηρετεί. Θα αλλάξουμε τη διάσταση του πίνακα σε 5x5 και θα προσθέσουμε στον πράκτορα Εικόνα 4 απεικονίσεις ακόμη (Να είναι συνολικά 12).

 

Εικόνα 17 - 23

 

Δημιουργούμε Νέο πεδίο Εργασίας, στο οποίο και τοποθετούμε το κουμπί, 25 πράκτορες τύπου Φόντο (Εικόνα 17 - 24), 24 πράκτορες τύπου Εικόνα (Εικόνα 17 - 25) και πάνω από κάθε Εικόνα άλλους 24 πράκτορες Κάλυμμα (Εικόνα 17 - 26).

 

Εικόνα 17 - 24

 

Εικόνα 17 - 25

 

Εικόνα 17 - 26

 

Αποθηκεύουμε το δεύτερο αυτό πεδίο εργασίας. Προσθέτουμε στη συμπεριφορά του πράκτορα Εικόνα τη μέθοδο που θα αλλάζει θέσεις στις Εικόνες (Εικόνα 17 - 27).

 

Εικόνα 17 - 27

Μεταφερόμαστε έπειτα στη συμπεριφορά του πράκτορα Επανεκκίνηση. Προσθέτουμε μέθοδο που ενεργοποιείται με το ποντίκι (Εικόνα 17 - 28).

 

Εικόνα 17 - 28

 

Υπενθυμίζουμε ότι πρέπει οι νέες θέσεις των Εικόνων να εμφανιστούν για λίγο προτού ξεκινήσει το νέο παιχνίδι, οπότε πρέπει να ανοίξουν τα καλύμματα, και έπειτα να κληθεί η randomize που προκαλεί την αλλαγή των θέσεων. Η μέθοδος open του πράκτορα Κάλυμμα φαίνεται στην Εικόνα 17 - 29. Να σημειωθεί εδώ πως η μέθοδος αυτή έχει ίδιο όνομα με την open του πράκτορα Εικόνα, αλλά δεν προκαλείται καμία σύγχυση αφού ορίζονται σε διαφορετικούς πράκτορες.

 

Εικόνα 17 - 29

Μελετάμε έπειτα τη μέθοδο randomize. Η μέθοδος αυτή εκπέμπει move_rand στον πράκτορα Εικόνα. Αν γίνει εκπομπή της move_rand μία φορά, μόνο μια εικόνα θα αλλάξει θέση, καθώς μία είναι αυτή που έχει σε γειτονική θέση Φόντο. Για να επιτύχουμε το σκοπό μας, θα αναγκάσουμε την randomize να εκτελείται 100 φορές. Αυτό επιτυγχάνεται με την μεταβλητή προσομοίωσης @rand_times, η οποία αυξάνεται κατά ένα όποτε γίνεται μία κλήση των Εικόνων για μετακίνηση και αν είναι μικρότερη από 100, ξανακαλεί τη randomize (αναδρομή). Όταν η rand_times γίνει 100 έχουν εκτελεστεί 100 μετακινήσεις, επαληθεύεται μόνο  ο δεύτερος κανόνας της randomize και η rand_times μηδενίζεται για να είναι «καθαρή» για την επόμενο «Νέο παιχνίδι».

 

Εικόνα 17 - 30

Τέλος, πρέπει εδώ να κλείσουν και πάλι τα καλύμματα και αυτό γίνεται με την close_icons που ορίζεται στον πράκτορα Εικόνα (Εικόνα 17 - 30). Η close_icons δημιουργεί Κάλυμμα πάνω από κάθε Εικόνα και επαναθέτει τις ιδιότητες open και checked ίσες με μηδέν, για να ξεκινήσει το νέο παιχνίδι.

 

Με Αρχείο->Άνοιγμα πεδίου Εργασίας οι μαθητές μπορούν να επιλέξουν όποια έκδοση του παιχνιδιού θέλουν και να τη δοκιμάσουν.

 

Προτάσεις για επεκτάσεις ή διαφοροποιήσεις

 

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