Κεφάλαιο+8

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

Ομάδα 12 Γιάκα Χρυσούλα Τσαμαρδού Ηλιάνα

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

[|Timers and Scoring Video] [|Variables in a Game Video] [|Τι είναι οι μεταβλητές (στον προγραμματισμό);] (20/3) [|Η έννοια της μεταβλητής 1] (20/3) [|Η έννοια της μεταβλητής 2] (20/3) [|κεφάλαιο 14 του βιβλίου scratchplay] (20/3)


 * __ Η συγγραφή του διδακτικού πλάνου έγινε ταυτόχρονα και απο τις δυό μας. Παρόλο που μπαίναμε μία φορά στον ένα λογαριασμό και μία στον άλλο, αυτά που παραθέτουμε πιο κάτω είναι αποτέλεσμα κοινής συζήτησης και σκέψης. __**



=8 Mεταβλητές=

=8.1 Εισαγωγή= Ήρθε η ώρα να θυμηθείτε λίγο τα παραδείγματα που συναντήσατε στα προηγούμενα κεφάλαια, όπως το //ο// // Kodu μόνος ( //// kodu //// alone) //, όπου μάθατε τη χρησιμότητα της ενέργειας //Πυροβολώ(// // shoot) // στην ενότητα 5.3.4 του κεφαλαίου 5, //ο// // Kodu στο νερό ( //// Kodu //// on //// water) // στο υποκεφάλαιο 7.2.2 όπου ο Kodu αλληλεπιδρά με διάφορα είδη εδάφους της πίστας και πολλά άλλα. Κάποια από αυτά ήταν πιο απλά και άλλα λίγο πιο πολύπλοκα, όλα όμως είχαν ένα στόχο: να μάθετε πως να φτιάχνετε κόσμους, να εισάγετε διάφορους χαρακτήρες και να τους προγραμματίζετε. Η αλήθεια είναι ότι ίσως ακούγεται λίγο βαρετό. Τι θα λέγατε επομένως για περισσότερη δράση; Δεν θα ήταν πιο ενδιαφέρον να προσθέτατε σκορ, ενέργεια, χρόνο και ζωές; Έτσι θα διασκεδάζατε ακόμα πιο πολύ και τα παιχνίδια σας θα έμοιαζαν πολύ περισσότερο με τα υπόλοιπα που γνωρίζετε!! Θυμηθείτε! Σε πόσα από αυτά έχετε συγκεντρώσει πόντους π.χ. τρώγοντας μήλα, μαζεύοντας αστέρια, νομίσματα κλπ; Πόσες φορές έχει χρειαστεί να αντιμετωπίσετε το εκνευριστικό //Τέλος Παιχνιδιού (// // Game //// Over) // επειδή δεν έχετε άλλες ζωές, άλλο υπόλοιπο χρόνου ή επειδή η ενέργειά σας έχει φτάσει στο κόκκινο; Φανταστείτε λοιπόν τον Kodu στο //ο// // Kodu μόνος ( //// Kodu //// alone) // να κερδίζει δέκα πόντους για κάθε χελιδονόψαρο που σκοτώνει και στο //ο// // Kodu στο νερό ( //// Kodu //// on //// water) // να μειώνεται η αρχική ενέργεια του όταν συγκρουστεί με κάποιον από τους αντιπάλους του ή να μηδενίζεται όταν έρθει σε επαφή με το νερό που βρίσκεται δεξιά και αριστερά από το μονοπάτι που πρέπει να ακολουθήσει για να φτάσει στο τέρμα. Χμμμ... Σαν να γίνεται κάτι εδώ... Τι;; Θέλετε κι άλλο;; Α.. πρώτα θα πρέπει να καταλάβετε πως έχουν υλοποιηθεί όλα αυτά τα ενδιαφέροντα πραγματάκια και μετά! Αλήθεια, το σκεφτήκατε καθόλου αυτό;



Μην ψάχνετε κάποιο μαγικό τρόπο! Η απάντηση βρίσκεται πίσω από μία ίσως καινούρια για σας έννοια.....τη μεταβλητή. Μεταβλητή!!! Τι είναι όμως αυτό;! Υπομονή, όλα θα ξεδιαλύνουν στη συνέχεια.

=8.2 Η μεταβλητή και η σημασία της στα προγράμματα= Στον προγραμματισμό η μεταβλητή είναι ένα συμβολικό όνομα που δίνεται σε κάποια γνωστή ή άγνωστη ποσότητα ή πληροφορία και χρησιμοποιείται για να αναπαραστήσει ένα στοιχείο δεδομένου. Στην ουσία δηλαδή, είναι μία θέση μνήμης του υπολογιστή με συγκεκριμένο όνομα, στην οποία εκχωρείται μία τιμή, η οποία μπορεί να αλλάζει κατά τη διάρκεια εκτέλεσης ενός προγράμματος. Μα τι κινέζικα είναι αυτά!! Μην τρομάζετε, ας τα δούμε ένα ένα αναλυτικά. Για αρχή, φανταστείτε τη μνήμη του υπολογιστή σαν ένα μεγάλο πίνακα, οποίος αποτελείται από πολλά μικρά κουτάκια, σαν να λέμε δηλαδή μία σκακιέρα.



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



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



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

Επομένως μέχρι στιγμής η μνήμη του υπολογιστή, δηλαδή η σκακιέρα μας, είναι ως εξής:



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



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



Αν τώρα το σκορ συνεχίσει να αυξάνει, για παράδειγμα προστεθούν άλλοι τριακόσιοι πόντοι, καταλάβατε ποια θα είναι διαδικασία που θα πρέπει να ακολουθήσει ένας προγραμματιστής για να αποθηκεύσει το καινούριο αποτέλεσμα στη μνήμη; Όπως και πριν θα πρέπει να ανακαλέσει την παλιά τιμή της μεταβλητής σκορ που βρίσκεται στο ανάλογο κελί και να την αθροίσει με τους καινούριους πόντους, δηλαδή 500+300=800. Στη συνέχεια, θα πρέπει να αποθηκεύσει το αποτέλεσμα αυτό στο αντίστοιχο κελί. Η εικόνα επομένως της μνήμης θα είναι κάπως έτσι:



Μετά από όλα αυτά εσείς τι νομίζετε; Έχει το MSKodu μεταβλητές; Όπως όλα τα προγραμματιστικά περιβάλλοντα έχει, και μάλιστα δύο ειδών: τις καθολικές και τις τοπικές και ταυτόχρονα μας παρέχει αισθητήρες που τις παρακολουθούν και ενέργειες που μας επιτρέπουν να αλλάζουμε τις τιμές τους. Από τη μια πλευρά λοιπόν, έχουμε τις καθολικές μεταβλητές, οι οποιές είναι ορατές από όλους, άρα οποιοδήποτε αντικείμενο μπορεί να μπει στη διαδικασία να ανακαλέσει μία τέτοια μεταβλητή και να γράψει πάνω σε αυτή. Από την άλλη, έχουμε τις τοπικές μεταβλητές, που μοιάζουν περισσότερο με ιδιότητες ενός χαρακτήρα και παρόλο που μπορεί να επηρεάζονται από το γύρω περιβάλλον, ελέγχονται δηλαδή διαβάζονται, γράφονται, αρχικοποιούνται κλπ μόνο από τον ιδιοκτήτη τους. Ένα χαρακτηριστικό παράδειγμα καθολικής μεταβλητής στο MSKodu είναι το σκορ. Από τη στιγμή που θα εμφανιστεί στο παιχνίδι, ο πραγραμματιστής μπορεί να την αλλάξει μέσα από οποιοδήποτε αντικείμενο του παιχνιδιού. Είναι σχεδιασμένο να «κρατά» ακέραιες τιμές και αναπαριστάται με 37 διαφορετικούς τρόπους (από όλα τα γράμματα της αγγλικής αλφαβήτου και όλα τα χρώματα που υποστηρίζει το MSKodu)! Όσον αφορά στις τοπικές μεταβλητές, το χαρακτηριστικότερο ίσως παράδειγμα για να κατανοήσετε τη χρησιμότητα και το ρόλο τους μέσα στο MSKodu είναι η //Ενέργεια (////Health).// Η ενέργεια όμως ενός αντικειμένου που θα έπρεπε να βρίσκεται; Επειδή αφορά προσωπικά το κάθε αντικείμενο θα πρέπει να βρίσκεται «μέσα» σε αυτό, άλλωστε αυτός είναι και ο λόγος που ονομάζεται τοπική. Αν και εξακολουθεί να υπάρχει η δυνατότητα μία τοπική μεταβλητή να την βλέπουν και τα άλλα αντικείμενα, ο μόνος που μπορεί να την τροποποιήσει είναι ο ιδιοκτήτης της, δηλαδή αυτός στον οποίο αναφέρεται. Για να το κατανοήσετε καλύτερα φανταστείτε να μειώνεται η ενέργεια του //Μηχανάκια (////Cycle)// όταν συγκρουστεί με τον Kodu. O Kodu μπορεί να βλέπει την υγεία του //Μηχανάκια (////Cycle)// όμως δεν μπορεί να την αλλάξει, γι αυτό και η αντίστοιχη εντολή θα πρέπει να τοποθετηθεί στον //Μηχανάκια (////Cycle)// που είναι ο ιδιοκτήτης και όχι στον Kodu. Όπως λοιπόν καταλάβατε, η μεταβλητή είναι ένα αρκετά σημαντικό στοιχείο στον προγραμματισμό και η χρήση της είναι άκρως απαραίτητη για την εύρυθμη λειτουργία όλων των προγραμμάτων. Χωρίς αυτή δεν θα μπορούσαμε να αποθηκεύσουμε καμία τιμή που επιθυμούμε. Μετά τη μικρή θεωρητική παρένθεση ας αξιοποιήσουμε τις μεταβλητές στα παιχνίδια μας!

=8.3 Σκορ, Ενέργεια, Χρόνος, Ζωές=

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

