Κεφάλαιο+3

=Το ολοκληρωμένο βιβλίο βρίσκεται στη διεύθυνση http://www.koduplay.gr=

Ομάδα 2 Αϊβάτης Χρήστος Αϊβαλής Στέφανος

include component="comments" page="Κεφάλαιο 3" limit="10"



=Κεφάλαιο 3=
 * ΚΕΦΑΛΑΙΟ 3: Δημιουργώ το Πρώτο μου Παιχνίδι**


 * Εισαγωγή**

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


 * 3.1 Γεγονοστραφής Προγραμματισμός/Αντικειμενοστραφής Προγραμματισμός**

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



Φανταστείτε για μια στιγμή ότι εσείς είστε ο προγραμματιστής αυτού του παιχνιδιού. Στο παιχνίδι Pacman έχουμε μια πίστα που μοιάζει με μικρό λαβύρινθο, πάνω στην οποία υπάρχουν διάσπαρτες μικρές και μεγάλες άσπρες τελίτσες. Ένα μικρό κίτρινο προσωπάκι, o pacman, πρέπει να "φάει" όλες τις τελίτσες πριν προλάβουν να τον ακουμπήσουν (και έτσι να τον σκοτώσουν) τα φαντάσματα που τον κυνηγούν. Όταν ο pacman ακουμπήσει μια μικρή τελίτσα, τότε αυτή εξαφανίζεται. Όταν ο pacman ακουμπήσει μία από τις μεγάλες τελίτσες τότε η μεγάλη τελίτσα εξαφανίζεται και o pacman κινείται πολύ πιο γρήγορα και μπορεί αυτός, πλέον, να σκοτώσει τα φαντάσματα όταν τα ακουμπήσει. Ο παίκτης του παιχνιδιού πρέπει να κινεί τον pacman προσεκτικά μέσα στο λαβύρινθο, χρησιμοποιώντας μόνο τα βέλη του πληκτρολογίου.

Αρχικά παρατηρήστε ότι όλο το παιχνίδι εκτυλίσσεται μέσα σε μία πίστα που μοιάζει με λαβύρινθο.

Μέσα σε αυτή την πίστα υπάρχουν τα στοιχεία του παιχνιδιού ή αλλιώς τα αντικείμενα του παιχνιδιού. Παρατηρήστε για λίγο τα αντικείμενα από τα οποία αποτελείται το παιχνίδι pacman: έχουμε τον pacman, τα φαντάσματα, τις μικρές τελίτσες και τις μεγάλες τελίτσες. Κάθε ένα από αυτά τα αντικείμενα έχει κάποιες συμπεριφορές. Ως συμπεριφορά θα ορίσουμε το συνδυασμό ενός γεγονότος με την ενέργεια που κάνει το αντικείμενο όταν αντιληφθεί το συγκεκριμένο γεγονός.