A) Οι προσφερόμενες ενέργειες είναι η //Αύξηση (////Score) ﻿ και Μείωση (Subtract)  ,// οι οποίες βρίσκονται κρυμμένες πίσω από το εικονίδιο //Παιχνίδι (////Game)// στην αρχική πίτα του MSKodu:



Ο ρόλος τους είναι να αυξάνουν ή να μειώνουν αντίστοιχα την τιμή της μεταβλητής σκορ, ενώ αν τις συνδυάσετε με κάποιο από τα προσδιοριστικά //Βαθμοί (////Points)// μπορείτε να δηλώσετε και τους πόντους που θέλετε να προστεθούν ή να αφαιρεθούν από το σκορ σας. Αν επιθυμείτε κάτι τέτοιο να γίνει με τυχαίο τρόπο, τότε μπορείτε πάντα να χρησιμοποιήσετε το προσδιοριστικό //Tυχαία (Random).// Σημειώστε ότι οι ενέργειες αυτές και τα προσδιοριστικά τους μπορούν να εφαρμοστούν σε οποιοδήποτε αισθητήρα σκορ, ανεξαρτήτου χρώματος ή γράμματος! Για παράδειγμα, αν θέλετε ένας χαρακτήρας όταν συναντήσει ένα μαύρο μήλο να αυξάνει το πράσινο σκορ του κατά δύο βαθμούς μπορείτε να το προγραμματίσετε με την εντολή:



Αντίστοιχα, αν θέλετε να μειώνει με τυχαίο τρόπο το σκορ μπορείτε να το υλοποιήσετε ως εξής:



Β) Ο αισθητήρας για το σκορ είναι ο //Σκορ (////Scored)//, ο οποίος μας δίνει τη δυνατότητα να αναγνωρίσουμε πότε το σκορ έχει πάρει ποια τιμή, δηλαδή μας επιτρέπει να ανακαλέσουμε, να συγκρίνουμε και γενικά να χρησιμοποιήσουμε την τιμή του αποθηκευμένου σκορ. Τα πιο βασικά προσδιοριστικά που μπορούν να ακολουθούν τον αισθητήρα //Σκορ (////Scored)// είναι οι //Βαθμοί (////Points)//, το //Πάνω από (Above) // και το //Κάτω από (////Below)// . Αν θέλουμε ο χαρακτήρας μας να αντιλαμβάνεται πότε η τιμή του σκορ του είναι ίση με κάποια άλλη τιμή, αρκεί μετά τον αισθητήρα //Σκορ (////Scored)// να τοποθετήσουμε το προσδιοριστικό //Βαθμοί (////Points)// με την επιθυμητή τιμή. Αν πάλι επιθυμούμε η τιμή του σκορ να είναι πάνω από κάποιο αριθμό, τότε πρέπει να προσθέσουμε το προσδιοριστικό //Πάνω από (////Above),// ενώ αν θέλουμε να είναι μικρότερη από μια συγκεκριμένη τιμή χρησιμοποιούμε το προσδιοριστικό //Κάτω από (////Below).// Για παράδειγμα, αν θέλετε ο χαρακτήρας να κερδίζει όταν το σκορ παίρνει τιμή μεγαλύτερη του δέκα τότε αρκεί να τον προγραμματίσετε ως εξής:



Αν θέλετε να πειραματιστείτε ακόμη περισσότερο με τα προσδιοριστικά του σκορ μπορείτε να ανατρέξετε στην ανάλογη πίτα που σας παρέχει το MSKodu. Εκεί μπορείτε να βρείτε όλα τα προσδιοριστικά για τα διαφορετικά χρώματα και γράμματα για το σκορ, το προσδιοριστικό //Τυχαία (////Random) ,// το οποίο σας επιτρέπει να χρησιμοποιείτε τυχαίους αριθμούς στο παιχνίδι σας, καθώς και το προσδιοριστικό της άρνησης //Όχι (////Not)//

[tip: αν επιθυμείτε να εισάγετε στο παιχνίδι σας έναν αριθμό που δεν υποστηρίζετε από την πίτα τουMSKodu, μπορείτε να τον εμφανίσετε σαν άθροισμα. Δηλαδή, αν θέλετε να χρησιμοποιήσετε τον αριθμό 60 πρέπει να τοποθετήσετε τα προσδιοριστικά //Βαθμοί10 (////Points10)// και //Βαθμοί50 (////Points50)// δίπλα δίπλα κάπως έτσι:

]

Kodu: O Μηλοφάγος! ** [08_0 **** 1. **** kodu] **

Υποθέστε λοιπόν ότι έχουμε ένα κόσμο στον οποίο υπάρχει ο //Μηχανάκιας (////Cycle),// ένα δέντρο, μια πέτρα, δεκαπέντε κόκκινα και τρία μαύρα μήλα.



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

Εκτός από τα αντικείμενα που αποτελείτε το παιχνίδι μας, τα οποία είναι ο //Μηχανάκιας (////cycle),// το δέντρο, η πέτρα, τα κόκκινα και τα μαύρα μήλα, παρατηρήστε ότι για την υλοποίησή του χρειαζόμαστε δυο νέες ενέργειες. Ποιες είναι αυτές; Οι ενέργειες αυτές είναι η //Αύξηση (////Score////),// που όταν εκτελεστεί στο συγκεκριμένο παράδειγμα θα αυξήσει την τιμή του σκορ μας και η //Μείωση (////Subtract////),// που όταν εκτελεστεί θα μειώσει την τιμή του σκορ μας.

Όσον αφορά στις συμπεριφορές μπορούμε να διαπιστώσουμε πως εδώ μόνο ο //Μηχανάκιας (////Cycle)// έχει επιλεχτεί να έχει ορισμένες από αυτές.

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

Ας πάμε λοιπόν να προγραμματίσουμε τον πρωταγωνιστή μας:

α) Να αλληλεπιδρά με το πληκτρολόγιο, δηλαδή να μπορεί να κινείται προς όλες τις κατευθύνσεις όταν o χρήστης χρησιμοποιεί τα βελάκια του πληκτρολογίου. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Πληκτρολόγιο (////Keyboard)// με προσδιοριστικό τα //Βέλη (////Arrows)// και ως ενέργεια της εντολής θα υπάρχει η //Κίνηση (////Move).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



β) Όταν συναντά κάποιο μήλο, ο //Μηχανάκιας (////Cycle)// πρέπει να το τρώει. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump////)// και ως ενέργεια το //Τρώω (////Eat////).// Προσέχουμε να μην ξεχάσουμε να προσθέσουμε στην εντολή το προσδιοριστικό //Αυτό (////I////t)// μετά την ενέργεια //Τρώω (////Eat////)// και αυτό γιατί στο παιχνίδι μας ο //Μηχανάκιας (////Cycle)// μπορεί να έρθει σε επαφή με διάφορα αντικείμενα, όπως μήλα ή βράχους, οπότε πρέπει να σιγουρέψουμε ότι θα φάει το αντικείμενο που θέλουμε (στην προκειμένη περίπτωση το μήλο).

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



γ) Όταν συναντά ένα κόκκινο μήλο το σκορ του να αυξάνεται κατά ένα. Αυτό το νούμερο θα πρέπει να αποθηκευτεί κάπου και γι αυτό το λόγο χρησιμοποιούμε τη μεταβλητή σκορ. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump////)// και ως ενέργεια το //Αύξηση (////Score////).//

Προσοχή! Δώστε έμφαση σε αυτή και στις δύο επόμενες εντολές γιατί αποτελούν το σημείο αναφοράς αυτού του κεφαλαίου!

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:

ΟΤΑΝ [χτυπήσεις σε][μήλο][κόκκινο], ΤΟΤΕ [πρόσθεσε στο σκορ][κόκκινο] [ένα βαθμό]//.//

Παρατηρήστε τα προσδιοριστικά που χρησιμοποιήσαμε στην παραπάνω εντολή. Το //Κόκκινο (////Red////)// χρησιμεύει για να αναφερθούμε στο κόκκινο χρώμα που επιθυμούμε να έχει το μήλο. Το //Κόκκινο σκορ (////Score// //red////)// χρησιμεύει για να αναφερθούμε στο κόκκινο σκορ και τέλος το //Βαθμός01 (////Point////01)// για να προσδιορίσουμε το κατά πόσο θέλουμε να αυξηθεί το σκορ.

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



Παρατηρήστε ότι στο παράδειγμα αυτό χρησιμοποιήσαμε το κόκκινο σκορ εκμεταλλευόμενοι τις δυνατότητες που μας φέρει το MSKodu για την ύπαρξη διαφορετικών σκορ και άρα και διαφορετικών μεταβλητών. Εσείς εναλλακτικά μπορείτε να κάνατε χρήση οποιουδήποτε χρώματος ή ακόμα και γράμματος.

δ) Όταν συναντά ένα μαύρο μήλο το σκορ του να μειώνεται κατά ένα. Σε αυτή την εντολή η ενέργειά μας θα πρέπει να είναι η μείωση της μεταβλητής του κόκκινου σκορ κατά ένα και για αυτό θα χρησιμοποιήσουμε την ενέργεια //Μείωση (////Subtract),// η οποία εφαρμόζεται στο κόκκινο σκορ που έχουμε επιλέξει. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump////)// και ως ενέργεια το //Μείωση (////Subtract////).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:

ΟΤΑΝ [χτυπήσεις σε] [μήλο] [μαύρο], ΤΟΤΕ [μείωσε το σκορ] [κόκκινο] [κατά ένα βαθμό].

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

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



ε) Όταν συγκεντρώσει δέκα πόντους ο //Μηχανάκιας (////Cycle)// ανακηρύσσεται νικητής. Στην ουσία αυτή τη στιγμή πραγματοποιείται μία σύγκριση μεταξύ της τιμής που έχει το σκορ μας και των δέκα πόντων. Αν βρεθούν ίσες οι δύο αυτές τιμές τότε το παιχνίδι τελειώνει με το //Μηχανάκια (////Cycle)// να είναι ο μεγάλος νικητής. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Σκορ (////Scored)// και ως ενέργεια το //Νίκη (////Win).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:

ΟΤΑΝ [το κόκκινο] [σκορ φτάσει] [τους δέκα βαθμούς], ΤΟΤΕ [τερμάτισε το παιχνίδι με νίκη].

Επειδή θέλουμε το παιχνίδι μας να τελειώνει όταν το κόκκινο σκορ αποκτήσει την τιμή δέκα, όπως αναφέραμε και παραπάνω, θα χρησιμοποιήσουμε τον αισθητήρα σκορ με τα προσδιοριστικά //Κόκκινο (////Red////)// και //Βαθμοί10 (////Points////10).//

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



στ) Όταν χτυπήσει σε ένα βράχο τότε χάνει οριστικά. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (Β////ump////)// και ως ενέργεια το //Ήττα (////End////).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



Αφού προγραμματίσατε τη συμπεριφορά του //Μηχανάκια (////Cycle)// ήρθε η ώρα να ξεκινήσετε να παίζετε. Παρατηρήσατε κάτι καινούριο στην εικόνα του παιχνιδιού; Πάνω δεξιά και με κόκκινο χρώμα (κάτι που εσείς επιλέξατε //Κόκκινο σκορ (////Score// //red)//) εμφανίζεται το σκορ σας το οποίο αρχικά έχει την τιμή μηδέν, ενώ όσο ο χρήστης τρώει μήλα αυτό αυξάνεται. Αυτό δεν γίνεται μαγικά! Πίσω από όλα αυτά κρύβεται η έννοια της μεταβλητής. Στο συγκεκριμένο παράδειγμα, η μεταβλητή είναι το σκορ. Στην αρχή, η τιμή της είναι μηδέν, πράγμα μου σημαίνει ότι στο αντίστοιχο κουτάκι στη μνήμη του υπολογιστή υπάρχει ένα μηδενικό. Τη στιγμή που ο //Μηχανάκιας (// //Cycle)// φάει ένα κόκκινο μήλο η τιμή της μεταβλητής θα αυξηθεί, δηλαδή σε αυτό το κουτάκι η παλιά τιμή (το μηδέν) δεν υπάρχει, αλλά έχει αντικατασταθεί από την καινούρια (ένα). Αυτό θα συμβαίνει κάθε φορά που ένα κόκκινο μήλο τρώγεται, με αποτέλεσμα ο υπολογιστής να τοποθετεί τη νέα τιμή στην θέση της παλιάς. Εάν το μήλο που φαγωθεί είναι μαύρο, τότε η τιμή της μεταβλητής μειώνεται και στο κουτάκι πλέον τοποθετείται μια νέα τιμή που ισοδυναμεί με την παλιά μειωμένη κατά ένα.

Ας δούμε τώρα ένα στιγμιότυπο της μνήμης του μνήμης του υπολογιστή όπου βρισκόμαστε στην αρχή του παιχνιδιού και ο //Μηχανάκιας (////Cycle)// μόλις έχει φάει ένα κόκκινο μήλο.



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

(Ακολουθεί λεζάντα με α)Στην αρχή του παιχνιδιού β)Αφού ο //Μηχανάκιας (Cycle)// έχει φάει ένα κόκκινο μήλο γ) Αφού ο //Μηχανάκιας (Cycle)// έχει φάει ένα μαύρο μήλο δ) Αφού ο //Μηχανάκιας (Cycle)// έχει φάει δεύτερο κόκκινο μήλο ε) Αφού ο //Μηχανάκιας (Cycle)// έχει φάει και τρίτο κόκκινο μήλο).

Τι θα λέγατε να κάνατε και δικά σας παραδείγματα εμπλουτισμένα με σκορ;

Kodu: O Ρομπέν των Δασών!

Φανταστείτε λοιπόν έναν κόσμο που εκτός από τον Kodu (Ρομπέν των δασών) υπάρχουν κάποιοι πλούσιοι εχθροί, οι οποίοι προσπαθούν να απομακρυνθούν από αυτόν και ένας μισθοφόρος που προσπαθεί να τον σκοτώσει. Σκοπός του Ρομπέν είναι να πετύχει με τους πυραύλους του τόσο τους πλουσίους όσο και το μισθοφόρο και να τους σκοτώσει. Κάθε φορά που σκοτώνει έναν από τους πλούσιους εχθρούς πετάγονται νομίσματα, τα οποία πρέπει να μαζέψει για να τα δώσει στους φτωχούς. Άρα για το παιχνίδι μας θα χρειαστούμε δύο σκορ: το πρώτο θα είναι με κόκκινο χρώμα και θα αυξάνει κατά ένα κάθε φορά που ο Ρομπέν σκοτώνει ένα πλούσιο και το δεύτερο θα είναι με πράσινο και θα αυξάνει κατά τρία κάθε φορά που θα κλέβει ένα νόμισμα. Το παιχνίδι τελειώνει όταν ο Kodu (Ρομπέν των δασών) καταφέρει να σκοτώσει το μισθοφόρο.

Έχοντας μάθει στο κεφάλαιο 4 πώς να φτιάχνετε πίστες, μια καλή ιδέα θα ήτανε να διαμορφώσετε τη πίστα σας με τέτοιο τρόπο ώστε να μοιάζει με δάσος.

8.3.2 Εισάγετε ενέργεια
Στα περισσότερα παιχνίδια δράσης, ο ήρωας ξεκινά με συγκεκριμένη «ενέργεια» η οποία αρχίζει να μειώνεται όταν οι αντίπαλοί του καταφέρουν πλήγματα εναντίον του. Θα θέλατε να βάλουμε και στα δικά μας παιχνίδια την έννοια της ενέργειας; Οι ενέργειες και οι αισθητήρες που μας παρέχει το MSKodu για να παίζουμε με την //Ενέργεια (////Health)// είναι: Α) Οι προσφερόμενες ενέργειες είναι η //Αύξηση ενέργειας (////Heal)// και η //Μείωση ενέργειας (////Damage)// // ,// τις οποίες μπορείτε να τις επιλέξετε από την πίτα

που εμφανίζεται αν πατήσετε την επιλογή //Πάλη (////Combat)// στην αρχική πίτα. Δηλαδή, αν σε κάποιο παράδειγμα θέλουμε να μειώνεται η ενέργεια του Kodu όταν πέσει πάνω σε ένα //Mηχανάκια ( Cycle)//, μπορούμε να χρησιμοποιήσουμε το //Μείωση ενέργειας (////Damage)//, το οποίο αν το συνοδεύσουμε με το προσδιοριστικό //Βαθμοί (////Points)// θα οδηγηθούμε στη μείωση της ενέργειας κατά μία μονάδα. Η εντολή λοιπόν θα είναι η εξής:



Αν σε κάποια άλλη περίπτωση επιθυμήσουμε να αλλάξουμε το εύρος της μείωσης αυτής τότε μπορούμε να το καταφέρουμε πολύ εύκολα, απλά προσθέτοντας μετά το //Μείωση ενέργειας (////Damage)// τους //Βαθμούς (////Points)// με τον αντίστοιχο αριθμό. Αν τώρα θέλουμε να αυξήσουμε την ενέργεια και να επουλώσουμε τα τραύματα τότε θα χρησιμοποιήσουμε το //Αύξηση ενέργειας (////Heal)//, το οποίο λειτουργεί ακριβώς όπως το //Μείωση ενέργειας (////Damage)//, δηλαδή και αυτό μπορεί να ακολουθηθεί από το Β//αθμοί (////Points)// που θα επιλέξουμε. Η μόνη διαφορά έγκειται στο γεγονός ότι πλέον οι αντίστοιχοι //Βαθμοί (////Points)// προστίθενται στην ήδη υπάρχουσα ενέργεια και δεν αφαιρούνται από αυτή. Ωστόσο και στις δύο περιπτώσεις πρέπει να δηλώσουμε το αντικείμενο του οποίου η ενέργεια αυξάνεται ή μειώνεται. Αυτό γίνεται προσθέτοντας ένα ακόμα προσδιοριστικό μετά το //Βαθμοί (////Points)//, το οποίο αν αναφέρεται στον ίδιο το χαρακτήρα θα είναι το προσδιοριστικό //Εμένα (////Me)//, δηλαδή αν για παράδειγμα θέλουμε να αυξάνεται η ενέργεια του Kodu αν αποκτήσει ένα νόμισμα τότε θα γράψουμε το εξής:



Β) Ο αισθητήρας για την ενέργεια είναι η //Ενέργεια (////Health) //, ο οποίος μας δίνει τη δυνατότητα να αναγνωρίσουμε πότε η ενέργεια έχει πάρει ποια τιμή, δηλαδή μας επιτρέπει να χρησιμοποιήσουμε και να αξιοποιήσουμε την τιμή της αναλόγα με τις απαιτήσεις του παιχνιδιού που θέλουμε να υλοποιήσουμε. Το προσδιοριστικό που μπορεί να ακολουθεί τον αισθητήρα //Ενέργεια (////Health)// είναι οι //Βαθμοί (////Points).// Ένα αρκετά σύνηθες παράδειγμα είναι να θέλουμε να τερματίσουμε το παιχνίδι μας όταν η υγεία του χαρακτήρα μας μηδενιστεί. Το γεγονός αυτό μπορεί πολύ εύκολα να προγραμματιστεί αν συνδυάσουμε τον αισθητήρα της ενέργειας με τους μηδέν πόντους, δηλαδή:



Ας αρχίσουμε να παίζουμε!

Kodu: Ο Χρυσοθήρας! ** [08_0 **** 2. **** kodu] **

Υποθέστε πάλι πως είμαστε σε ένα κόσμο που περιέχει το //Μηχανάκια (////Cycle)//, ένα δέντρο, δέκα νομίσματα και πέντε χελώνες.