__Ορίστε μερικές από τις συμπεριφορές των αντικειμένων στο Pacman__:
 * Μερικές **ΣΥΜΠΕΡΙΦΟΡΕΣ** που έχει ο pacman:
 * **ΟΤΑΝ** ακουμπήσει μία μεγάλη τελίτσα (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** ο pacman αρχίζει να αναβοσβήνει και να τρέχει πολύ γρήγορα (**ΕΝΕΡΓΕΙΕΣ**).
 * Μία **ΣΥΜΠΕΡΙΦΟΡΑ** που έχει κάθε μικρή τελίτσα:
 * **ΟΤΑΝ** ακουμπήσει τον pacman (**ΓΕΓΟΝΟΣ**), **TOTE** αυτή εξαφανίζεται (**ΕΝΕΡΓΕΙΑ**).
 * Μία **ΣΥΜΠΕΡΙΦΟΡΑ** που έχει κάθε μεγάλη τελίτσα:
 * **ΟΤΑΝ** ακουμπήσει τον pacman (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** αυτή εξαφανίζεται (**ΕΝΕΡΓΕΙΑ**).
 * Μία **ΣΥΜΠΕΡΙΦΟΡΑ** που έχει κάθε φάντασμα:
 * **ΟΤΑΝ** δει τον pacman (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** τον κυνηγάει για να τον ακουμπήσει (**ΕΝΕΡΓΕΙΑ**).

Παρατηρήστε ότι κάθε **ΣΥΜΠΕΡΙΦΟΡΑ** παραπάνω είναι ο συνδυασμός ενός γεγονότος και μιας ενέργειας, όπως είπαμε. Το γεγονός αναφέρεται σε κάτι που συμβαίνει στο κόσμο και το οποίο μπορεί να γίνει αντιληπτό από τους αισθητήρες του αντικειμένου μας (π.χ. να δει, να ακουμπήσει κτλ) και η ενέργεια είναι μια δράση του αντικειμένου (π.χ. εξαφανίζεται, αναβοσβήνει, μετακινείται, κτλ.)

{Μπορεί να βελτιωθεί το σχήμα!! Συμπεριφορά: όταν γεγονός, τότε ενέργεια}

Με αυτόν ακριβώς τον τρόπο θα προγραμματίσουμε τα παιχνίδια μας και στο Kodu. Θα αποφασίζουμε ποια είναι τα αντικείμενα του παιχνιδιού μας και στη συνέχεια θα προσδιορίζουμε τις συμπεριφορές τους με τη μορφή γεγονότων και ενεργειών.

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

.


 * 3.2 Τα Βασικά Στοιχεία ενός Παιχνιδιού: Ο Κόσμος και τα Αντικείμενα με τις Συμπεριφορές τους**

Σε αυτή την παράγραφο θα συζητήσουμε λίγο πιο αναλυτικά τα 2 βασικά στοιχεία που συνθέτουν ένα παιχνίδι στο Kodu: τον κόσμο και τα αντικείμενα με τις συμπεριφορές τους.

Ο κόσμος ή η πίστα ενός παιχνιδιού είναι κάτι οικείο σε εσάς. Ο κόσμος του παιχνιδιού είναι το περιβάλλον μέσα στο οποίο εκτυλίσσεται το παιχνίδι, οι πεδιάδες, τα βουνά, οι λίμνες κτλ., το περιβάλλον μέσα στο οποίο κινούνται και ενεργούν οι ήρωές σας. Για παράδειγμα, αν παίζατε το παιχνίδι Star Wars ο κόσμος θα ήταν το διάστημα ή κάποιος πλανήτης.

Αν παίζατε το παιχνίδι Titanic (ναι, υπάρχει!) ο κόσμος σας θα ήταν ένα πλοίο. Στο Kodu ένα από τα πράγματα που θα σας κάνουν να βάλετε τη φαντασία σας να δουλέψει είναι ότι εσείς θα σχεδιάζετε τον κόσμο όπως θέλετε. Για παράδειγμα, μπορείτε να σχεδιάσετε έναν κόσμο ο οποίος θα είναι μια τεράστια λίμνη. Η μορφή που θα έχει ο κόσμος σας θα επηρεάσει την κίνηση του ήρωά σας και των υπόλοιπων αντικειμένων καθώς και την πλοκή του παιχνιδιού. Αν έχετε έναν κόσμο με λίμνες, τότε δεν μπορείτε να περιμένετε από τον ήρωά σας να κινείται γρήγορα μέσα σε αυτές.

Το δεύτερο βασικό στοιχείο ενός παιχνιδιού είναι τα αντικείμενα με τις συμπεριφορές τους. Αντικείμενο είναι οτιδήποτε έχει συμπεριφορές, οτιδήποτε δηλαδή εκτελεί κάποιες ενέργειες. Στο Kodu όλα τα αντικείμενα μπορούν να έχουν συμπεριφορές, αν τα προγραμματίσουμε εμείς να έχουν. Όπως θα δείτε και εσείς, τα αντικείμενα που θα χρησιμοποιήσετε στο Kodu είναι αντικείμενα που υπάρχουν και στον πραγματικό κόσμο. Μερικά από θα μας είναι οικεία, άλλα από την άλλη όχι και τόσο! Για παράδειγμα μια μπάλα, ένα πλοίο, μία ρουκέτα κτλ. Αν δημιουργήσετε έναν ήρωα στο Kodu ο οποίος, όταν δει ένα κόκκινο αερόστατο, τότε να εκτοξεύει ένα πύραυλο προς αυτό, τότε έχετε δώσει μια συμπεριφορά στο αντικείμενο αερόστατο. Οι συμπεριφορές των αντικειμένων είναι αυτές που πιθανόν να κάνουν ένα παιχνίδι στο Kodu διασκεδαστικό, βαρετό, ρεαλιστικό ή όχι.

**3.3 Το Παιχνίδι που θα δημιουργήσουμε**

Να και μία πρώτη ιδέα για παιχνίδι: Θα δημιουργήσουμε ένα τετράγωνο επίπεδο που θα είναι καταπράσινο με γρασίδι. Πάνω στο γρασίδι και συγκεκριμένα νότια της πίστας θα τοποθετήσουμε τον πρωταγωνιστή μας, που εδώ θα είναι ένας //μηχανάκιας (cycle)// {εικόνα}. Με τα βέλη από το πληκτρολόγιο ο παίκτης θα μπορεί να κινεί τον μηχανάκια. Στο κέντρο της πίστας θα βάλουμε ένα κανόνι το οποίο όταν βλέπει τον μηχανάκια, τότε απλώς θα τον κυνηγάει. {γιατί?...} Επίσης θα τοποθετήσουμε τρία μήλα, ένα βόρεια, ένα δυτικά και ένα ανατολικά. Στόχος θα είναι ο παίκτης να κινήσει τον μηχανάκια ώστε να ακουμπήσει και να φάει όλα τα μήλα. Όταν τα μήλα τελειώσουν, τότε το παιχνίδι θα ολοκληρώνεται με νίκη του παίκτη. {περιγραφή του παιχνιδιού – όταν το κανόνι ακουμπήσει τον ήρωα, τότε θα τελειώνει το παιχνίδι; Αλλιώς τι ρόλο έχει το κανόνι; Κτλ. Και μια εικόνα του παιχνιδιού θα ήταν σημαντική. Πιθανότατα και μια προτροπή για να το ανοίξουν και να το παίξουν}

**3.4 Πρώτα ας το Σκεφτούμε**

-Ποιος θα είναι ο κόσμος? -Ποια θα είναι τα αντικείμενα και τι συμπεριφορές θα έχει το κάθε αντικείμενο?

Σκεφτείτε απλά: Κάθε αντικείμενο έχουμε πει ότι έχει και συγκεκριμένες συμπεριφορές (θυμηθείτε τον pacman, τα φαντάσματα, τις μικρές τελίτσες και τις μεγάλες τελίτσες). Ο κόσμος-πίστα από την άλλη δεν έχει συμπεριφορά. Είναι η εικόνα στην οποία τοποθετούμε τα διάφορα αντικείμενα και στην οποία αυτά θα κινούνται (θυμηθείτε την εικόνα-λαβύρινθο στο Pacman).


 * Στο παιχνίδι μας θέλουμε το τετράγωνο γρασίδι να έχει συμπεριφορά? Όχι! Δεν θέλουμε να αλλάζει από την αρχή μέχρι το τέλος του παχνιδιού. Θέλουμε να μένει αναλλοίωτο. Δεν θέλουμε να επηρεάζεται με κάποιον τρόπο από τα πλήκτρα που πατάει ο παίκτης στο πληκτρολόγιο ή από τα πλήκτρα στο ποντίκι. Ούτε και να επηρεάζεται από τις κινήσεις του μηχανάκια, του κανονιού, από τα μήλα, κτλ. Δεν θα αντιλαμβάνεται το τι συμβαίνει γύρω του (ή πάνω του καλύτερα).

==>Άρα, το τετράγωνο επίπεδο με το γρασίδι θα αποτελεί τον κόσμο του παιχνιδιού.


 * Ο μηχανάκιας από την άλλη θέλουμε να έχει συμπεριφορές. Συγκεκριμένα, τρεις συμπεριφορές:
 * **1η ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε **ΟΤΑΝ** ο μηχανάκιας __αισθανθεί__ ότι στο πληκτρολόγιο πατιέται ένα βέλος (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να κινείται στην αντίστοιχη κατεύθυνση πάνω στην πίστα (**ΕΝΕΡΓΕΙΑ**).
 * **2η ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε **ΟΤΑΝ** ο μηχανάκιας __ακουμπήσει__ ένα μήλο (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να τρώει το μήλο (**ΕΝΕΡΓΕΙΑ**).
 * **3η ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε **ΟΤΑΝ** ο μηχανάκιας __δεν βλέπει__ κανένα μήλο (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να τερματίζει το παιχνίδι με νίκη για τον παίκτη (**ΕΝΕΡΓΕΙΑ**). { Η συμπεριφορά αυτή δεν είναι αυτονόητη και είναι επηρεασμένη από τις επιλογές που μας δίνει το Kodu. Χρειάζεται μια επεξήγηση πριν την παραθέσετε }

==>Άρα, αφού ο μηχανάκιας θέλουμε να έχει συμπεριφορές, θα είναι ένα αντικείμενο.

ΣΗΜΕΙΩΣΗ ΣΕ ΠΛΑΙΣΙΟ: Και αν αναρωτιέστε πώς είναι δυνατόν ο μηχανάκιας ή ένα οποιοδήποτε αντικείμενο να __αισθάνεται__ το πάτημα ενός πλήκτρου στο πληκτρολόγιο, όπως είδαμε στην πρώτη συμπεριφορά του παραπάνω, πρέπει να επισημάνουμε ότι κάθε αντικείμενο στο kodu έχει μία σειρά από **αισθητήρες**. Τα αντικείμενα μπορούν να αντιληφθούν ποιο πλήκτρο πατάει ο χρήστης και επομένως εμείς ως προγραμματιστές να προσδιορίσουμε αντίστοιχες συμπεριφορές Επιπλέον τα αντικείμενα έχουν αισθητήρα __αφής__ (όταν ένα αντικείμενο ακουμπήσει με κάτι). της αισθητήρα __όρασης__! (όταν το αντικείμενο δει κάποιο άλλο αντικείμενο).


 * Το κανόνι θέλουμε και αυτό να έχει συμπεριφορές. Συγκεκριμένα, μία **ΣΥΜΠΕΡΙΦΟΡΑ**:
 * Θέλουμε **ΟΤΑΝ** το κανόνι __βλέπει__ τον μηχανάκια (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να τον κυνηγάει (**ΕΝΕΡΓΕΙΑ**).

==>Άρα, αφού το κανόνι θέλουμε να έχει συμπεριφορά, θα είναι και αυτό ένα αντικείμενο.


 * Τα τρία μήλα θα είναι αντικείμενα? Ναι, και αυτά θέλουμε να έχουν **ΣΥΜΠΕΡΙΦΟΡΑ**:
 * Θέλουμε κάθε μήλο **ΟΤΑΝ** ακουμπήσει με τον μηχανάκια (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να εξαφανίζεται (**ΕΝΕΡΓΕΙΑ**).

==>Άρα, και τα μήλα θα είναι αντικείμενα.

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


 * 3.5 Δημιουργώ τον Κόσμο**

Το πρώτο πράγμα που θα φτιάξουμε είναι ο κόσμος. Λογικό, αφού χωρίς κόσμο πού θα τοποθετούσαμε μετά τα διάφορα αντικείμενα, πού θα πατούσαν οι πρωταγωνιστές μας?! Πηγαίνετε λοιπόν στο //ΚΕΝΤΡΙΚΟ ΜΕΝΟΥ (MAIN MENU)// και από εκεί επιλέξτε //ΦΟΡΤΩΣΗ ΚΟΣΜΟΥ (LOAD WORLD)//, όπως φαίνεται και στην εικόνα παρακάτω.

Στη συνέχεια πατήστε την επιλογή //Όλοι (All)// ώστε να εμφανιστούν όλοι οι διαθέσιμοι κόσμοι που υπάρχουν. Εμείς είπαμε θέλουμε να φτιάξουμε από την αρχή έναν καινούργιο κόσμο, οπότε ψάξτε στους κόσμους αυτούς, χρησιμοποιώντας τα βέλη στο πληκτρολόγιο ή τη ροδέλα του ποντικιού, μέχρι να βρείτε την επιλογή //Νέος Κόσμος (New World)//. Πατήστε //Παίξε (Play)// και περιμένετε να φορτώσει.

ΣΗΜΕΙΩΣΗ ΣΕ ΠΛΑΙΣΙΟ: Βέβαια, μπορείτε να έχετε έναν κενό κόσμο και διαφορετικά. Αντί να ψάξετε να βρείτε την επιλογή //Νέος Κόσμος (New World)//, επιλέξτε όποιον κόσμο θέλετε. Πατήστε //Παίξε (Play)// και περιμένετε να φορτώσει. Μόλις φορτώσει πατήστε το πλήκτρο Esc στο πληκτρολόγιο και από την //Παλέτα Εργαλείων (Tool Palette)// που θα εμφανιστεί κάτω πατήστε το //Αρχικό Μενού (Home Menu)//.Θα το βρείτε πρώτο-πρώτο αριστερά -->

Από εκεί επιλέξτε //Νέος κενός κόσμος (New empty world)//.

Πλέον είμαστε έτοιμοι να δημιουργήσουμε! Οι επιλογές είναι πραγματικά πολλές στο πώς θα είναι ο κόσμος μας. Για το πρώτο μας παιχνίδι είπαμε ότι θέλουμε ένα καταπράσινο από το γρασίδι τοπίο. Στον κενό κόσμο πατήστε το πλήκτρο Esc ώστε να εμφανιστεί η //Παλέτα Εργαλείων (Tool Palette)//, εκτός και αν ήδη την βλέπετε. Αρχικά, θέλουμε να προσθέσουμε έδαφος. Κάπου στη μέση θα βρείτε τη //Βούρτσα Εδάφους (Ground Brush)// -->

Πατήστε πάνω της.



Θα δείτε ότι θα βγουν πάνω αριστερά και πάνω δεξιά της δύο άλλα εικονίδια.

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

Τώρα μπορείτε να αρχίσετε να //Προσθέτετε Έδαφος (Add Ground)// στον κόσμο. Αρκεί να κάνετε αριστερό κλικ με το ποντίκι σε διάφορα τμήματα στον κενό κόσμο. Προσπαθήστε να δημιουργήσετε την πρώτη σας πίστα. Αν δεν σας πολυαρέσει το αποτέλεσμα, μην απογοητεύεστε! Αρχή είναι..

Μάλλον δεν είναι ιδιαίτερα ελκυστική… Μήπως θα ήταν καλύτερα να μεγαλώσετε πρώτα λίγο το μέγεθος της //Βούρτσας Εδάφους (Ground Brush)// και μετά να σχεδιάσετε την πίστα; Το Kodu για να σας βοηθήσει σας δίνει τη δυνατότητα να μεγαλώσετε το μέγεθος της βούρτσας πατώντας το δεξί βέλος του πληκτρολογίου και να μικρύνετε το μέγεθος της βούρτσας πατώντας το αριστερό. Έτσι μπορείτε να προσθέσετε μεγάλα παρόμοια κομμάτια πίστας πιο γρήγορα. Συνεπώς μπορούμε ακόμη και με ένα μόνο κλικ να δημιουργήσουμε το ορθογώνιο γρασίδι που θέλουμε για την πίστα μας.

ΣΗΜΕΙΩΣΗ ΣΕ ΠΛΑΙΣΙΟ: Αν θέλετε να διαγράψετε κομμάτια πίστας, πατήστε το δεξί πλήκτρο του ποντικιού.

Τώρα, αφού ο κόσμος είναι έτοιμος, καιρός να εισάγουμε τα αντικείμενά μας.


 * 3.6 Δημιουργώ τα Αντικείμενα**

Όλα τα αντικείμενα μπορείτε να τα βρείτε αν επιλέξετε το //Εργαλείο Αντικειμένων (Object Tool)//. Βρίσκεται στην //Παλέτα Εργαλείων (Tool Palette)// κάτω μαζί με τα υπόλοιπα εργαλεία όπως τη //Βούρτσα Εδάφους (Ground Brush)// που είδαμε στη δημιουργία του κόσμου. Αφού το επιλέξετε, κάντε αριστερό κλικ με το ποντίκι σας σε κάποιο σημείο της πίστας και θα σας εμφανιστεί ένα μενού πίτα (όπως λέγεται!) με όλα τα αντικείμενα που μπορείτε να εισάγετε.

Ας ξεκινήσουμε με τον πρωταγωνιστή μας, τον //μηχανάκια (cycle)//! -->



Θα τον βρείτε εδώ --> --> Επιλέξτε τον.

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

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

ΣΗΜΕΙΩΣΗ ΣΕ ΠΛΑΙΣΙΟ: !!! Προσέξτε ότι όποτε δουλεύετε με αντικείμενα θα πρέπει να έχετε πατήσει το //Εργαλείο Αντικειμένων (Object Tool)//, αλλιώς το Kodu δεν θα ανταποκρίνεται αν κάνετε αριστερό ή δεξί κλικ με το ποντίκι πάνω στην πίστα ή πάνω σε κάποιο αντικείμενο !!!

Επόμενο αντικείμενο για εισαγωγή είναι το //κανόνι (cannon)//! -->



Θα το βρείτε εδώ --> --> Επιλέξτε το.

Τέλος, θα εισάγουμε τα τρία μήλα, ένα βόρεια, ένα δυτικά και ένα ανατολικά. Και το //μήλο (apple)// είναι ένα αντικείμενο είπαμε.

Θα το βρείτε εδώ -->

ΣΗΜΕΙΩΣΗ ΣΕ ΠΛΑΙΣΙΟ: Στο σημείο αυτό ίσως να αναρωτιέστε για το πώς μπορείτε να πλοηγηθείτε μέσα στον κόσμο που δημιουργείτε. Πώς θα μπορούσα να δω από διαφορετική οπτική τον κόσμο που δημιούργησα; Τι γίνεται με την κάμερα; Πώς γίνεται καθώς δημιουργούμε τον κόσμο μας να πηγαίνει η κάμερα στο βάθος ή πιο δεξιά ή να αλλάζει κλίση, κτλ.? Είναι πολύ απλό. Η μία λύση είναι από τις //επιλογές επεξεργασίας (edit)// κάτω να πατήσετε την //Μετακίνηση Κάμερας (Move Camera)// --> ΟΛΑ ΤΑ ΠΑΡΑΚΑΤΩ ΣΕ ΕΝΑΝ ΠΙΝΑΚΑ(αριστερά η εικόνα-ενέργεια του χρήστη/δεξιά η κίνηση της κάμερας): Στη συνέχεια κρατήστε απλώς πατημένο το αριστερό πλήκτρο του ποντικιού και μετακινείστε το ποντίκι προς την κατεύθυνση που θέλετε να πάει η κάμερα. Αντίστοιχα με πατημένο το δεξί πλήκτρο μπορείτε να μετακινείτε το ποντίκι και αυτό να αλλάζει την κλίση της κάμερας. Ενώ με το πλήκτρο κύλισης του ποντικιού αλλάζετε την απόσταση της κάμερας. Ο άλλος τρόπος είναι αντί να επιλέξετε την //Μετακίνηση Κάμερας (Move Camera)//, να κρατάτε πατημένο το πλήκτρο Space στο πληκτρολόγιο και μετά να χρησιμοποιήσετε το ποντίκι όπως είπαμε τώρα πριν.

Θαυμάστε το δημιούργημά σας..

Ολοκληρώσαμε τον κόσμο-πίστα, τοποθετήσαμε και τα αντικείμενά μας, καιρός λοιπόν να προγραμματίσουμε! Καιρός δηλαδή να δώσουμε συγκεκριμένες συμπεριφορές στα αντικείμενά μας..


 * 3.7 Δίνω Συμπεριφορές στα Αντικείμενα**

Πατήστε την //Αρχή Παιχνιδιού (Play Game)// από την //Παλέτα Εργαλείων (Tool Palette)// για να παίξουμε το παιχνίδι που δημιουργήσαμε. Τι παρατηρείτε? Τι γίνεται? Ακριβώς!!! Δεν γίνεται ΤΙΠΟΤΑ απολύτως!!! Λογικό δεν είναι? Αφού δεν έχουμε δώσει καμιά συμπεριφορά στα αντικείμενα..

Για να προγραμματίσουμε ένα αντικείμενο πρέπει να πατήσουμε Esc για να εμφανιστεί η //Παλέτα Εργαλείων (Tool Palette)//, να επιλέξουμε το //Εργαλείο Αντικειμένων (Object Tool)// και να κάνουμε **__δεξί κλικ__** με το ποντίκι μας πάνω στο αντικείμενο στο οποίο θέλουμε να αποδώσουμε συμπεριφορά. Ας ξεκινήσουμε με το μηχανάκια. Κάνουμε δεξί κλικ πάνω του. Από τις επιλογές που θα εμφανιστούν πατάμε στο //Προγραμμάτισε (Program)//.

Θα παρατηρήσετε εκεί ότι η εντολή που μπορούμε να δημιουργήσουμε έχει συγκεκριμένη μορφή, που αποτελείται από δύο τμήματα:

++εικόνα
 * //ΟΤΑΝ (WHEN)//… //ΚΑΝΕ (DO)//…**

Σας θυμίζει κάτι? Μήπως τη συμπεριφορά των αντικειμένων στο παιχνίδι Pacman που είχαμε δει στην αρχή?
 * //ΟΤΑΝ (WHEN)//** συμβεί **ΓΕΓΟΝΟΣ, ΤΟΤΕ //ΚΑΝΕ (DO)// ΕΝΕΡΓΕΙΑ**

[[image:k05_flow0.png]]
Μήπως επίσης σας θυμίζει τις συμπεριφορές των αντικειμένων του κόσμου μας, όπως αποφασίσαμε να τις καθορίσουμε στην παράγραφο 3.4? Για να θυμηθούμε την πρώτη συμπεριφορά για το μηχανάκια
 * **1η ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε **ΟΤΑΝ** ο μηχανάκιας __αισθανθεί__ ότι στο πληκτρολόγιο πατιέται ένα βέλος (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να κινείται στην αντίστοιχη κατεύθυνση πάνω στην πίστα (**ΕΝΕΡΓΕΙΑ**).

Ορίστε η αντίστοιχη εντολή που μπορούμε να δώσουμε στον μηχανάκια στο Kodu:
 * //ΟΤΑΝ (WHEN)// πατηθούν στο //πληκτρολόγιο (keyboard)// τα //Bέλη (Arrows//), ΤΟΤΕ //κινήσου αντίστοιχα//** **//(move)//**.

Το "**ΟΤΑΝ πατηθούν στο πληκτρολόγιο τα Βέλη"** είναι το __ΓΕΓΟΝΟΣ__ που προκαλεί την ενέργεια. Το "**κινήσου αντίστοιχα**" είναι η __ΕΝΕΡΓΕΙΑ__ που θα εκτελέσει ο μηχανάκιας όταν αντιληφθεί με τον αισθητήρα αλληλεπίδρασης με τον χρήστη-παίκτη το πάτημα ενός βέλους στο πληκτρολόγιο. Θυμηθείτε: ΓΕΓΟΝΟΣ + ΕΝΕΡΓΕΙΑ = ΣΥΜΠΕΡΙΦΟΡΑ, άρα ολόκληρη η παραπάνω πρόταση-εντολή αποτελεί μία __ΣΥΜΠΕΡΙΦΟΡΑ__ του μηχανάκια.

Επιλέξτε λοιπόν //Προγραμμάτισε (Program)// στον μηχανάκια και δημιουργήστε την εντολή: Απλώς πατήστε πάνω στο “+” του **//ΟΤΑΝ (WHEN)//** και επιλέξτε την εικόνα με το //πληκτρολόγιο (keyboard)// και μετά ξαναπατήστε στο “+” του **//ΟΤΑΝ (WHEN)//** και επιλέξτε την εικόνα με τα //Bέλη (Arrows)//. Μετά πατήστε πάνω στο “+” του **//ΚΑΝΕ (DO)//** και επιλέξτε την εικόνα //κινήσου αντίστοιχα (move)//.

Έτοιμη η πρώτη εντολή! Δεν τη δοκιμάζουμε να δούμε αν δουλεύει όπως θέλουμε? Πατήστε Esc και επιλέξτε την //Αρχή Παιχνιδιού (Play Game)// από την //Παλέτα Εργαλείων (Tool Palette)//. Δοκιμάστε να κινήσετε τον μηχανάκια. Όλα εντάξει?

Ας προχωρήσουμε στη δεύτερη συμπεριφορά
 * **2η ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε **ΟΤΑΝ** ο μηχανάκιας __ακουμπήσει__ ένα μήλο (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να τρώει το μήλο (**ΕΝΕΡΓΕΙΑ**).

Η αντίστοιχη εντολή που θα δώσουμε στον μηχανάκια:
 * //ΟΤΑΝ (WHEN)// //χτυπήσεις σε (bump)// //μήλο (apple),// ΤΟΤΕ //φάε (eat) το (it)//**.

Το " **ΟΤΑΝ χτυπήσεις σε μήλο"** είναι το __ΓΕΓΟΝΟΣ__ που προκαλεί την ενέργεια. Το " **φάε το**" είναι η __ΕΝΕΡΓΕΙΑ__ που θα εκτελέσει ο μηχανάκιας όταν αντιληφθεί με τον αισθητήρα της αφής ότι ακουμπάει ένα μήλο. Ολόκληρη η παραπάνω πρόταση-εντολή αποτελεί άλλη μία __ΣΥΜΠΕΡΙΦΟΡΑ__ του μηχανάκια.

Επιλέξτε λοιπόν ξανά //Προγραμμάτισε (Program)// στον μηχανάκια και δημιουργήστε την εντολή:

το //μήλο (apple)// θα το βρείτε εδώ --> 2 εικόνες

Δοκιμάστε αν θέλετε όπως και πριν με την //Αρχή Παιχνιδιού (Play Game)// να δείτε αν όλα δουλεύουν όπως θέλουμε.


 * **3η ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε **ΟΤΑΝ** ο μηχανάκιας __δεν βλέπει__ κανένα μήλο (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να τερματίζει το παιχνίδι με νίκη για τον παίκτη (**ΕΝΕΡΓΕΙΑ**).

Η αντίστοιχη εντολή που θα δώσουμε στον μηχανάκια:
 * //ΟΤΑΝ (WHEN)// //δεν (not) βλέπεις (see) μήλο (apple),// ΤΟΤΕ //τερμάτισε το παιχνίδι με νίκη (win)//**.

Το "**ΟΤΑΝ δεν βλέπεις μήλο"** είναι το __ΓΕΓΟΝΟΣ__ που προκαλεί την ενέργεια. Το "**τερμάτισε το παιχνίδι με νίκη**" είναι η __ΕΝΕΡΓΕΙΑ__ που θα εκτελέσει ο μηχανάκιας όταν αντιληφθεί με τον αισθητήρα της όρασης ότι δεν βλέπει κανένα μήλο. Ολόκληρη η παραπάνω πρόταση-εντολή αποτελεί την τρίτη και τελευταία __ΣΥΜΠΕΡΙΦΟΡΑ__ του μηχανάκια.

Επιλέξτε λοιπόν ξανά //Προγραμμάτισε (Program)// στον μηχανάκια και δημιουργήστε την εντολή:

το //τερμάτισε το παιχνίδι με νίκη (win)// θα το βρείτε στην κατηγορία //παιχνίδι (game)// εδώ --> 2 εικόνες

Δοκιμάστε ξανά να δείτε αν όλα δουλεύουν όπως θέλουμε.

ΣΗΜΕΙΩΣΗ ΣΕ ΠΛΑΙΣΙΟ: Προσέξατε πώς η άρνηση, δηλαδή το //δεν (not)//, μπαίνει σαν τρίτη και τελευταία εικόνα μετά το //ΟΤΑΝ (WHEN)// στην εντολή? Λίγο περίεργο?!? Σαν να λέμε "**//ΟΤΑΝβλέπεις// //μήλο// //δεν//, //ΤΟΤΕ τερμάτισε το παιχνίδι με νίκη (win)//".** Το __ΓΕΓΟΝΟΣ__ δηλαδή που προκαλεί την ενέργεια θα είναι το "**ΟΤΑΝ βλέπεις μήλο δεν".** Με τον τρόπο αυτό ολόκληρο το κομμάτι του //ΟΤΑΝ// που βρίσκεται πριν από το //δεν// γίνεται άρνηση. Εκεί δηλαδή που το γεγονός θα προκαλούνταν όταν το αντικείμενό μας δει το μήλο, με το //δεν// στο τέλος το γεγονός προκαλείται όταν το αντικείμενο μας δεν βλέπει μήλο, το ανάποδο δηλαδή.

Συνεχίζουμε με το δεύτερο αντικείμενο, το κανόνι o **ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε **ΟΤΑΝ** το κανόνι __βλέπει__ τον μηχανάκια (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να τον κυνηγάει (**ΕΝΕΡΓΕΙΑ**).

Η αντίστοιχη εντολή που θα δώσουμε στο κανόνι:
 * //ΟΤΑΝ (WHEN) δεις (see)// τον //μηχανάκια (cycle),// ΤΟΤΕ //κινήσου (move) προς το μέρος του (toward)//**//.//

Το "**ΟΤΑΝ δεις τον μηχανάκια"** είναι το __ΓΕΓΟΝΟΣ__ που προκαλεί την ενέργεια. Το "**κινήσου προς το μέρος του**" είναι η __ΕΝΕΡΓΕΙΑ__ που θα εκτελέσει το κανόνι όταν αντιληφθεί με τον αισθητήρα της όρασης ότι βλέπει τον μηχανάκια. Ολόκληρη η παραπάνω πρόταση-εντολή αποτελεί τη __ΣΥΜΠΕΡΙΦΟΡΑ__ του κανονιού.

Κάντε λοιπόν δεξί κλικ πάνω στο κανόνι, επιλέξτε //Προγραμμάτισε (Program)// και δημιουργήστε την εντολή:

τον //μηχανάκια (cycle)// θα τον βρείτε εδώ --> 2 εικόνες

Και τελικά έχουμε να προγραμματίσουμε τα τρία μήλα o **ΣΥΜΠΕΡΙΦΟΡΑ**: Θέλουμε κάθε μήλο **ΟΤΑΝ** ακουμπήσει με τον μηχανάκια (**ΓΕΓΟΝΟΣ**), **ΤΟΤΕ** να εξαφανίζεται (**ΕΝΕΡΓΕΙΑ**).

Για σκεφτείτε όμως, χρειάζεται να δώσουμε αντίστοιχη εντολή στα μήλα?

Θυμηθείτε τη 2η συμπεριφορά του μηχανάκια και την αντίστοιχη εντολή που γράψαμε στο Kodu: **//ΟΤΑΝ (WHEN)// //χτυπήσεις σε (bump)// //μήλο (apple),// ΤΟΤΕ //φάε (eat) το (it)//**. Ήδη με τη συμπεριφορά αυτή του μηχανάκια έχουμε εξασφαλίσει ότι κάθε φορά που ο μηχανάκιας ακουμπάει ένα μήλο [ή ένα μήλο ακουμπάει με τον μηχανάκια (το ίδιο είναι)] θα το τρώει, οπότε αυτό θα εξαφανίζεται. Ήδη δηλαδή με τη συμπεριφορά αυτή του μηχανάκια έχουμε πετύχει να δώσουμε και την επιθυμητή συμπεριφορά στα τρία μήλα. Θα ήταν πλεονασμός να προσθέταμε τρεις ακόμη εντολές (ίδιες και οι τρεις, μία για κάθε μήλο) που να αντιστοιχούν στην παραπάνω συμπεριφορά κάθε μήλου. Δεν χρειάζεται.

Κόσμος έτοιμος, αντικείμενα με συμπεριφορές έτοιμα.

Με άλλα λόγια είμαστε έτοιμοι να δοκιμάσουμε το παιχνίδι μας..

Πατήστε Esc και μετά //Αρχή Παιχνιδιού (Play Game)//.

Χρειάζεται 2-3 προτάσεις για τη διαφορετικότητα των αισθητήτων και την ποικιλία ενεργειών και ότι αυτά θα είναι στοιχεία που θα εξεταστούν διεξοδικά στα κεφάλαια 4-5-6

Καλή διασκέδαση!!!

++τελική εικόνα Πολύ βελτιωμένο το κεφάλαιο, πολύ βελτιωμένο το παιδαγωγικό κομμάτι. Νομίζω ότι στο παράδειγμα μπορείτε να βελτιώσετε τις περιγραφές ακόμη λίγο ενώ είναι σημαντικό να κλείσετε το κεφάλαιο κάνοντας ένα γενικό σχολιασμό περιεχομένων (περίληψη)

[|Αντικειμενοστραφής Προγραμματισμός] [|Αντικειμενοστραφής Προγραμματισμός] [|Αντικειμενοστραφής Προγραμματισμός] [|Γεγονοστραφής Προγραμματισμός] [|Γεγονοστραφής Προγραμματισμός] [|Characters] [|First Game Video] [|First Game Video] [|Objects, Attributes, and States] [|simple game tutorial] (20/3) πιθανή δραστηριότητα για το πρώτο παιχνίδι (20/3)

ΚΕΦΑΛΑΙΟ 3: Δημιουργώ το Πρώτο μου Παιχνίδι

3.1 Γεγονοστραφής Προγραμματισμός/ Αντικειμενοστραφής Προγραμματισμός 3.2 Τα Βασικά Στοιχεία ενός Παιχνιδιού: Ο Κόσμος και τα Αντικείμενα με τις Συμπεριφορές τους 3.3 Το Παιχνίδι που θα Σχεδιάσουμε 3.4 Πρώτα ας το Σκεφτούμε 3.5 Δημιουργώ τον Κόσμο 3.6 Δημιουργώ τα Αντικείμενα 3.7 Δίνω Συμπεριφορές στα Αντικείμενα

Μαθησιακοί στόχοι
 * 1) Να κατανοήσουν τι είναι γεγονοστραφής και τι αντικειμενοστραφής προγραμματισμός.
 * 2) Να καταδεικνύουν τα βασικά στοιχεία που συνθέτουν ένα πρόγραμμα – πρόβλημα.
 * 3) Να γνωρίζουν τον τρόπο εισαγωγής αντικειμένων και χαρακτήρων.
 * 4) Να κατανοήσουν την έννοια του αντικειμένου ,του χαρακτήρα,του περιβάλλοντος και των εντολών στην πραγματική ζωή και τον προγραμματισμό.
 * 5) Να γνωρίζουν τον τρόπο εισαγωγής ενεργειών στους χαρακτήρες και τα αντικείμενα.

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