Σε αυτό το παράδειγμα, στόχος του χρήστη είναι να καταφέρει να πάρει τα δέκα νομίσματα αποφεύγοντας όμως τις χελώνες που κινούνται πάνω σε πολύπλοκα και απρόβλεπτα μονοπάτια και οι οποίες κάθε φορά που αγγίζουν το //Μηχανάκια (////Cycle)// του αφαιρούν ένα μέρος της ενέργειάς του. Το παιχνίδι τελειώνει είτε όταν ο //Μηχανάκιας (////Cycle)// δεν έχει ενέργεια, είτε όταν μαζέψει και τα δέκα νομίσματα.

Εκτός από τα αντικείμενα που αποτελείται το παιχνίδι μας, τα οποία είναι ο //Μηχανάκιας (////Cycle)//, το δέντρο, τα δέκα νομίσματα και οι πέντε χελώνες, παρατηρήστε ότι για την υλοποίησή του χρειαζόμαστε δύο νέες ενέργειες. Ποιες είναι αυτές; Οι ενέργειες αυτές είναι η //Αύξηση ενέργειας (////Heal),// που όταν εκτελεστεί στο συγκεκριμένο παράδειγμα θα αυξήσει την τιμή του ενέργειας του //Μηχανάκια (////Cycle)// και η //Μείωση ενέργειας (////Damage),// που όταν εκτελεσθεί θα μειώσει την τιμή της ενέργειας του //Μηχανάκια (////Cycle)//.

Όσον αφορά στις συμπεριφορές μπορούμε να διαπιστώσουμε πως εδώ έχουν επιλεχθεί να εμφανίζουν ορισμένες από αυτές ο //Μηχανάκιας (////Cycle)// και οι χελώνες.

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

Η ΣΥΜΠΕΡΙΦΟΡΑ που έχει κάθε χελώνα είναι:
 * Να μετακινείται πάνω στο προκαθορισμένο μονοπάτι.

Ας πάμε να προγραμματίσουμε το //Μηχανάκια (////Cycle)//:

α) Να αλληλεπιδρά με το πληκτρολόγιο, δηλαδή να μπορεί να κινείται προς όλες τις κατευθύνσεις όταν ο χρήστης χρησιμοποιεί τα βελάκια του πληκτρολογιου. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Πληκτρολόγιο (////Keyboard)// με προσδιοριστικό τα //Βέλη (////Arrows)// και ως ενέργεια της εντολής θα υπάρχει η //Κίνηση (////Move).// Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



β) Όταν συναντά κάποιο νόμισμα, ο //Μηχανάκιας (////Cycle)// πρέπει να το εξαφανίζει. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump)// και ως ενέργεια το //Eξαφανίζω (////Vanish) // //.// Προσέχουμε να μην ξεχάσουμε να προσθέσουμε στην εντολή το προσδιοριστικό //Αυτό (////It)// μετά την ενέργεια //Εξαφανίζω (////Vanish).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



γ) Όταν συναντά ένα νόμισμα η ενέργεια του να αυξάνεται κατά μία μονάδα. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα Χ//τυπάω σε (////Bump)// και ως ενέργεια το //Άυξηση (////Score).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



δ) Όταν συναντά μία χελώνα η ενέργεια του να μειώνεται κατά μία μονάδα. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump)// και ως ενέργεια το //Μείωση ενέργειας (////Damage).// Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:

ΟΤΑΝ [χτυπήσεις σε] [ χελώνα] ΤΟΤΕ [μείωσε την ενέργειά] [σου] [ένα βαθμό].

Παρατηρείστε πως με αυτή την εντολή κάνουμε εφαρμογή της θεωρίας που αναλύσαμε προηγουμένως, δηλαδή προσθέτουμε το προσδιοριστικό //Βαθμοί (////Points)// μετά την ενέργεια //Μείωση ενέργειας (////Damage),// προκειμένου να μειώσουμε την ενέργεια του χαρακτήρα μας, όπως μας υποδεικνύει άλλωστε και η εκφώνηση του παραδείγματος.

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



ε) Όταν συγκεντρώσει δέκα πόντους ο //Μηχανάκιας (////Cycle)// ανακηρύσσεται νικητής. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Σκορ(////Scored)// και ως ενέργεια το //Νίκη (////Win).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



στ) Όταν η ενέργειά του μηδενιστεί τότε το παιχνίδι να τερματίζει με ήττα για τον παίκτη. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Ενέργεια (////Health)// και ως ενέργεια το //‘Ηττα (////End).// Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:

ΟΤΑΝ [η ενέργεια] [ γίνει μηδέν] ΤΟΤΕ [τερμάτισε το παιχνίδι με ήττα].

Για περαιτέρω ανάλυση αυτής της εντολής μπορείτε να ανατρέξετε στην αρχή αυτής της υποενότητας.

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



Ας πάμε λοιπόν τώρα να προγραμματίσουμε τις χελώνες:

α) Να κινούνται πάνω στο προκαθορισμένο μονοπάτι. Στη συγκεκριμένη εντολή δεν χρησιμοποιούμε κανένα αισθητήρα παρά μόνο την ενέργεια //Κίνηση (////Move)// και αυτό γιατί δεν χρειάζεται να πραγματοποιηθεί κάποιο γεγονός για να εκτελεσθεί αυτή η ενέργεια. Η αντίστοιχη εντολή που μπορούμε να δώσουμε σε κάθε χελώνα είναι:

ΟΤΑN ΤΟΤΕ [κινήσου] [πάνω στο μονοπάτι].

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



Εάν αρχίσετε να παίζετε το παιχνίδι που μόλις προγραμματίσατε δεν θα δείτε πουθενά την ενέργεια. Πού πήγε; Η αλήθεια είναι πως δεν πήγε πουθενά γιατί πολύ απλά δεν την εμφανίσατε ποτέ. Όπως μάθατε και στο κεφάλαιο 6 για να την κάνετε ορατή πρέπει να πατήσετε δεξί κλικ πάνω στο //Μηχανάκια (////Cycle)// και να επιλέξετε //Αλλαγή Ρυθμίσεων (// //Change// //Settings )//. ‘Επειτα, από τη σκάλα ιδιοτήτων που εμφανίζεται αρκεί να επιλέξετε //Εμφάνιση Ενέργειας (// //Show// //Hit// //Points )//, προσέχοντας το αντίστοιχο εικονίδιο να γίνει πράσινο και ακριβώς από κάτω //(////Max// //Hit// //Points),// όπου προσδιορίζετε, κουνώντας δεξιά – αριστερά τα βελάκια, την αρχική ενέργεια που επιθυμείτε για το αντικείμενό σας. Εάν ξεκινήσετε και πάλι το παιχνίδι θα δείτε μία πράσινη μπάρα πάνω από το //Μηχανάκια (////Cycle)//, η οποία δείχνει κάθε στιγμή το επίπεδο ενέργειας που έχει. Καταλάβατε εδώ ποια είναι η μεταβλητή σας;;……… Ακριβώς! Η ενέργεια!! ‘Οπως και πρίν με το σκορ, έτσι και τώρα αναφερόμαστε σε ένα καινούριο κουτάκι της μνήμης του υπολογιστή, όπου περιέχεται η αρχική τιμή της ενέργειας. Άν δηλαδή στο //(////Max// //Hit// //Points)// είχατε επιλέξει είκοσι για αρχική ενέργεια, τότε η τιμή αυτή θα αποθηκευτεί στην αντίστοιχη θέση μνήμης.

Μετά από όλα αυτά που μάθατε ήρθε η ώρα να κάνετε τη θεωρία πράξη. Για αρχή, μπορείτε να τροποποιήσετε το ήδη υπάρχον παράδειγμα, εισάγοντας και αστέρια στην πίστα σας. Προγραμματίστε το //Μηχανάκια (////Cycle////)// ώστε όταν συγκρουστεί με κάποιο από αυτά, τότε οι πληγές του να επουλώνονται και η ενέργεια του να αυξάνεται κατά δύο μονάδες. Αν πάλι δεν καταφέρει να «γιατρευτεί» και η ενέργεια του μηδενιστεί, τότε πριν το παιχνίδι τελειώσει, ο //Μηχανάκιας (////Cycle////)// θα πρέπει να εκρήγνυται!! Προσοχή, επειδή στο συγκεκριμένο παράδειγμα υπάρχουν δύο ίδιες συνθήκες //ΌΤΑΝ (////WHEN)//



αλλά με διαφορετικά αποτελέσματα η κάθε μία: α) //Ήττα (////End)// και β) //Έκρηξη (Βoom me)// πρέπει η μία να προηγηθεί της άλλης, δηλαδή η //Έκρυξη (////Boom)// να πραγματοποιηθεί πριν από την //Ήττα (////End).// Για να υλοποιηθεί αυτό αρκεί να γράψετε την //Ήττα (////End)// ένα κενό πιο μέσα. Ενδεικτικά οι εντολές θα έχουν ως εξής:



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

Ας μην περιοριστούμε όμως μόνο στα παραδείγματα αυτού του κεφαλαίου. Θυμηθείτε το ενδιαφέρον παράδειγμα του κεφαλαίου 5 με το λαβύρινθο και προσπαθήστε να το αναπτύξετε λίγο περισσότερο. Φανταστείτε δηλαδή πόσο πιο πολύπλοκο αλλά και ευχάριστο θα γινόταν το παιχνίδι αν σε κάθε αδιέξοδο τοποθετούσατε έναν μηχανάκια-εχθρό που θα καραδοκούσε και με το που έβλεπε τον Kodu άρχιζε να τον κυνηγά. Αν τον ακουμπούσε τότε θα του μείωνε την ενέργεια του, ενώ αν ο Kodu κατάφερνε να φτάσει σώος στο τέλος του λαβυρίνθου και να φάει το μήλο τότε θα ήταν νικητής και το παιχνίδι θα τελείωνε. Αν όμως πριν φτάσει στο τέρμα η ενέργεια του είχε μηδενιστεί τότε..... //(Τέλος Παιχνιδιού)// //Game// //Over//. Καλό ε;;;

8.3.3 Εισάγετε χρόνο
Στα αμέσως προηγούμενα κεφάλαια μιλήσαμε για σκορ και ενέργεια, δηλαδή για δύο στοιχεία που συνέβαλαν σημαντικά στην πρόοδο των παιχνιδιών μας. Μήπως όμως δεν φτάνουν μόνο αυτά; Mήπως χρειαζόμαστε και κάτι άλλο που θα τα κάνει πιο αληθοφανή, πιο ρεαλιστικά αλλά και πιο προκλητικά; Ποια είναι η γνώμη σας για το χρόνο; Ααααα..... είναι και ο χρόνος!!! Μάλλον λοιπόν ήρθε η ώρα να επαναπροσδιορίσουμε όσα είπαμε ως τώρα λαμβάνοντας υπ’όψιν μας και ορισμένους χρονικούς περιορισμούς. Οι ενέργειες λοιπόν και οι αισθητήρες που μας παρέχει το περιβάλλον για να παίζουμε με το χρόνο είναι: Α) Η ενέργεια που μας προσφέρει το περιβάλλον και που μπορεί πολύ εύκολα να συνδυαστεί με το χρόνο, είναι η //Επανεκκίνηση παιχνιδιού (////Reset)// . Για να την χρησιμοποιήσετε θα πρέπει πρώτα να την αναζητήσετε στην εξής πίτα:



που εμφανίζετε πίσω από το προσδιοριστικό //Παιχνίδι (////Game) // της αρχικής πίτας του MSKodu. Για παράδειγμα, αν επιθυμούμε κάποιο παιχνίδι μας να αρχίζει ξανά από την αρχή όταν ο χρόνος περάσει τα 60 δευτερόλεπτα, τότε αρκεί να γράψουμε την εντολή:



Β) Το MSKodu προσφέρει ένα ξεχωριστό αισθητήρα για το χρόνο, το //Χρονόμετρο (Τ////imer)//, ο οποίος μας επιτρέπει να προκαλούμε ενέργειες σε διαφορετικές στιγμές εξέλιξης του παιχνιδιού. Ουσιαστικά είναι σαν ένας χρονομετρητής που αν τον συνδυάσουμε με το προσδιοριστικό //Δευτερόλεπτα (////Seconds)//, τότε μπορούμε να προσδιορίσουμε με ακρίβεια τη χρονική στιγμή που επιθυμούμε. Για παράδειγμα, αν θέλουμε ο χαρακτήρας μας να εκτοξεύει πυραύλους κάθε πέντε δευτερόλεπτα τότε θα πρέπει να χρησιμοποιήσουμε το προσδιοριστικό //5 δευτερόλεπτα (5// //seconds)// για να το υλοποιήσουμε. Θα έχουμε λοιπόν:



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

Kodu: Ο Άπληστος! ** [08_0 **** 3. **** kodu] **

Έστω ότι έχουμε ένα κόσμο με ένα Kodu, ένα δέντρο και δέκα πολύχρωμα νομίσματα.



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

Εκτός από τα αντικείμενα που αποτελείτε το παιχνίδι μας, τα οποία είναι ο Kodu, το δέντρο και τα δέκα πολύχρωμα νομίσματα, παρατηρήστε ότι για την υλοποίηση του χρειαζόμαστε τον αισθητήρα //Χρονόμετρο (////Timer),// ο οποίος στην ουσία θα σηματοδοτήσει τη λήξη του παιχνιδιού με ήττα για τον παίχτη.

Όσον αφορά στις συμπεριφορές μπορούμε να διαπιστώσουμε πως εδώ μόνο ο Kodu έχει επιλεχτεί να έχει ορισμένες από αυτές.

Οι ΣΥΜΠΕΡΙΦΟΡΕΣ που έχει ο Kodu είναι:

Ας πάμε λοιπόν να προγραμματίσουμε τον πρωταγωνιστή μας:
 * ΟΤΑΝ αισθανθεί ότι στο πληκτρολόγιο πατιέται ένα βέλος, ΤΟΤΕ κινείται στην αντίστοιχη κατεύθυνση πάνω στην πίστα.
 * ΟΤΑΝ ακουμπήσει ένα νόμισμα, ΤΟΤΕ το εξαφανίζει.
 * ΟΤΑΝ δεν βλέπει κανένα νόμισμα πάνω στην πίστα, ΤΟΤΕ τερματίζει το παιχνίδι με νίκη για τον παίχτη.
 * ΟΤΑΝ ο χρόνος φτάσει τα είκοσι δευτερόλεπτα, ΤΟΤΕ τερματίζει το παιχνίδι με ήττα για τον παίχτη.

α) Να αλληλεπιδρά με το πληκτρολόγιο, δηλαδή να μπορεί να κινείται προς όλες τις κατευθύνσεις όταν o χρήστης χρησιμοποιεί τα βελάκια του πληκτρολογίου. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Πληκτρολόγιο (////Keyboard)// με προσδιοριστικό τα //Βέλη (////Arrows)// και ως ενέργεια της εντολής θα υπάρχει η //Κίνηση (////Move).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στον Kodu είναι:



β) Όταν συναντά κάποιο νόμισμα, ο Kodu πρέπει να το εξαφανίζει. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (Βump)// και ως ενέργεια το //Εξαφανίζω (////Vanish////)// //.// Προσέχουμε να μην ξεχάσουμε να προσθέσουμε στην εντολή το προσδιοριστικό //Αυτό (////I////t)// μετά την ενέργεια //Εξαφανίζω (////Vanish////).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στον Kodu είναι:



γ) Όταν δεν βλέπει κάποιο νόμισμα στην πίστα τότε να ανακηρύσσεται νικητής. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Βλέπω (////See////)// και ως ενέργεια το //Νίκη (////Win////).// Προσέξτε ότι για να δηλώσουμε την άρνηση που επιθυμούμε, δηλαδή το γεγονός ότι κανένα νόμισμα δεν είναι ορατό στο χαρακτήρα, πρέπει να κάνουμε χρήση του προσδιοριστικού //Όχι (////Not////).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο Kodu είναι:

ΟΤΑΝ [βλέπεις] [κανένα] [νόμισμα], ΤΟΤΕ [τερμάτισε το παιχνίδι με νίκη].

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



Θα μπορούσε το παιχνίδι μας να τερματίσει και πάλι με νίκη αλλά με κάποιο διαφορετικό τρόπο; Σκεφτείτε λίγο...Φυσικά! Τι μάθαμε στην πρώτη ενότητα αυτού του κεφαλαίου; Το σκορ!!! Άρα, κάνοντας χρήση των όσων διδαχθήκαμε παραπάνω μία τυπική λύση ποια θα ήταν;; Μα να κρατάμε ένα σκορ και όταν αυτό φτάσει τους δέκα πόντους τότε το παιχνίδι να τερματίζει! Συνειδητοποιήσατε κάτι; Πως ένα γεγονός ή μία ενέργεια στο περιβάλλον μας μπορεί να υλοποιηθεί με παραπάνω από ένα τρόπους και να επιφέρει το ίδιο αποτέλεσμα στον κόσμο μας! Επομένως καμία σκέψη δεν είναι λάθος και καμία λύση δεν είναι μοναδική!!

δ) Όταν ο χρόνος φτάσει τα είκοσι δευτερόλεπτα το παιχνίδι να τελειώνει. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Χρονόμετρο (////Timer////)// με προσδιοριστικό τα 20 //δευτερόλεπτα (20// //seconds////)// και ως ενέργεια της εντολής θα υπάρχει η //Ήττα (////End////).// Αν τα είκοσι δευτερόλεπτα σας φαίνονται σύντομο χρονικό διάστημα μπορείτε να τα αντικαταστήσετε με κάποιο άλλο προσδιοριστικό, όπως για παράδειγμα αυτό των //100 δευτερολέπτων (100 seconds).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο Kodu είναι:

ΟΤΑΝ [το χρονόμετρο] [δείξει 20 δευτερόλεπτα], ΤΟΤΕ [τερμάτισε το παιχνίδι με ήττα].

Παρατηρήστε λοιπόν πόσο εύκολα και πόσο απλά μπορεί ο αισθητήρας //Χρονόμετρο (////Timer////)// να αναλάβει το ρόλο της συνθήκης τερματισμού του παιχνιδιού μας!

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



Τι θα γίνει όμως αν ο χρόνος φτάσει στα 40 δευτερόλεπτα; Θα ξαναεκτελεστεί η ενέργεια μας; Στο συγκεκριμένο παράδειγμα αυτό δεν μπορεί να πραγματοποιηθεί, γιατί πολύ απλά όταν περάσουν τα 20 δευτερόλεπτα το παιχνίδι θα τελειώσει. Ωστόσο, αν στη θέση της ενέργειας //Ήττα (////End)// υπήρχε κάποια άλλη, η οποία δεν τερμάτιζε το παιχνίδι, όπως για παράδειγμα αυτή που δώσαμε στην αρχή της ενότητας μας με το κανόνι και τους πυραύλους, τότε η συνθήκη ΌΤΑΝ [το χρονόμετρο φτάσει] [τα 20 δευτερόλεπτα], θα ενεργοποιούνταν κάθε 20 δευτερόλεπτα. Άρα θα είχαμε ικανοποίηση του γεγονότος



και επομένως ενεργοποίηση και εκτέλεση της αντίστοιχης ενέργειας ΤΟΤΕ [πυροβόλησε] [πυραύλους]



και στα 40 και στα 60 δευτερόλεπτα, γενικά δηλαδή σε κάθε πολλαπλάσιο του 20.

Σε περίπτωση που επιθυμούμε να εμφανίσουμε στην οθόνη το χρονόμετρο, το οποίο θα μετράει αντίστροφα το χρόνο μέχρι να φτάσει στο μηδέν, μπορούμε να κάνουμε ένα μικρό τρικ για να το αποκτήσουμε: Θα εμφανίσουμε μια μεταβλητή σκορ, θα της δώσουμε μια αρχική τιμή και στη συνέχεια κάθε ένα δευτερόλεπτο θα αφαιρούμε μια μονάδα από το σκορ. Ας το δούμε πιο αναλυτικά: Αρχικά, θα πρέπει να αρχικοποιήσουμε το χρονόμετρό μας, δηλαδή να δώσουμε μια τιμή από την οποία θα ξεκινά η αντίστροφη μέτρηση, έστω τα 20 δευτερόλεπτα. Στο συγκεκριμένο παράδειγμα, αυτό μπορούμε να το υλοποιήσουμε με τη βοήθεια του αισθητήρα //Σκορ (////Scored)// ακολουθούμενο από το προσδιοριστικό //Βαθμοί 20 (////Points 20).// Προσοχή! Η ενέργεια αυτή θα πρέπει να εκτελεσθεί μια φορά, γι’αυτό και στο τέλος θα χρησιμοποιήσουμε το προσδιοριστικό //Μία φορά (////Once)//. Τι θα γίνει όμως αν δεν το συμπεριλάβουμε στην εντολή μας; Τότε πολύ απλά η αρχική τιμή της αντίστροφης μέτρησης, δηλαδή τα 20 δευτερόλεπτα, θα αυξάνουν επ’άπειρον, καθώς η αντίστοιχη εντολή θα εκτελείται συνέχεια καθ’όλη τη διάρκεια του παιχνιδιού. Στη συνέχεια, κάθε ένα δευτερόλεπτο που περνά θα πρέπει το σκορ να μειώνεται κατά ένα, δηλαδή χρειάζεται να χρησιμοποιήσουμε την ενέργεια //Μείωση (////Subtract)// συνοδευόμενη από το προσδιοριστικό //Βαθμός01 (////Points01).// Τέλος, όταν το σκορ μας να γίνει ένα, το παιχνίδι τερματίζει. Γενικά λοιπόν οι παραπάνω εντολές έχουν ως εξής:



Ακόμη ένα παράδειγμα!

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

Οι επιπλέον εντολές που θα χρειαστούμε είναι :

α) Ανά τρία δευτερόλεπτα θα εμφανίζεται και μια πέτρα.



β) Όταν ο Kodu συγκρούεται με μία πέτρα τότε το παιχνίδι τερματίζει.



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

Ας πάρετε όμως τώρα εσείς τη σκυτάλη. Για να δούμε πόσο καλά μάθατε το χρόνο!; Θυμηθείτε το παράδειγμα στο κεφάλαιο 6 με το ποδοσφαιράκι. Δεν ήταν αρκετά πρωτότυπο; Τι θα λέγατε αν προσθέτατε επιπλέον χρόνο και σκορ, ούτως ώστε να μοιάζει περισσότερο με ένα πραγματικό αγώνα; Μία εκδοχή είναι να αναπαραστήσετε το τέρμα του αντιπάλου με μία σειρά από κόκκινα μήλα μπροστά από την κίτρινη γραμμή που φαίνεται στην εικόνα. Αν η μπάλα που κλοτσά ο Kodu ακουμπήσει έστω και ένα από τα μήλα αυτά τότε χρεώνεται με γκολ ο αντίπαλος. Τα γκολς μπορείτε να τα αναπαραστήσετε με ένα κόκκινο σκορ. Για να θεωρηθεί μία τέτοια σύγκρουση γκολ πρέπει να προγραμματίσετε τη μπάλα, ώστε όταν έρχεται σε επαφή με ένα κόκκινο μήλο να αυξάνει το κόκκινο σκορ κατά ένα. Καθ’όλη τη διάρκεια του παιχνιδιού μπορείτε επιπλέον να προσθέσετε και ένα χρονόμετρο, το οποίο θα κρατά το χρόνο και θα εμφανίζεται στην οθόνη σας με πράσινο χρώμα. Όταν περάσουν 60 δευτερόλεπτα τότε το παιχνίδι θα λήγει.

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

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

Με μια γρήγορη ματιά λοιπόν οι ενέργειες και οι αισθητήρες που θα χρησιμοποιήσουμε για να «παίξουμε» με τις ζωές είναι: Α) Οι ενέργειες //Αύξηση (////Score)// και //Μείωση (////Subtract).// Β) Ο αισθητήρας //Σκορ (////Scored).//

Θυμόσαστε τα αντίστοιχα προσδιοριστικά που μπορούμε να χρησιμοποιήσουμε;

Για να πάρετε μια ιδέα πως θα γίνει αυτό εστιάστε στο παρακάτω σενάριο.

Kodu: Ο κανονιέρης! ** [08_04.kodu] **

Έστω ότι έχουμε ένα δέντρο, ένα //Μηχανάκια (////Cycle),// αρκετά νομίσματα και ένα κανόνι. Ο σκοπός του παίκτη είναι να συγκεντρώσει όλα τα νομίσματα της πίστας ελέγχοντας τον //Μηχανάκια (////Cycle)// προκειμένου να αναδειχτεί νικητής. Ωστόσο, ανά τρία δευτερόλεπτα το κανόνι εκτινάσσει πυραύλους, οι οποίοι αν τον χτυπήσουν τότε του αφαιρούν μία ζωή. Ο αρχικός αριθμός των ζωών είναι τέσσερα, δηλαδή η κανονική του ζωή και ακόμα τρεις ευκαιρίες. Άν χάσει και τις τέσσερις ζωές του τότε το παιχνίδι τελειώνει.



Ποιες λοιπόν είναι οι συμπεριφορές στο παιχνίδι μας; Μπορέσατε να συγκρατήσετε ορισμένες από αυτές; Χμμ για να δούμε τι καταφέρατε! Για να είσαστε σωστοί πρέπει να έχετε εντοπίσει πως εδώ μόνο ο //Μηχανάκιας (////Cycle////)// και το κανόνι εμφανίζουν κάποιες συμπεριφορές!

‘Εχουμε λοιπόν:

Οι ΣΥΜΠΕΡΙΦΟΡΕΣ που έχει ο //Μηχανάκιας (////Cycle)// είναι:


 * Ξεκινώντας το παιχνίδι έχει τρεις ευκαιρίες (τέσσερις ζωές).
 * ΟΤΑΝ αισθανθεί ότι στο πληκτρολόγιο πατιέται ένα βέλος, ΤΟΤΕ κινείται στην αντίστοιχη κατεύθυνση πάνω στην πίστα.
 * ΟΤΑΝ ακουμπήσει ένα νόμισμα, ΤΟΤΕ το αρπάζει.
 * ΟΤΑΝ έχει στην κατοχή του ένα νόμισμα, ΤΟΤΕ το εξαφανίζει.
 * ΟΤΑΝ ακουμπήσει ένα πύραυλο, ΤΟΤΕ μειώνει κατά ένα τον αριθμών των ζωών του.
 * ΟΤΑΝ ακουμπήσει ένα πύραυλο, ΤΟΤΕ τον εξαφανίζει.
 * OTAN δεν βλέπει κανένα νόμισμα πάνω στην πίστα, ΤΟΤΕ τερματίζει το παιχνίδι με νίκη για τον παίκτη.
 * ΟΤΑΝ ο αριθμός των ζωών του φτάσει το -1, ΤΟΤΕ τερματίζει το παιχνίδι με ήττα για τον παίκτη.

Η ΣΥΜΠΕΡΙΦΟΡΑ που έχει το //κανόνι (////cannon////)// είναι:
 * ΟΤΑΝ περνάνε τρία δευτερόλεπτα ΤΟΤΕ εκτοξεύει πυραύλους.

Ας πάμε λοιπόν να προγραμματίσουμε τον //Μηχανάκια (////Cycle)://

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

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στον //μηχανάκια (////cycle////)// είναι:

ΟΤΑΝ TOTE [αύξησε το σκορ] [το πράσινο] [3 βαθμούς] [μία φορά].

Παρατηρήστε πως με αυτή την εντολή δίνουμε στο //Μηχανάκια (////Cycle)// τις ζωές που του αναλογούν στην αρχή του παιχνιδιού. Όπως και σε άλλα παραδείγματα, έτσι και τώρα, απαραίτητη είναι η χρήση του προσδιοριστικού //Μία φορά (////Once),// καθώς επιθυμούμε η ανάθεση αυτή των ζωών στο //Μηχανάκια (////Cycle),// να πραγματοποιηθεί μία φορά στην έναρξη.

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



β) Να αλληλεπιδρά με το πληκτρολόγιο, δηλαδή να μπορεί να κινείται προς όλες τις κατευθύνσεις όταν ο χρήστης χρησιμοποιεί τα βελάκια του πληκτρολογιου. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Πληκτρολόγιο (////Keyboard////)// με προσδιοριστικό τα //Βέλη (////Arrows////)// και ως ενέργεια της εντολής θα υπάρχει η //Κίνηση(////Move////).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



γ) Όταν συναντά κάποιο νόμισμα, ο //Μηχανάκιας (////Cycle)// πρέπει να το αρπάζει. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump)// και ως ενέργεια το //Αρπάζω (////Grab).// Προσέχουμε να μην ξεχάσουμε να προσθέσουμε στην εντολή το προσδιοριστικό //Αυτό (////It)// μετά την ενέργεια //Αρπάζω (////Grab).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (Cycle)// είναι:



δ) Όταν έχει στην κατοχή του ένα νόμισμα ο //Μηχανάκιας (////Cycle)// πρέπει να το εξαφανίζει. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Έχω (////Got)// και ως ενέργεια το //Εξαφανίζω (////Vanish).// Προσέχουμε και εδώ, όπως επισημάναμε και στην παραπάνω εντολή, να μην ξεχάσουμε να προσθέσουμε το προσδιοριστικό //Αυτό (////It)// μετά την ενέργεια //Εξαφανίζω (////Vanish).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



Θα μπορούσαν οι δύο παραπάνω εντολές να γραφτούν διαφορετικά; Η αλήθεια είναι ότι θα μπορούσαν να συμπτυχθούν σε μία, στην

OTAN [ακουμπήσεις σε] [ένα νόμισμα] ΤΟΤΕ [εξαφάνισε] [αυτό].

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

ε) Όταν ακουμπήσει ένα πύραυλο ο αριθμός των ζωών του να μειώνεται κατά μία. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump)// και ως ενέργεια τη //Μείωση (////Subtract).// Κάνουμε χρήση αυτής της ενέργειας γιατί μην ξεχνάτε: οι ζωές δεν είναι τίποτα άλλο, παρά ένα σκορ!

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



στ ) Όταν έρχεται σε επαφή με ένα πύραυλο ο //Μηχανάκιας (////Cycle) πρέπει να τον εξαφανίζει//. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump)// και ως ενέργεια το //Εξαφανίζω(////Vanish) ακολουθούμενη από το// προσδιοριστικό //Αυτό (////It).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (////Cycle)// είναι:



ζ) Όταν δεν βλέπει κάποιο νόμισμα στην πίστα τότε να ανακηρύσσεται νικητής. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Βλέπω (////See)// και ως ενέργεια το //Νίκη (////Win).// Θυμηθείτε ότι για να δηλώσουμε την άρνηση πρέπει να χρησιμοποιήσουμε το προσδιοριστικό //Όχι (////Not).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Μηχανάκια (Cycle)// είναι:



η) Όταν χάσει και την τελευταία του ζωή που ήταν η μηδενική, τότε πρέπει να τερματίζει το παιχνίδι με ήττα για τον παίκτη. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Σκορ (////Scored////)// με προσδιοριστικό τ//o// //Βαθμοί00 (////Points////00)// και ως ενέργεια της εντολής θα υπάρχει η //Ήττα (////End////).//

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

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στον //Μηχανάκια (Cycle)// είναι:



Ας πάμε λοιπόν τώρα να προγραμματίσουμε το κανόνι:

α) Το κανόνι ανά τρία δευτερόλεπτα πρέπει να εκτοξεύει ένα πύραυλο. Άρα εδώ θα πρέπει να χρησιμοποιήσουμε τον αισθητήρα //Χρονόμετρο (////Timer////)// και ως ενέργεια το //Εκτοξεύω (////Launch////).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο //Κανόνι (////Cannon)// είναι:



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

Τέλος ήρθε η σειρά σας! Ήρθε η ώρα δηλαδή να σκεφτείτε και να υλοποιήσετε τα δικά σας παραδείγματα. Πώς θα σας φαινόταν αν επεκτείνατε το ήδη υπάρχον παιχνίδι προσθέτοντας αστέρια που θα αναπλήρωναν τις χαμένες ζωές σας;;

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

Kodu: Ο Πολυορκητής!

Υποθέστε ότι ο παίκτης θα ελέγχει τον Κodu τον πολιορκητή! Σκοπός του είναι να φτάσει στο πολυπόθητο κάστρο και να το κατακτήσει. Ο δρόμος του όμως δεν θα είναι εύκολος καθώς θα έχει να αντιμετωπίσει πολλούς και διάφορους εχθρούς. Πιο συγκεκριμένα, οι εχθροί του θα είναι δύο-τρία κανόνια που θα βρίσκονται μπροστά από το κάστρο και θα το προστατεύουν, πετώντας ανά πέντε δευτερόλεπτα βόμβες προς στον Kodu που αν τον πετύχουν θα του αφαιρούν ζωές. Επίσης, εμπόδιο στην πορεία του θα αποτελούν και δύο ακόμα //Φίλοι του μηχανάκια (////Cycles////)//, που θα κινούνται ασταμάτητα σε πολύπλοκα μονοπάτια και οι οποίοι αν συγκρουστούν μαζί του θα επιφέρουν το ίδιο αποτέλεσμα. Οι μοναδικοί σύμμαχοι του Kodu θα είναι τα διάφορα νομίσματα που θα βρίσκονται διάσπαρτα στην πίστα. Κάθε φορά που θα καταφέρνει να συγκεντρώνει δέκα από αυτά τότε θα έχει μπόνους μία επιπλέον ζωή. Το παιχνίδι θα τελειώνει είτε αν ο Kodu χάσει όλες του τις ζωές είτε αν καταφέρει να προσπεράσει όλους του τους εχθρούς και να φτάσει στο κάστρο.

=8.4 Παραδείγματα= Συνδυάζοντας όλα τα παραπάνω μπορούμε να φτιάξουμε ακόμα πιο πολύπλοκα και πιο δύσκολα παιχνίδια. Θα θέλατε να δοκιμάσετε να δημιουργήσετε κάτι τέτοιο; Αν ναι τότε διαβάστε το παρακάτω σενάριο:

Kodu: Ο Ναυαγός! ** [08_05.kodu] **

Έστω ότι έχετε ένα κόσμο με πρωταγωνιστή τον Kodu, ο οποίος έχει ναυαγήσει σε ένα νησί και προσπαθεί να φτάσει σε ένα μεγάλο καράβι που εμφανίστηκε στην άλλη πλευρά του νησιού. Όμως, καθώς κατευθύνεται προς τα εκεί εμφανίζονται από το πουθενά ψάρια-ζόμπι, τα οποία προσπαθούν να του δυσκολέψουν το δρόμο. Προκειμένου ο Kodu να φτάσει στο καράβι, θα πρέπει να τα αποφύγει, αλλά όταν αυτό δεν είναι εφικτό, τότε τους πετάει πυραύλους! Για κάθε ζόμπι που πυροβολεί θα κερδίζει δέκα πόντους ενώ για κάθε ένα με το οποίο συγκρούεται θα μειώνεται η ενέργεια του κατά δύο μονάδες. Δυστυχώς οι εχθροί του δεν είναι μόνο αυτοί. Υπάρχει και άλλος ένας και αυτός είναι ο χρόνος! Θα πρέπει δηλαδή να φτάσει το καράβι μέσα σε διάστημα ενός λεπτού. Αν δεν τα καταφέρει τότε το παιχνίδι τερματίζει. Όμως το παιχνίδι δεν τελειώνει μόνο σε αυτή την περίπτωση! Υπάρχει ακόμη μια, ο Κodu να χάσει όλη του την ενέργεια.

Αν αναλύσετε το παραπάνω σενάριο πιο προσεκτικά θα διακρίνετε τα εξής αντικείμενα: τον Kodu, το καράβι και τα ψάρια-ζόμπι.

Ποια από αυτά εμφανίζουν συμπεριφορές; Ο Kodu και τα ψάρια-ζόμπι. Ας τις αναλύσουμε λοιπόν!

Οι ΣΥΜΠΕΡΙΦΟΡΕΣ που έχει ο Kodu είναι:


 * ΟΤΑΝ αισθανθεί ότι στο πληκτρολόγιο πατιέται ένα βέλος, ΤΟΤΕ κινείται γρήγορα προς στην αντίστοιχη κατεύθυνση πάνω στην πίστα.
 * ΟΤΑΝ αισθανθεί ότι στο πληκτρολόγιο πατιέται το πλήκτρο //Κενό (////Space)//, ΤΟΤΕ πετάει πυραύλους.
 * ΟΤΑΝ πετύχει το στόχο του, δηλαδή χτυπήσει ένα ψάρι-ζόμπι, ΤΟΤΕ αυξάνει το κίτρινο σκορ κατά δέκα πόντους.
 * ΟΤΑΝ συγκρουστεί με ένα ψάρι-ζόμπι, ΤΟΤΕ μειώνει την ενέργεια του κατά δύο μονάδα.
 * ΟΤΑΝ η ενέργεια του μηδενιστεί, ΤΟΤΕ τερματίζει το παιχνίδι με ήττα για τον παίχτη.
 * ΟΤΑΝ ο χρόνος γίνει 60 δευτερόλεπτα, ΤΟΤΕ τερματίζει το παιχνίδι με ήττα για τον παίχτη.
 * ΟΤΑΝ ακουμπήσει το καράβι, ΤΟΤΕ τερματίζει το παιχνίδι με νίκη για τον παίχτη.

Η ΣΥΜΠΕΡΙΦΟΡΑ που έχει το κάθε ένα ψάρι-ζόμπι είναι:


 * OTAN δει τον Kodu, ΤΟΤΕ κινείται αργά προς το μέρος του.

[tip: για την αναπαράσταση των ψαριών-ζόμπι μπορείτε να χρησιμοποιήσετε το αντικείμενο //Χελιδονόψαρο (////Fly// //fish).//]

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



Ας δούμε τον προγραμματισμό του ήρωα μας αρχικά:

α) Να αλληλεπιδρά με το πληκτρολόγιο, δηλαδή να μπορεί να κινείται προς όλες τις κατευθύνσεις όταν o χρήστης χρησιμοποιεί τα βελάκια του πληκτρολογίου. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Πληκτρολόγιο (////Keyboard)// με προσδιοριστικό τα //Βέλη (////Arrows)// και ως ενέργεια της εντολής θα υπάρχει η //Κίνηση (////Move).// Επειδή θέλουμε ο Kodu να κινείται γρήγορα χρησιμοποιούμε επιπλέον και το προσδιοριστικό //Γρήγορα (////Quickly).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στον Kodu είναι:



β) Να αλληλεπιδρά με το πληκτρολόγιο, δηλαδή να μπορεί να πετάει πυραύλους όταν o χρήστης πατά το πλήκτρο κενό του πληκτρολογίου. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Πληκτρολόγιο (////Keyboard)// με προσδιοριστικό το //Κενό (////Space)// και ως ενέργεια της εντολής θα υπάρχει το //Πυροβολώ (////Shoot)// με προσδιοριστικό το //Πύραυλος (////Missile)//.

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στον Kodu είναι:



γ) Να αυξάνει το κίτρινο σκορ κατά δέκα πόντους όταν πετυχαίνει το στόχο του. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Πετυχαίνω (////Shot// //hit////)// και ως ενέργεια της εντολής θα υπάρχει η //Αύξηση (////Scored////).// Επίσης επιλέξαμε τυχαία ένα χρώμα για την απεικόνιση του σκορ το οποίο όπως θα διαπιστώσετε παρακάτω είναι το κίτρινο.

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στον Kodu είναι:



δ) Να μειώνεται η ενέργειά του κατά δύο μονάδες όταν συγκρούεται με ένα από τα ψάρια-ζόμπι. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump)// και ως ενέργεια της εντολής θα υπάρχει η μείωση //Ενέργειας (////Damage).// Παρατηρήστε ότι στο τέλος της εντολής τοποθετούμε το προσδιοριστικό //Εμένα (////Me),// προκειμένου να είμαστε σίγουροι ότι η ενέργεια που θα μειωθεί είναι δική του και όχι κάποιου άλλου χαρακτήρα του παιχνιδιού.

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο Kodu είναι:



ε) Να τερματίζει το παιχνίδι με ήττα για τον παίχτη όταν η ενέργεια του Kodu μηδενιστεί. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Ενέργεια (////Health)// ακολουθούμενη από το προσδιοριστικό //Βαθμοί00 (////Points 00)// και ως ενέργεια της εντολής θα υπάρχει η //Ήττα (////End).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο Kodu είναι:



στ) Να τερματίζει το παιχνίδι επίσης με ήττα για τον παίχτη όταν ο χρόνος γίνει 60 δευτερόλεπτα. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Χρονόμετρο (////Timer)// ακολουθούμενο από το προσδιοριστικό //60 δευτερόλεπτα (////Seconds 60)// και ως ενέργεια της εντολής θα υπάρχει η //Ήττα (////End).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο Kodu είναι:



ζ) Να τερματίζει το παιχνίδι με νίκη για τον παίχτη όταν o Kodu φτάνει στο καράβι. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Χτυπάω σε (////Bump)// και ως ενέργεια της εντολής θα υπάρχει η //Νίκη (////Win).//

Η αντίστοιχη εντολή που μπορούμε να δώσουμε στο Kodu είναι:



Ας πάμε λοιπόν τώρα να προγραμματίσουμε το κάθε //ψαρί-ζόμπι (////Fly// //fish)//: α) Όταν ένα ψάρι-ζόμπι δει τον Kodu τότε να κινείται αργά προς το μέρος του. Άρα θα χρησιμοποιήσουμε τον αισθητήρα //Βλέπω (////See)// και ως ενέργεια της εντολής θα υπάρχει η //Κίνηση// //(////Move).// Για να δηλώσουμε ότι επιθυμούμε τα ψάρια-ζόμπι να κινούνται προς το μέρος του Kodu χρησιμοποιούμε το προσδιοριστικό //Προς το μέρος (////Toward)// ενώ για να επισημάνουμε ότι η κίνηση θα είναι αργή προσθέτουμε επιπλέον και το προσδιοριστικό //Αργά (////Slowly)// στο τέλος της εντολής.

Η αντίστοιχη εντολή που μπορούμε να δώσουμε σε κάθε //ψαρί-ζόμπι (////Fly// //fish) είναι//:



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





Παρατηρήστε ότι το προσδιοριστικό //Βαθμοί60 (////Points60)// που εμφανίζεται στην παραπάνω εντολή, δεν υπάρχει αυτούσιο σε κάποια από τις πίτες του MSKodu. Τι κάνουμε λοιπόν σε αυτή την περίπτωση; Θυμηθείτε πως μπορούμε να το εμφανίσουμε σαν άθροισμα δύο άλλων προσδιοριστικών που προσφέρει το περιβάλλον μας, αυτά τον //Βαθμών10 (////Points 10)// και //Βαθμών50 (////Points50).//

=Περίληψη= Έχοντας φτάσει το κεφάλαιο στο τέλος του, θα πρέπει να είστε σε θέση να μπορείτε να εισάγετε σκορ, ενέργεια, ζωές και χρόνο στα παιχνίδια σας, ώστε να δημιουργείτε πιο πολύπλοκες και ενδιαφέρουσες πίστες. Θα πρέπει δηλαδή να μπορείτε να αναγνωρίζετε τους αισθητήρες που μάθατε, όπως για παράδειγμα το //Σκορ (////Scored)//, το //Χρονόμετρο (////Timer)//, την //Ενέργεια (////Health)// κλπ, καθώς επίσης και τις ενέργειες που μπορούν να δράσουν πάνω τους, όπως //Αύξηση (////Scored)//, //Μείωση ενέργειας (////Damage)// και πολλές άλλες. Επίσης, θα πρέπει να έχετε κατανοήσει την έννοια της μεταβλητής και τη σημασία της στον προγραμματισμό.

=Ερωτήσεις= 1. Σχεδιάστε το στιγμιότυπο που θα έχει η μνήμη του υπολογιστή όταν ο Kodu, στο παράδειγμα ο Kodu ο κανονιέρης, έχει χτυπηθεί από 2 πυραύλους. 2. Έστω ότι σε ένα από τα παιχνίδια σας θέλετε ο Kodu να πυροβολεί και να καταστρέφει το //Μηχανάκια (////Cycle).// Ποιο προσδιοριστικό θα πρέπει να συμπεριλάβετε στο πρόγραμμα σας ούτως ώστε να εξασφαλίσετε ότι αυτός που θα εξαφανιστεί είναι ο //Μηχανάκιας (////Cycle)// και όχι κάποιος άλλος χαρακτήρας από τους υπόλοιπους που συμμετέχουν; 3. Αν θέλετε το σκορ σας να αποθηκεύεται στη μεταβλητή σκορ Κ του MSKodu ποιο προσδιοριστικό θα πρέπει να χρησιμοποιήσετε; 4. Αν θέλετε να τελειώνει ένα από τα παιχνίδια σας όταν ο χρόνος φτάσει τα δύο λεπτά, ποια θα είναι η εντολή που θα πρέπει να συμπεριλάβετε; 5. Στο παράδειγμα Kodu ο κανονιέρης δώστε μια διαφορετική συνθήκη τερματισμού με νίκη για τον παίχτη.

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

2) Kodu ο ορειβάτης! Δημιουργείστε μια πίστα με πρωταγωνιστή τον Kodu, ο οποίος πρέπει να σκαρφαλώσει σε ένα βουνό για να βρει το σπάνιο δέντρο που βρίσκεται στην κορυφή του. Το βουνό όμως αυτό είναι αρκετά ψηλό και απότομο γεμάτο γκρεμούς και τεράστιους καταρράκτες, γεγονός που έχει αρνητικές επιπτώσεις στην ενέργεια του Kodu. Πιο συγκεκριμένα δηλαδή, κάθε τρία δευτερόλεπτα που περνάνε η ενέργεια του μειώνεται κατά δύο μονάδες, ενώ αν έρθει σε επαφή με κάποιον από τους καταρράκτες τότε θα πρέπει να χάνει μια ζωή. Αν μηδενιστεί η ενέργεια του ή ο αριθμός των ζωών του ή περάσει ένα λεπτό και δεν έχει φτάσει ακόμα στο δέντρο, τότε το παιχνίδι θα πρέπει να τερματίζει με ήττα για τον παίχτη. Αν καταφέρει να φτάσει στο στόχο του εντός του χρόνου και χωρίς μηδενική ενέργεια ή μηδενικό αριθμό ζωών τότε το παιχνίδι πρέπει να τερματίζει με νίκη για τον παίχτη. Μπορείτε να τοποθετήσετε ένα δέντρο στην κορυφή του βουνού και να δώσετε στην αρχή του παιχνιδιού τρεις ζωές στον <span style="background-color: transparent; color: #000000; font-family: serif; font-size: 16px; text-align: start; text-decoration: none; vertical-align: baseline;">Kodu. Προσέξτε επιπλέον η πίστα σας να είναι απότομη με πολλά σκαμπανεβάσματα και αρκετές περιοχές γεμισμένες με νερό.

<span style="font-family: Arial,Helvetica,sans-serif;">ΚΕΦΑΛΑΙΟ 8: Πρόγραμμα χωρίς μεταβλητή προκοπή δεν κάνει!!! <span style="font-family: Arial,Helvetica,sans-serif;">8.1 Η μεταβλητή και η σημασία της στα προγράμματα <span style="font-family: Arial,Helvetica,sans-serif;"> 8.2 Μεταβλητή vs Αντικείμενα και χαρακτήρες <span style="font-family: Arial,Helvetica,sans-serif;"> 8.3 Ζωές,Σκορ,Χρόνος,Ενέργεια <span style="font-family: Arial,Helvetica,sans-serif;"> 8.4 Παραδείγματα

<span style="font-family: Arial,Helvetica,sans-serif;"> Μαθησιακοί στόχοι
 * 1) <span style="font-family: Arial,Helvetica,sans-serif;">Να κατανοήσουν την έννοια της μεταβλητής.
 * 2) <span style="font-family: Arial,Helvetica,sans-serif;">Να διαχωρίσουν την έννοια της μεταβλητής από τα υπόλοιπα στοιχεία του παιχνιδιού.
 * 3) <span style="font-family: Arial,Helvetica,sans-serif;">Να χρησιμοποιούν διάφορες μεταβλητές για την έκφραση επιπλέον στοιχείων του παιχνιδιού.

<span style="font-family: Arial,Helvetica,sans-serif;">Το προγραμματιστικό περιβάλλον του Kodu δεν προσφέρει τον ορισμό μεταβλητών όπως τον γνωρίζετε από τον προγραμματισμό και σε συνδυασμό με το γεγονός ότι απευθύνεστε σε παιδιά μικρής ηλικίας καλό είναι να μην αναλύσετε σε βάθος την έννοια της μεταβλητής. Ωστόσο μπορείτε να χρησιμοποιήσετε τον όρο μεταβλητή για να περιγράψετε ποσότητες όπως ζωές,χρόνος,ενέργεια,πλήθος,σκορ,μετρητής οι οποίες μεταβάλλονται κατά την διάρκεια του παιχνιδιού και συνεπώς χρειάζονται κάποιου είδους μνήμης για την αποθήκευση της τρέχουσας τιμής τους.