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


Ομάδα 8
Σπανού Μαρία
Χαλκιάς Κωνσταντίνος







Actions in general
παρουσίαση από μάθημα περιέχει πληροφορίες για τα αντικείμενα (20/3)

ΚΕΦΑΛΑΙΟ 6: Αλληλεπιδρώ με τα αντικείμενα!
  • 6.1 Αντικείμενα (obects)
  • 6.2 Ιδιότητες αντικειμένου
    • 6.2.1 Ιδιότητες Κίνησης
    • 6.2.2 Ιδιότητες Μάχης
    • 6.2.3 Ιδιότητες Αλληλεπίδρασης Με το Περιβάλλον
    • 6.2.4 Καλαισθητικές Ιδιότητες
  • 6.3 Οι αισθητήρες του Kodu: κατανοώ τον κόσμο μου
    • 6.3.1 Ο αισθητήρας Βλέπω (see)
    • 6.3.2 Ο αισθητήρας Ακούω (hear)
    • 6.3.3 Ο αισθητήρας Πέφτω πάνω (bump)
    • 6.3.4 Ο αισθητήρας Πετυχαίνω (shot hit)
    • 6.3.5 Ο αισθητήρας Έχω (got)
    • 6.3.6 Ο αισθητήρας Κουβαλιέμαι (held by)
  • 6.4 H συμπεριφορά του Kodu: ενέργειες
    • 6.4.1 Ενέργεια Τρώω (eat)
    • 6.4.2 Ενέργεια Εξαφανίζω (vanish)
    • 6.4.3 Ενέργεια Εκτινάζω (launch)
    • 6.4.4 Ενέργεια Αρπάζω (grab)
  • 6.5 Ο Επεξεργαστής Εντολών (editor)



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

Σ’ αυτό το κεφάλαιο εμβαθύνετε στην έννοια του αντικειμένου και στις αλλαγές που μπορείτε να επιφέρετε σε αυτά χρησιμοποιώντας το μενού change settings(π.χ. αλλαγή ταχύτητας). Επιπλέον, πρέπει να δείξετε τα ερεθίσματα αλληλεπίδρασης των αντικειμένων με τα άλλα αντικείμενα, καθώς και με το Kodu. Δεν πρέπει να ξεχνάτε ότι στο περιβάλλον Kodu οι συνθήκες που οδηγούν σε κάποια ενέγεια έχουν περισσότερο τη μορφή αισθητήρων(see, hear, bump) που πυροδοτούν κάποια ενέργεια!Στην ενότητα 6.4 καλείστε να καταδείξετε τις λειτουργίες που παρέχει ο επεξεργαστής εντολών(editor) όπως αντιγραφή,επικόλληση,βοήθεια κ.τ.λ.. Έπειτα με χρήση των παραπάνω δείξτε τα βήματα σύνθεσης μιας ιστορίας - παιχνιδιού.


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


ΚΕΦΑΛΑΙΟ 6: Αλληλεπιδρώ με τα αντικείμενα!
Ενώ προγραμματίσαμε στο προηγούμενο κεφάλαιο το αντικείμενό μας να αντιδρά ανάλογα με τη χρήση των συσκευών εισόδου, στο συγκεκριμένο κεφάλαιο θα μελετήσουμε πως μπορούμε να προγραμματίσουμε το αντικείμενό μας ώστε να αντιδρά όταν αλληλεπιδρά με άλλα αντικείμενα του κόσμου. Θα εξετάσουμε δηλαδή αισθητήρες αντίληψης άλλων αντικειμένων και θα δούμε μια σειρά νέων ενεργειών που μπορούν να κάνουν τα αντικείμενα. Ακόμη θα εμβαθύνουμε περισσότερο στην έννοια του αντικειμένου, μαθαίνοντας πώς μπορούμε να επιφέρουμε αλλαγές σε αυτά χρησιμοποιώντας το μενού change settings, αλλάζοντας κάποια χαρακτηριστικά τους. Τέλος παρουσιάζεται ο επεξεργαστής εντολών(editor) με τον οποίο μπορούμε εύκολα να επεξεργαστούμε εντολές (αντιγραφή,επικόλληση κ.τ.λ).

6.1 Αντικείμενα
Οτιδήποτε εισάγουμε σε ένα κόσμο μέσω του εργαλείου αντικειμένων (object tool) object_tool.png ,μπορούμε και να το προγραμματίσσουμε. Αυτόματα λοιπόν, αποτελεί και αντικείμενο του κόσμου μας. Αυτό μπορούμε να το καταλάβουμε, όπως ήδη έχουμε μάθει, κι αν κάνουμε πάνω σε κάποιο αντικείμενο δεξί κλικ και δούμε την επιλογή προγραμμάτισσε(program). Ήρθε λοιπόν η ώρα να γνωρίσουμε την οικογένεια των αντικειμένων του Kodu!


kodu_copy.png
Kodu : Ο βασικός ήρωας, για αυτό και το περιβάλλον δημιουργίας παιχνιδιών έχει πάρει το όνομά του! Μπορεί να χρησιμοποιηθεί για οποιοδήποτε παιχνίδι και αντιμετωπίζει όλες τις καταστάσεις.
cycle_copy.png
Μηχανάκιας : Είναι πολύ γρήγορος, μπορεί να σκαρφαλώνει εύκολα σε απόκρυμνους λόφους και να κάνει άλματα! Ότι πρέπει δηλαδή για αγώνες δρόμου και παιχνίδια καταδίωξης.
jet_copy.png
Τζετ : Σε φυσιολογικές συνθήκες κινείται κοντά στο έδαφος, όμως μπορεί να προγραμματιστεί να πηγαίνει πάνω και κάτω! Ιδανικός για περιπέτειες στον αέρα αλλά και αερομαχίες!
fly_fish_copy.png
Χελιδονόψαρο : Μπορεί να αιωρείται και να κάνει γρήγορες κινήσεις! Ιδανικό όταν ο χρόνος είναι σημαντικός για το παιχνίδι σας ή όταν θέλετε να αποφύγετε τον εχθρό!
saucer_copy.png
Πιατάκι : Το πιο γρήγορο αντικείμενο! Μπορεί επίσηςνα αλλάξει κατεύθυνση αμέσως! Πολύ καλό λοιπόν για αγώνες ταχύτητας!
ship_copy.png
Πλοίο : Μπορεί μόνο να επιπλέει πάνω στο νερό αλλά όχι να κινείται στη στεριά. Μπορεί να είναι πρωταγωνιστής στην μεγαλύτερη ναυμαχία που έγινε ποτέ!
sub_copy.png
Υποβρύχιο : Όπως και τα υποβρύχια του πραγματικού κόσμου έτσι και αυτά λειτουργούν καλύτερα κάτω από το νερό! Αντάξιος αντίπαλος και ύπουλος εχθρός των πλοίων.
cannon_copy.png
Κανόνι : Είναι μεγάλο και αργό αλλά πολύ δυνατό! Ό,τι πρέπει για παιχνίδια με πόλεμο, για να κατατροπώσετε τον εχθρό με ένα τόσο δυνατό όπλο!
blimp_copy.png
Αερόπλοιο : Πετάει τριγύρω με αργούς ρυθμούς.Σημαντικό για αερομαχίες!
wisp_copy.png
Λάμψη : Κινείται γρήγορα αφήνοντας ίχνη λάμψης στο πέρασμά του! Για εντυπωσιασμό του αντιπάλου!
balloon_copy.png
Μπαλόνι : Το μπαλόνι πετάει αργά στον αέρα και παρατηρεί τα πάντα από ψηλά. Να ο καινούργιος σας διαιτητής!
drum_copy.png
Ντραμ : Όταν κάποιος χαρακτήρας πηδήξει πάνω στο ντραμ εκτοξεύεται στον αέρα! Κάτι σαν τραμπολίνο!
lihgt_copy.png
Φως : Κινείται γρήγορα και μπορεί να φωτίσει τον κόσμο Ιδανικός σύντροφος του ήρωα σε μια σκοτεινή σπηλιά!
fish_copy.png
Ψάρι : Λειτουργεί καλύτερα στο νερό. Στη στεριά απλώς είναι ακινητοποιημένο! Απαραίτητο όπως και το υποβρύχιο σε ένα υποθαλάσσιο κόσμο.
turtle_copy.png
Χελώνα : Μπορεί να πετάει και να μπαινοβγαίνει στο καβούκι της! Σκεφτείτε όμως ότι όταν μπαίνει στο καβούκι της γίνεται αόρατη από τους άλλους!
cloud_copy.png
Σύννεφο : Χαρακτηριστικό του περιβάλλοντος όταν ο καιρός δεν είναι καλός!
castle_copy.png
Κάστρο : Ένα επιβλητικό κάστρο που δεν κινείται όμως! Μπορεί να συνδιαστεί με ένα κανόνι για την προστασία του από τους εχθρούς.
ammo_copy.png
Πυρομαχικό : Ιδανικό για παιχνίδια με μάχες! Πολύ ισχυρό για την κατατρόπωση του εχθρού!
apple_copy.png
Μήλο : Το γνωστό φρούτο,νόστιμο αλλά και καλό στο να εκτοξεύεται!
mine_copy.png
Νάρκη : Περιέχει καρφιά που μπορούν να είναι ενεργοποιημένα ή απενεργοποιημένα. Μπορεί να προκαλέσει έκρηξη!
cursor_copy.png
Δίσκος Χόκεϋ : Είναι ιδανικό για τα γρήγορα παιχνίδια! Πετάει χωρίς τριβή και αναπηδά χωρίς να χάνει ταχύτητα!
pushpad_copy.png
Κουμπί Πίεσης : Ένα μεγάλο και δυνατό κουμπί!
sputnik_copy.png
Δορυφόρος : Κάνει πολύ καλή παρέα με το πιατάκι!
stick_copy.png
Περισκόπιο : Όταν είναι ενεργοποιημένο μπορεί να κρύβεται κάτω από το έδαφος!Όταν είναι απενεργοποιημένο είναι αόρατο! Ότι πρέπει για παιχνίδια κατασκοπίας
factory_copy.png
Εργοστάσιο : Μπορεί να αποτελέσει ορόσημο στον κόσμο που θα δημιουργήσετε, μιας και είναι επιβλητικό οικοδόμημα!
coin_copy.png
Κέρμα : Σημαντικό στον κόσμο του Kodu όπως και στον πραγματικό κόσμο! Ειδικά για arcade παιχνίδια!
hut_copy.png
Καλύβα : Για τη διακόσμηση του κόσμου σας!
heart_copy.png
Καρδιά : Σημαντικές για να αυξήσετε ίσως την ενέργειά σας. Μπορείτε όμως και να την δώσετε σε κάποιο άλλο αντικείμενο ως ένδειξη αγάπης!
tree_copy.png
Δέντρο : Μπορεί να χρησιμοποιηθεί για τη διακόσμηση του κόσμου σας αλλά σε ορισμένες περιπτώσεις μπορεί να εκτελεί και ενέργειες. Προσοχή όμως γιατί δεν έχει ικανότητα κίνησης!
rock_copy.png
Βράχος : Και ναι, στο Kodu ακόμα και οι βράχοι μπορούν να προγραμματιστούν!
star_copy.png
Αστέρι : Ακόμα και αυτό προγραμματίζετε! Σκεφτείτε μια νύχτα πεφταστεριών!
ball.png
Μπάλα : Μπορείτε να την πετάξετε απλά ή και να την προγραμματίσετε. Είναι μια μπάλα όπως όλες οι άλλες!

Τα παραπάνω αντικείμενα μπορούμε να τα συνδυάσουμε με οποιονδήποτε τρόπο! Το μόνο που μπορεί να μας περιορίσει είναι η φαντασία μας! Ας ρίξουμε λοιπόν μία πιο προσεκτική ματιά στην έννοια των αντικειμένων.



6.2 Ιδιότητες αντικειμένων
Όπως και τα αντικείμενα του πραγματικού κόσμου έτσι και τα αντικείμενα στον κόσμο του Kodu έχουν ένα σύνολο από ιδιότητες, χαρακτηριστικά γνωρίσματα δηλαδή που τα καθιστούν μοναδικά μεταξύ τους και καθορίζουν ως ένα βαθμό την συμπεριφορά τους. Ένα αυτοκίνητο έχει ως ιδιότητα την ταχύτητά του, ενώ ένας ήρωας που πυροβολεί έχει ως ιδιότητα το μέγιστο αριθμό πυροβολισμών που μπορεί να ρίξει στη μονάδα του χρόνου
Το Kodu παρέχει ένα μεγάλο πλήθος ιδιοτήτων για τα αντικείμενα που μπορείτε να ρυθμίσετε εύκολα πατώντας το δεξί κουμπί του ποντικιού πάνω σε κάποιο αντικείμενο και επιλέγοντας αλλαγή ρυθμίσεων (change settings).

external image YY3J25Bu33UsbxbIbmAxQk0ALRqguBpFk3X5FyZGuQjyod7wrnMqunVi4BQ3uIjrz7JY6w8K3fpzFtb02ZQr0e5FZyt13pDtmuxXZtZMwpTxPbQ59xE


Ξαφνικά εμφανίζεται μπροστά σας μία “σκάλα” με όλες τις διαθέσιμες ιδιότητες του αντικειμένου!

K06_changeSettings.PNG


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

k06_ais8itiresEnergeiesSxima.png


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




6.2.1 Ιδιότητες Κίνησης Αντικειμένων
Ο Κodu, όπως και κάθε άλλο αντικείμενο που μπορεί να κινηθεί έχει μία σειρά από ιδιότητες που αφορούν την κίνησή του, όπως η ταχύτητα που αναπτύσσει, η επιτάχυνση και άλλα.

Φορτώστε το παιχνίδι <<Road Kill v3>>. Έχει παρουσιαστεί στο δεύτερο κεφάλαιο και μπορεί να χαρακτηριστεί ως παιχνίδι επιβίωσης.
Υπενθυμίζουμε ότι ο Kodu θα πρέπει να διασχίσει τέσσερις δρόμους για να περάσει στην απέναντι πλευρά και να ακουμπήσει ένα Αστέρι προκειμένου ο παίκτης να κερδίσει. Οι δρόμοι όμως έχουν κυκλοφοριακή συμφόρηση από Μηχανάκηδες οι οποίοι αν ακουμπήσουν τον Kodu τον σκοτώνουν. Εννοείται λοιπόν πως δε θέλουμε να γίνει κάτι τέτοιο!

K06_roadKill.PNG


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

K06_forwardSpeedMultiplier.PNG
Ταχύτητα Κίνησης
Η ιδιότητα αυτή ρυθμίζει την ταχύτητα με την οποία κινείται ένα αντικείμενο. Παίρνει τιμές από 0.1 έως 5.0 . Αν αυξήσουμε την ταχύτητα του Kodu τότε φυσικά θα κινείται πιο γρήγορα. Αυτό με μία πρώτη ματιά μπορεί να φαίνεται ότι διευκολύνει τον παίκτη καθώς θα μπορεί να περάσει πιο γρήγορα από τον ένα δρόμο στον άλλο. Όμως όπως συμβαίνει και στην πραγματικότητα όταν ένα αντικείμενο αναπτύσσει μεγάλη ταχύτητα τότε σταματάει και πιο δύσκολα. Έτσι λοιπόν μπορεί ο παίκτης να προλάβει να περάσει από τον ένα δρόμο στον άλλο, όμως υπάρχει περίπτωση να μην προλάβει να σταματήσει έγκαιρα και να μπει στον επόμενο δρόμο και έτσι να αυξηθεί η πιθανότητα να χτυπήσει με κάποιον Μηχανάκια. Καλό θα ήταν άρα να δώσετε στην ιδιότητα αυτή την τιμή 3.

[Προγραμματιστικό Tip!Σε ένα παιχνίδι ράλυ αυτή η τιμή είναι προτιμότερο να έχει την μέγιστη δυνατή τιμή.]


K06_forwardAccelarationMultiplier.PNG
Επιτάγχυνση Κίνησης
Όπως γνωρίζετε ένα αυτοκίνητο όταν είναι σταματημένο(αρχική κατάσταση) και ξεκινάει να κινείται χρειάζεται κάποια ώρα για να φτάσει στην τελική του ταχύτητα. Έτσι λοιπόν η ιδιότητα αυτή ρυθμίζει το πόσο γρήγορα αυξάνει η ταχύτητα κίνησης του Kodu. Οι τιμές που μπορεί να πάρει κυμαίνονται από το 0,1 έως το 5.0 και είναι εμφανές ότι ποτελεί σημαντικό συμπλήρωμα τις προηγούμενης ιδιότητας. Όσο πιο γρήγορα αυξάνεται η ταχύτητα του Kodu τόσο πιο σύντομα θα φτάσει στην τελική της τιμή που έχει καθοριστεί από την προηγούμενη ιδιότητα. Καλό θα ήταν να ρυθμίσετε την ιδιότητα αυτή στην τιμή 5.


K06_turningSpeedMultiplier.PNG
Ταχύτητα Περιστροφής
Οποιαδήποτε αλλαγή στην ιδιότητα αυτή θα αλλάξει και την ταχύτητα με την οποία ο Kodu στρίβει για να αλλάξει κατεύθυνση. Και αυτή η ιδιότητα παίρνει τιμές από το 0,1 έως ρο 5,0. Επειδή στο παιχνίδι βολεύει περισσότερο ο παίκτης να κινείται ευθύγραμμα για να εξοικονομεί χρόνο η ιδιότητα αυτή δεν έχει μεγάλη σημασία. Μπορούμε να την αφήσουμε ως έχει. Αν όμως ρυθμίζαμε την ιδιότητα αυτή σε ένα παιχνίδι ράλυ ή κυνηγητού θα χρειαζόταν να της δώσουμε μεγάλη τιμή.


K06_turningAccelarationMultiplier.PNG
Επιτάχυνση Περιστροφής
Είναι αντίστοιχη ιδιότητα με αυτή της επιτάχυνσης κίνησης και εξίσου σημαντική για την περιστροφή του Kodu. Προσδιορίζει πόσο γρήγορα θα φτάσει ο Κodu τη μέγιστη τιμή της ταχύτητας περιστροφής του. Παίρνει τιμές από το 0,1 έως το 5,0. Όπως και παραπάνω μπορούμε να την αφήσουμε όπως είναι.


Σώστε το παιχνίδι και πηγαίνετε στο κύριο μενού.




6.2.2 Ιδιότητες Μάχης
Οι ιδιότητες αυτές αφορούν κυρίως παιχνίδια δράσης και μάχης.




Αρχικά φορτώστε το παιχνίδι "Shoot The Turtles!!". .
k06_shootThe_Turtle.PNG
Ο κόσμος του παιχνιδιού αποτελείται από 10 Χελώνες, Νομίσματα, Ψάρια και φυσικά τον ήρωα του παίκτη τον Kodu. Σκοπός του παιχνιδιού είναι ο Kodu να καταστρέψει όλες τις Χελώνες εκτοξεύοντας πυραύλους και στην συνέχεια να φάει τα Ψάρια που υπάρχουν ανενόχλητος. Μόνο όταν δεν υπάρχει καμία Χελώνα και κανένα Ψάρι ο Kodu είναι νικητής. Τα πράγματα όμως δεν είναι τόσο εύκολα όσο νομίζετε! Οι Χελώνες, τρεις εκ των οποίων είναι τεράστιες εκτοξεύουν συνεχώς πυραύλους! Ο παίκτης μπορεί να κινεί τον ήρωά του με τα βέλη του πληκτρολογίου και να εκτοξεύει πυραύλους πατώντας το πλήκτρο space. Οι συμπεριφορές των αντικειμένων είναι ήδη προγραμματισμένες από κάποιον άλλον προγραμματιστή. Ωστόσο ως προγραμματιστές καλό θα ήταν να σκεφτούμε ποιες ιδιότητες των συγκεκριμένων αντικειμένων πρέπει να “πειράξουμε” έτσι ώστε να ολοκληρώσουμε το παιχνίδι δράσης. Στο μεγαλύτερο κομμάτι του παιχνιδιού αυτού ο παίχτης ανταλλάσσει πυροβολισμούς με τις Χελώνες. Συνεπώς θα πρέπει να ρυθμίσουμε τις ιδιότητες που αφορούν την εκτόξευση πυραύλων τόσο του Kodu όσο και των Χελωνών.
Πατήστε το κουμπί escape στο πληκτρολόγιό σας και στην συνέχεια επιλέξτε την αλλαγή ιδιοτήτων για τον Kodu. Μην ξεχνάτε ότι οι ιδιότητες που επιθυμείτε να αλλάξετε αφορούν τους πυραύλους. Χρησιμοποιώντας τη ροδέλα του ποντικιού σας μπορείτε να διακρίνετε τις εξής ιδιότητες που αφορούν την εκτόξευση πυραύλων :

external image HOeNZSD9LDT66moa0djiAJ2akyGKcuAKcPLfIKTZneaSSxFAWQz0cpMbHNYnD6L8qXmKvjzwU4pjti4T2qYZqaQrL79jZaYkQz1jyCG8_ElptAZisJo
Χρονικό διάστημα μεταξύ εκτοξεύσεων πυραύλων
Με το Missile Reload Time έχετε τη δυνατότητα να ρυθμίσετε μετά από πόση ώρα μπορεί ο Kodu να ξαναρίξει έναν πύραυλο. Ο χρόνος μετριέται σε δευτερόλεπτα και μπορεί να πάρει τιμές από 0,5 έως 5 δευτερόλεπτα. Αν ο Kodu εκτοξεύει πολύ αργά πυραύλους (έχουμε δώσει μεγάλη τιμή στην ιδιότητα) τότε δεν θα προλάβει να καταστρέψει όλες τις Χελώνες χωρίς να τον χτυπήσουν΄. Από την άλλη αν δώσουμε πολύ χαμηλή τιμή στην ιδιότητα αυτή ο Kodu θα εκτοξεύει πολύ γρήγορα πυραύλους και το παιχνίδι θα είναι πολύ εύκολο. Ρυθμίστε το λοιπόν στα 1.5 δευτερόλεπτα.

external image l8MKnNZ89yHRa0iC5VeB4J-yEWoJz8rUsZy8v0MPW6PtHpYZndTa5XQm2Qr9K2hLp-zSGzy-HeSsHdmLxysPdzNY7dY405LvAzINTXHXLGKVj2n0_XY
Ταχύτητα Πυραύλου
Με το Missile Speed μπορείτε να ρυθμίσετε την ταχύτητα που θέλετε να έχει ο πύραυλος που εκτοξεύεται. Η ιδιότητα αυτή παίρνει τιμές από 1 έως 20. Όσο γρηγορότερα ταξιδεύει ένας πύραυλος τόσο συντομότερα χτυπάει μία Χελώνα εάν η βολή του παίκτη βρει τον στόχο της. Στο παιχνίδι αυτό επειδή οι Χελώνες είναι πάρα πολλές και εκτοξεύουν συνεχώς πυραύλους εναντίον του Kodu θα πρέπει να δώσετε στην ιδιότητα αυτή μία μεγάλη τιμή. Με το ίδιο σκεπτικό θα πρέπει να ρυθμίσουμε την ιδιότητα αυτή και για τις Χελώνες. Όμως προκειμένου να δημιουργήσουμε ένα δίκαιο παιχνίδι δεν θα πρέπει να δώσουμε πολύ μεγάλη ταχύτητα στους πυραύλους των Χελωνών.

[Προγραμματιστικό Tip: Σκεφτείτε ότι η ιδιότητα αυτή είναι πολύ σημαντική σε περίπτωση που ο αντίπαλός του παίκτη κινείται. Για να έχει μεγαλύτερες πιθανότητες ο παίκτης να πετύχει τον αντίπαλό του θα πρέπει να δώσουμε στην ιδιότητα αυτή όσο το δυνατόν μεγαλύτερη τιμή.]


external image 4n8GpFiXDE0nFXK94TlYJaOfvWfIIHgtE460oNhBmYaVrB1Dvgy-Au4LH7dR7N3Y39FCV4hEOhcq5qJmgXsplj8tLJb-Hz2d7byrf_xiGlXpp4b5G0g
Ζημιά που προκαλεί ένας πύραυλος
Το Missile Damage καθορίζει πόση απώλεια ενέργειας προκαλεί ένας πύραυλος όταν χτυπήσει ένα αντικείμενο. Παίρνει τιμές από το -500 έως το 500.
Αποτελεί σημαντικό παράγοντα για την εξέλιξη του παιχνιδιού. Ανάλογα με το πόσο επιθυμούμε να δυσκολέψουμε τους παίκτες ρυθμίζουμε την τιμή της ιδιότητας αυτής.
Όσο χαμηλότερη είναι η τιμή της τόσο πιο δύσκολα καταστρέφεται ένας εχθρός!

K06_missileRange.PNG
Εύρος Κίνησης πυραύλου
Καθορίζει την απόσταση που μπορεί να διανύσει ένας πύραυλος πρωτού εξαφανιστεί αν δεν χτυπήσει κάποιο αντικείμενο. Οι τιμές που παίρνει είναι μεταξύ του 10 και του 100. Στο παιχνίδι αυτό ο παίκτης θα πρέπει να κινεί τον ήρωά του συνέχεια για να αποφύγει τους πυραύλους. Υπάρχει επομένως μεγάλη πιθανότητα να απομακρυνθεί ο Kodu πολύ από τις χελώνες. Εάν δώσουμε μικρή τιμή στην ιδιότητα αυτή ο Kodu δεν θα μπορεί να καταστρέφει αντικείμενα από μακρυά. Έτσι λοιπόν εμείς ως προγραμματιστές θα πρέπει να δώσουμε μία μεγάλη τιμή.

K06_missilesAtOnce.PNG
Αριθμός Εκτοξευμένων Πυραύλων
Όπως γνωρίζουμε ο πύραυλος που εκτοξεύει ο Kodu ταξιδεύει στον αέρα όσο δεν έχει χτυπήσει κάποιο αντικείμενο και δεν έχει ξεπεράσει το εύρος κίνησής του. Με την ιδιότητα αυτή μπορούμε να ρυθμίσουμε πόσοι πύραυλοι μπορούνε να ταξιδεύουν ταυτόχρονα στον αέρα, μέχρι ο Kodu να μπορεί να ξαναπυροβολήσει. Η ιδιότητα παίρνει τιμές από το 1 έως και το 10. Αν η τιμή είναι 5, ο Kodu μπορεί να εκτοξεύσει μέχρι και 5 πυραύλους. Αν καταστραφεί ή εξαφανιστεί έστω και ένας από αυτούς τότε και μόνο τότε ο Kodu θα μπορέσει να εκτοξεύσει πάλι πυραύλους μέχρι να φτάσει σαν σύνολο τους 5. Η ιδιότητα αυτή εξαρτάται από την ταχύτητα ενός πυραύλου, το χρονικό διάστημα μεταξύ των εκτοξεύσεων καθώς και το εύρος κίνησης πυραύλου. Αν ο ήρωας του παίκτη εκτοξεύει πολύ συχνά πυραύλους που κινούνται πολύ γρήγορα και οι εχθροί βρίσκονται πολύ μακριά τότε καλό θα ήταν να δώσετε στην ιδιότητα αυτή μία μεγάλη τιμή.



[Υπάρχουν αντίστοιχες ιδιότητες για την περίπτωση στην οποία ο Kodu εκτοξεύει Σφαιρίδιο και ρυθμίζονται όπως και οι παραπάνω.]


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

Αποθηκεύστε λοιπόν το παιχνίδι και βγείτε από αυτό.


6.2.3 Ιδιότητες αλληλεπίδρασης με το περιβάλλον
Ένα από τα βασικά στοιχεία σε όλα τα παιχνίδια που θα προγραμματίσουμε στα πλαίσια αυτού του βιβλίου, είναι η αλληλεπίδραση του Kodu τόσο με την πίστα του παιχνιδιού όσο και με τα υπόλοιπα αντικείμενα. Υπάρχουν αρκετές ιδιότητες αυτού του είδους που δεν θα τις εξηγήσουμε όλες σε αυτή την υποενότητα. Ωστόσο μπορείτε να τις βρείτε όλες συγκεντρωμένες στο τέλος αυτού του κεφαλαίου με τις απαραίτητες επεξηγήσεις.

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

external image DDpSP8i3ah2JJu10DUV3rhM42wiH8XOkFsF4_3G-bP769j0RtsOFPyuOjcBcRVIeOnGSxA6cKcPfe6rJ3s3m8QO2HOfK0fPIviayqDnmw8HjVygVVA
Τριβή
Ας κάνουμε ένα γρήγορα μάθημα φυσικής!
Όπως μπορεί να γνωρίζετε ήδη όταν ένα αντικείμενο κινείται πάνω σε οποιαδήποτε επιφάνεια αναπτύσσεται τριβή μεταξύ τους. Η τριβή εμποδίζει την κίνηση του αντικειμένου με αποτέλεσμα να αναπτύσσει πιο αργά ταχύτητα. Ταυτόχρονα όμως το βοηθάει να σταματάει και πιο γρήγορα. Η ιδιότητα αυτή παίρνει τιμές από 0.00 έως 1.0. Όπου το μηδέν σημαίνει ότι δεν υπάρχει καθόλου τριβή και 1 είναι η μέγιστη τιμή που μπορεί να πάρει. μπορούμε να ρυθμίσουμε την τιμή της στο 0.35.


external image MLCb0ybT97mWr1lskGUrGSYQileBYxnwqEHQYpb-7--pACZh1e93xWpJTfsR4YeaZnzT98TuUiTxZEFUrdyBafPipNBWsHzLHmEXZGTTKdlMP6mbBA
Αναπήδηση
Στο παιχνίδι που εξετάζουμε υπάρχει περίπτωση ο μπλε Μηχανάκιας του παίκτη να συγκρουστεί με κάποιον άλλο Μηχανάκια. Η ιδιότητα αυτή καθορίζει κατά πόσο ένα αντικείμενο αναπηδά όταν συγκρουστεί με κάποιο άλλο αντικείμενο, με ένα τοίχο ή μετά την προσγείωση από ένα άλμα.
Θυμηθείτε πραγματικούς αγώνες ράλυ που μπορεί να έχετε παρακολουθήσει. Δεν είναι πολύ τρομακτικό αυτό που συμβαίνει όταν συγκρουστούν κάποια αμάξια μεταξύ τους;
Όπως και η τριβή παίρνει τιμές από το 0.00 έως το 1.00. Αν ρυθμίσουμε την ταχύτητα των Μηχανάκηδων να έχει την μεγαλύτερη τιμή τότε η φυσική, επιβάλλει να ρυθμίσουμε την αναπήδηση στη μέγιστη τιμή της.


6.2.4 Καλαισθητικές ιδιότητες

K06_sizeScale.PNG
Μέγεθος αντικειμένου
Δεν χρειάζονται και πολλές συστάσεις για αυτή την ιδιότητα. Αφορά το μέγεθος του αντικειμένου. Φανταστείτε ότι έχετε εισάγει ένα αντικείμενο, για παράδειγμα έναν μαύρο Kodu ο οποίος θα είναι ο τελικός αρχηγός μίας πίστας. Προκειμένου να τον κάνετε να φαίνεται πιο απειλητικός θα μπορούσατε να αυξήσετε το μέγεθός του. Η ιδιότητα αυτή παίρνει τιμές από 0.2 έως 4.0.


Περιστροφή αντικειμένου (rotate)
Ρυθμίζοντας αυτή την ιδιότητα καθορίζεται ποιος θα είναι ο προσανατολισμός ενός αντικειμένου. Η ιδιότητα αυτή παίρνει τιμές από το 0 έως και το 360. Για να περιστρέψουμε ένα αντικείμενο ακολουθύμε την εξής διαδικασία.

1. Επιλέγουμε το αντικείμενο που θέλουμε να περιστρέψουμε και πατάμε το δεξί κουμπί του ποντικιού.

2. Πατάμε πάνω στην επιλογή περιστρέφω (rotate).

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

[Για τον ήρωα του παίκτη η ιδιότητα αυτή έχει σημασία μόνο κατά την εκκίνηση του παιχνιδιού, διότι έτσι κι αλλιώς στην συνέχεια ο παίκτης θα τον κινήσει και ο αρχικός προσανατολισμός θα χαθεί. Έτσι για παράδειγμα μπορούμε να ρυθμίσουμε τον ήρωα του παίκτη να κοιτάει αρχικά προς το μέρος του για να αυξήσουμε τον ενθουσιασμό του. Η ιδιότητα αυτή όμως έχει πολύ μεγάλη σημασία για τα αντικείμενα που δεν κινούνται. Φανταστείτε να εισάγετε σε ένα κόσμο ένα Εργοστάσιο που παράγει σατανικά Kodu με τέτοιο τρόπο ώστε ο παίκτης να μην μπορεί να δει πότε βγαίνουν από την πόρτα του οι εχθροί! Όσο θα δυσκόλευε την ζωή του παίκτη τόσο θα ήταν και αντιαισθητικό για την πίστα.]

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

Για να μεταβάλλουμε το χρώμα ενός αντικειμένου εκτελούμε την εξής διαδικασία:
1. Επιέγουμε πρώτα το εργαλείο αντικειμένων (object tool).

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

3.Πατάμε τα βέλη του πληκτρολογίου αριστερά ή δεξιά για να επιλέξουμε το επιθυμητό χρώμα.

K06_MissileSmoke.PNG
Εφέ Καπνού
Η ιδιότητα αυτή σχετίζεται με την αληθοφάνεια του παιχνιδιού. Αφορά το αν οι πύραυλοι αφήνουν ίχνος καπνού στο πέρασμά τους. Επιπλέον όσοι από εσάς δεν έχουν καλή κάρτα γραφικών θα μπορούσατε να την απενεργοποιήσετε για να μην επιβαρύνετε επιπλέον το σύστημα σας. Παρατηρήστε ότι η εικόνα της ιδιότητας έχει το γνωστό σήμα του on/off. Όταν έχει έντονο πράσινο χρώμα τότε η ιδιότητα είναι ενεργοποιημένη.
K06_onOff.PNG
Υπάρχουν αρκετές ακόμα που δεν θα καλυφθούν στην παράγραφο αυτή. Στο τέλος του κεφαλαίου θα βρείτε συγκεντρωτικό πίνακα με όλες τις ιδιότητες που σας παρέχει το περιβάλλον ανάλογα με την κατηγορία στην οποία ανήκουν . Σε κάθε περίπτωση, δίπλα από κάθε ιδιότητα υπάρχει η επιλογή βοήθειας K06_help.PNGη οποία σας παρέχει μία περιγραφή της.






6.3 Οι αισθητήρες του Kodu: κατανοώ τον κόσμο μου
Στην παράγραφο αυτή θα μελετήσουμε τους αισθητήρες του Kodu που αντιλαμβάνονται γεγονότα που προκαλούν άλλα αντικείμενα και τον οδηγούν σε συμπεριφορές αλληλεπίδρασης με αυτά. Αν το καλοσκεφτούμε οι αισθητήρες του Kodu είναι κάτι αντίστοιχο με τις αισθήσεις που έχουν οι άνθρωποι. Οι άνθρωποι λοιπόν χρησιμοποιούν κάποιες βασικές αισθήσεις, όπως η ακοή, η όραση κτλ ώστε να αντιλαμβάνονται τα ερεθίσματα του περιβάλλοντός τους και να ενεργούν αναλόγως. Έτσι και τα αντικείμενα του Kodu! Χρησιμοποιούν αισθητήρες όπως το Ακούω (Hear) , το Βλέπω (See) , το Πέφτω Πάνω (Bump) ώστε να κατανοούν καλύτερα τον κόσμο τους και να συμμετέχουν σε αυτόν!

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



6.3.1 Ο αισθήτηρας: Βλέπω (See) see.png
Ο αισθητήρας Βλέπω (See), επιτρέπει στα αντικείμενα να αντιδρούν στην παρουσία άλλων αντικειμένων στο κόσμο των παιχνιδιών μας. Με απλά λόγια αποτελεί τα μάτια των πρωταγωνιστών μας που πλέον μπορούν να αναλάβουν δράση αν «δουν» ένα φίλο τους, ένα Nόμισμα ή κάποιον εχθρό. Θα μπορούσαμε λοιπόν να προγραμματίσουμε ένα Υποβρύχιο έτσι ώστε όταν βλέπει τον Kodu να εκτοξεύει πυραύλους εναντίον του, ή να προγραμματίσουμε έναν Μηχανάκια-εχθρό ώστε όταν δει τον Kodu να προσπαθεί να τον πλησιάσει για να τον εξολοθρεύσει. Ο αισθητήρας Βλέπω (See) πάντα συνοδεύεται με προσδιοριστικό το στοιχείο που θέλουμε να αναγνωρίσει ο χαρακτήρας μας. Ένα παράδειγμα εντολής με χρήση του αισθητήρα:


K06_seeProtasi.png
Τι είχε ο προγραμματιστής στο μυαλό του:

Όταν [Βλέπω (See) ] [τον Kodu] τότε [Κινούμαι (Move) ] [προς αυτόν]

[Tip: παρατηρήστε ότι το προσδιοριστικό ενέργειας προς (towards) εξαρτάται από το αντικείμενο που θα χρησιμοποιήσουμε στον αισθητήρα της συγκεκριμένης συμπεριφοράς]

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

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

K06_seeWorldImage.png




Ανοίξτε το παιχνίδι Air Fight και ας ξεκινήσουμε βήμα βήμα τον προγραμματισμό των αντικειμένων προκειμένου να δημιουργήσουμε το παιχνίδι Air fight

Ας ξεκινήσουμε με τον προγραμματισμό του πράσινουΤτζετ, δηλαδή του αντικειμένου που θα χειρίζεται ο παίκτης. Το πράσινο Τζετ θα πρέπει να αξιοποιήσει κάποιον αισθητήρα για να καταλαβαίνει το πότε ο χρήστης έχει πατήσει τα βελάκια ή το space στο πληκτρολόγιο. Ποιον αισθητήρα όμως; Προφανώς, τον αισθητήρα Πληκτρολόγιο (Keyboard) με προσδιοριστικό τα βέλη (Arrows) για να μετακινούμε το Τζετ και μια ακόμη φορά με προσδιοριστικό το πλήκτρο Κενό (space) για να εκτοξεύει πυραύλους. Συνεπώς το πράσινο Τζετ εμφανίζει δύο συμπεριφορές.
ΌΤΑΝ[στο πληκρολόγιο][πατηθεί κάποιο από τα βέλη] ΤΟΤΕ[Κινήσου (Move) προς αντίστοιχη κατεύθυνση] [γρήγορα]
ΌΤΑΝ [στο πληκτρολόγιο][πατηθεί το πλήκρο space] ΤΟΤΕ [Εκτόξευσε (Shoot) πυραύλους]

K06_seeGreenJet.png



Ας προγραμματίσουμε τώρα τα μαύρα Τζετ.
Κάθε φορά που ένα μαύρο Τζετ αναγνωρίζει ένα πράσινο Τζετ, τότε θα πρέπει να αρχίσει να το ακολουθεί και να εκτοξεύει πυραύλους εναντίον του.
Πως μπορούν να αντιληφθούν τα μαύρα Τζετ το πράσινο Τζετ; Αφού θα το δουν, θα χρησιμοποιήσουμε τον αισθητήρα Βλέπω (See). Ο αισθητήρας αυτός θα πρέπει να έχει ως προσδιοριστικό το αντικείμενο Τζετ. Συνεπώς, για την συμπεριφορά των μαύρων Τζετ, δημιουργούμε τις εξής εντολές:
ΌΤΑΝ[Δω (See) ][ένα Τζετ]ΤΟΤΕ [Κινούμαι (Move) ][προς αυτό].
ΌΤΑΝ[Δω (See) ][ένα Τζετ]ΤΟΤΕ [Εκτοξεύω (Shoot)][πυραύλους].

Είναι το παράδειγμά μας ολοκληρωμένο όμως; Αν προγραμματίσουμε τον αισθητήρα Βλέπω (See) με προσδιοριστικό το αντικείμενο Τζετ, τότε κάθε μαύρο Τζετ θα επιδεικνύει την ίδια συμπεριφορά όταν δει και όλα τα υπόλοιπα Τζετ είτε μαύρα είτε πράσινα είτε κόκκινα! θα αρχίσει να τα ακολουθεί ανεξαρτήτως χρώματος και θα πυροβολεί οποιοδήποτε είναι κοντά του! Μήπως θα έπρεπε να προσθέσουμε ένα επιπλέον προσδιοριστικό στον αισθητήρα Βλέπω (See), για παράδειγμα το χρώμα; Δεν επιθυμούμε τα μαύρα Τζετ να αντιδρούν μόνο όταν βλέπουν το πράσινο Τζετ; Βελτιώστε τις εντολές σας όπως φαίνεται στο παρακάτω σχήμα:
ΌΤΑΝ[Δω (See) ][ πράσινο] [Τζετ ]ΤΟΤΕ [Κινούμαι (Move) ][προς αυτό].
ΌΤΑΝ[Δω (See) ][ πράσινο] [Τζετ ]ΤΟΤΕ [Εκτοξεύω (Shoot) ][πυραύλους].


K06_seeBlackJet.png

Αποθηκεύστε τις αλλαγές και τρέξτε το πρόγραμμα.


K06_seeFinalWorld.png



[Πονηρή ερώτηση: Πως εξασφαλίζουμε ότι οι πύραυλοι κατευθύνονται προς το στόχο τους; Έχει σημασία η σειρά των εντολών μας;]

Το Kodu μας προσφέρει μία πληθώρα προσδιοριστικών που μπορούμε να χρησιμοποιήσουμε σε συνδυασμό με τον αισθητήρα Βλέπω (See). Μπορούμε να ορίσουμε ως προσδιοριστικό οποιοδήποτε αντικείμενο του κόσμου μας, οποιοδήποτε χρώμα (δηλαδή όταν βλέπει το αντικείμενό μας κόκκινο μπορεί να κινείται πιο αργά!), οποιαδήποτε έκφραση άλλου αντικειμένου (όταν βλέπει π.χ. ένα θυμωμένο αντικείμενο μπορεί να το εξολοθρεύει!). Στην επιλογή επιλογές (options) της πρώτης πίτας προσδιοριστικών, εμφανίζονται νέα προσδιοριστικά που έχουν να κάνουν με τη θέση του αντικειμένου σε σχέση με τα άλλα αντικείμενα του κόσμου. Έτσι αν επιθυμούμε ο Kodu να ενεργεί όταν βλέπει κάποια αντικείμενα που βρίσκονται σε μακρινή θέση, μπορούμε να χρησιμοποιήσουμε το προσδιοριστικό Mακρυά (Far away).

[tip: το πόσο μακριά «βλέπει» το αντικείμενό σας, μπορείτε να το προσδιορίσετε από την ιδιότητα Mακρυά (Far away range).]




6.3.2 Ο αισθήτηρας: Ακούω (Hear)hear.png

Ο αισθητήρας αυτός είναι στην ουσία τα αυτιά κάθε αντικειμένου. Έτσι όταν προγραμματίζουμε ένα αντικείμενο να διαθέτει τον αισθητήρα αυτόν είναι σαν να αποκτάει την αίσθηση της ακοής. Μπορεί να σας φαίνεται παράξενο που υπάρχει ο αισθητήρας αυτός. Τι μπορεί δηλαδή να ακούσει ένα αντικείμενο στον κόσμο του Kodu; Μα φυσικά τα πάντα! Μπορούμε να προγραμματίσουμε έναν φίλο του Kodu ώστε να τον ακούει προκειμένου να τον ακολουθήσει. Ακόμη μπορούμε να προγραμματίσουμε ένα μπαλόνι να εκτοξεύει Σφαιρίδια όταν ακούσει κοντά του κάποιο Τζετ. Δεν πρέπει να ξεχνάμε ότι από την στιγμή που θα εισάγουμε οποιοδήποτε αντικείμενο σε ένα παιχνίδι τότε αυτό παράγει αυτόματα κάποιον ήχο. Ο αισθητήρας Ακούω (Hear) πάντα συνοδεύεται με προσδιοριστικό στοιχείο είτε κάποιο αντικείμενο που θέλουμε να αφουγκράζεται ο χαρακτήρας μας ή κάποιον ήχο από τους πολλούς που μας προσφέρει το περιβάλλον MSKodu. Ένα παράδειγμα εντολής με χρήση του αισθητήρα:
k06_hearDrumMoveaway.PNG

Ο προγραμματιστής που προγραμμάτισε την παραπάνω εντολή θα είχε στο μυαλό του:
ΌΤΑΝ[ακούσεις][κάποιο Ντραμ]ΤΟΤΕ[κινούμαι][μακρυά από αυτό]


Ρήματα συμπεριφορών που θα πρέπει να μας φέρουν στο μυαλό τον αισθητήρα Ακούω (Hear) είναι:
Ακούω,αφουγκράζομαι,αντιλαμβάνομαι.
Ας μάθουμε λοιπόν να προγραμματίζουμε τον αισθητήρα με τον καλύτερο δυνατό τρόπο, προγραμματίζοντας ένα παιχνίδι δράσης! Ο κόσμος του παιχνιδιού αποτελείται από ανισόπεδο έδαφος, από γρασίδι και είναι σχεδιασμένο ένα μονοπάτι που οδηγεί σε ένα Κάστρο. Τα αντικείμενα που υπάρχουν είναι ο Kodu, ο καλός του φίλος Μηχανάκιας, το Κάστρο στο τέλος του μονοπατιού, ένα Κανόνι, Σύννεφα και Φώτα. Σκοπός του παιχνιδιού είναι ο Kodu τον οποίο χειρίζεται ο παίχτης να οδηγήσει τον φίλο του Μηχανάκια στο Κάστρο. Το μονοπάτι όμως που ακολουθούν είναι δύσβατο καθώς το κανόνι όταν ακούει τον μηχανάκια να περνάει από μπροστά του εκτοξεύει πυραύλους εναντίον του. Τα Σύννεφα και τα φώτα αποτελούν στοιχεία του περιβάλλοντος και δεν παρουσιάζουν καποια συμπεριφορά.Ο κόσμος λοιπόν του παιχνιδιού περιγράφεται με την εικόνα που ακολουθεί:
K06_hearWorldFirst_Image.PNG

Ανοίξτε το παιχνίδι Help Μηχανάκια και θα προγραμματίσουμε μαζί τα αντικείμενα του παιχνιδιού με σκοπό να δημιουργήσουμε το παιχνίδι αυτό.
Ας ξεκινήσουμε με τον προγραμματισμό του Kodu. Ο Kodu αντιλαμβάνεται μέσω του αισθητήρα Πληκτρολόγιο (Keyboard) πότε ο παίχτης έχει πατήσει κάποιο από τα βέλη του Πληκτρολογίου (Keyboard) ώστε να κινηθεί προς την αντίστοιχη κατεύθυνση γρήγορα. Η συμπεριφορά αυτή είναι γνωστή σε εσάς και περιγράφεται ως εξής :
ΌΤΑΝ[στο Πληκτρολόγιο][πατηθεί κάποιο από τα βέλη]ΤΟΤΕ[κινήσου][γρήγορα]
Στο MSKodu η εντολή που περιγράφει την παραπάνω συμπεριφορά όπως θα έχετε ίσως σκεφτεί είναι
K06_hearKoduMovement.PNG

Ας προγραμματίσουμε τώρα τον Μηχανάκια.
Κάθε φορά που ο μηχανάκιας αφουγκράζεται τον Kodu, τότε θα πρέπει να τον ακολουθεί. Από την περιγραφή του παιχνιδιού καταλαβαίνουμε ότι δεν επιθυμούμε ο μηχανάκιας να ακολουθεί τον Kodu όταν τον βλέπει (θυμηθείτε τη περίπτωση των πράσινων τζετ στο παιχνίδι Air Fight). Συνεπώς δεν θα χρησιμοποιήσουμε τον αισθητήρα Βλέπω (See). Ποιον αισθητήρα μπορούμε λοιπόν να χρησιμοποιήσουμε; Αφού ο μηχανάκιας αντιλαμβάνεται τον Kodu από τον ήχο΄που κάνει, θα χρησιμοποιήσυμε τον αισθητήρα Ακούω (Hear). Το προσδιοριστικό που θα συνοδεύσει τον προγραμματισμό του αισθητήρα είναι ο Kodu. Επομένως για την συμπεριφορά του μηχανάκια, δημιουργούμε την παρακατώ εντολή :
ΌΤΑΝ[ακούω][τον Kodu]ΤΟΤΕ[κινούμαι][προς αυτόν]

K06_hearCycleEntoles.PNG
Αποθηκεύστε τις αλλαγές και τρέξτε το παιχνίδι για να επιβεβαιώσετε ότι όλα λειτουργούν όπως πρέπει.
Δεν τελειώσαμε όμως με τον προγραμματισμό όλων των αντικειμένων! Μας μένει ο προγραμματισμός του Κανονιού. Η περιγραφή του παιχνιδιού μας οδηγεί και πάλι στην χρήση του αισθητήρα Ακούω (Ηear). Αυτή τη φορά όμως οι εντολές που θα χρησιμοποιήσουμε είναι διαφορετικές. Τώρα επιθυμούμε το Κανόνι να ακούει τον Μηχανάκια, επομένωςτο προσδιοριστικό αντικείμενο είναι ο Μηχανάκιας. Η περιγραφή όμως του προβλήματος κρύβει και ένα άλλο προσδιοριστικό. Μπορείτε να το φανταστείτε; Έχουμε πει ότι το Κανόνι αντιλαμβάνεται τον Μηχανάκια όταν περνάει από μπροστά του και τότε εκτοξεύει πυραύλους εναντίων του. Συνεπώς χρειαζόμαστε ένα ακόμη προσδιοριστικό για τον αισθητήρα μας το οποίο έχει να κάνει με την θέση του Μηχανάκια. Όπως και στο παράδειγμα της προηγούμενης παραγράφου από το μενού επιλογές (options) μπορούμε να βρούμε το προσδιοριστικό που χρειαζόμαστε. Αυτό είναι το προσδιοριστικό Μπροστά (In Front). Άρα η συμπεριφορά που θα εμφανίζει το Kανόνι είναι
ΌΤΑΝ[ακούω][Mηχανάκια][μπροστά μου]ΤΟΤΕ[εκτόξευσε][πυραύλους εναντίων του]
K06_hearCanonEntoles.PNG
Αποθηκεύστε τις αλλαγές που έχετε κάνει και τρέξτε το παιχνίδι.
K06_hearingFinalImage.PNG
Ποιά άλλα όμως προσδιοριστικά μπορούμε να χρησιμοποιήσουμε σε συνδυασμό με τον αισθητήρα Ακούω (Hear); Μπορούμε να ορίσουμε ως προσδιοριστικό
οποιοδήποτε αντικείμενο του κόσμου μας, οποιοδήποτε χρώμα (μπορεί να σας φαίνεται παράξενο αλλά για παράδειγμα μπορεί ο Kodu όταν ακούει έναν μαύρο Μηχανάκια να τον κλωτσάει), ακριβώς όπως κάναμε και για τον αισθητήρα Βλέπω (Kodu). Όταν όμως ένα αντικείμενο διαθέτει τον αισθητήρα αυτό εμφανίζεται μια επιπλέον κατηγορία προσδιοριστικών με το όνομα Ήχοι (Sounds). Μπορούμε λοιπόν να χρησιμοποιήσουμε ως προσδιοριστικό όχι μόνο ένα αντικείμενο αλλά και κάποιον συγκεκριμένο ήχο (όταν ο Kodu ακούει π.χ. έναν ήχο δράματος τότε να εκφράζει λύπη).
[πονηρή ερώτηση: Υπάρχει μία ιδιότητα η οποία όταν είναι ενεργοποιημένη τότε ένα αντικείμενο δεν μπορεί να γίνει αντιληπτό από τον αισθητήρα Ακούω (Hear). Μπορείτε να βρείτε ποια είναι αυτή; Απ : Mute]
[tip: Μπορούμε να ρυθμίσουμε το πόσο μακρυά ακούει το αντικείμενο μας ρυθμίζοντας την ιδιότητα Aκοή (Hearing)].



6.3.3 Ο αισθήτηρας: Πέφτω Πάνω (Bump)bump.png
Ο αισθητήρας αυτός, επιτρέπει στα αντικείμενα να αντιλαμβάνονται το γεγονός ότι έχουν ακουμπήσει άλλα αντικείμενα. Θα μπορούσαμε δηλαδή να πούμε ότι ο συγκεκριμένος αισθητήρας αποτελεί την αίσθηση της αφής. Θα μπορούσαμε λοιπόν να προγραμματίσουμε τον Kodu όταν πέφτει πάνω σε ένα μήλο να το τρώει ή όταν πέφτει πάνω σε κάποιον εχθρό να χάνει ενέργεια.
Κάποια ρήματα συμπεριφορών που μας οδηγούν στη χρήση του αισθητήρα αυτού είναι πέφτω πάνω, ακουμπώ, αγγίζω, έρχομαι σε επαφή, συγκρούομαι.
Στα περισσότερα παιχνίδια που έχετε παίξει, ο ήρωας μαζεύει κάποια αντικείμενα για να πετύχει το στόχο του. Για παράδειγμα αν ακουμπήσει ένα νόμισμα τότε αυξάνονται τα χρήματα που διαθέτει . Όταν πέσει πάνω σε μια καρδιά, προστίθεται μια ζωή στις υπάρχουσες.

Ρίξτε μια ματιά στην παρακάτω συμπεριφορά. Μπορείτε να καταλάβετε τι είχε ο προγραμματιστής στο μυαλό του όταν προγραμμάτιζε το συγκεκριμένο αντικείμενο;
K06_bumpPx.PNG

Ας πάρουμε τα πράγματα με την σειρά. Προγραμματίσαμε το αντικείμενο να διαθέτει έναν αισθητήρα που θα του επιτρέπει να αντιλαμβάνεται πότε έχει ακουμπήσει ένα νόμισμα. Ο αισθητήρας που θα επιτρέψει στο αντικείμενο να αντιληφθεί το γεγονός αυτό είναι ο αισθητήρας Πέφτω Πάνω (Βump) και έχει ως αποτέλεσμα να παίξει τον ήχο του Νομίσματος. Όπως γνωρίζουμε όμως για να λειτουργήσει σωστά ένας αισθητήρας θα πρέπει να τον συνδυάσουμε με τα κατάλληλα προσδιοριστικά. Στο συγκεκριμένο παράδειγμα μας ενδιαφέρει η επαφή του αντικειμένου με ένα Νόμισμα. Συνεπώς το προσδιοριστικό που θα χρησιμοποιήσουμε είναι το Νόμισμα . Αυτό θα γίνει με την παρακάτω εντολή :

ΌΤΑΝ[πέσω πάνω][σε ένα νόμισμα]ΤΟΤΕ[να παίξω][τον ήχο νομίσματος].

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


[Tip: Μία από τις ιδιότητες που μπορούμε να δώσουμε στα αντικείμενά μας είναι η ιδιότητα Φάντασμα (Ghost). Όταν κάποιο αντικείμενο διαθέτει αυτή την ιδιότητα και τον αισθητήρα Πέφτω Πάνω (Bump) τότε ο αισθητήρας δεν λειτουγεί!]




6.2.4 Ο αισθήτηρας: Πετυχαίνω shot_hit.png


Ο αισθητήρας αυτός βοηθάει τον Kodu να αντιληφθεί πότε ένας Πύραυλος (Missile) ή ένα Σφαιρίδιο (Blip) που έχει εκτοξεύσει έχει χτυπήσει κάποιο άλλο αντικείμενο. Όπως μπορείτε να φανταστείτε, εαν προγραμματίσουμε ένα αντικείμενο να εκτελεί την ενέργεια Πυροβολώ (Shoot) τότε είναι πολύ πιθανό ότι θα χρειαστούμε να προγραμματίσουμε και τον αισθητήρα Πετυχαίνω (Shot Hit). Έτσι λοιπόν στο MSKodu θα μπορούσαμε να προγραμματίσουμε όταν ο Kodu πετύχει ένα κανόνι να το καταστρέψει ή όταν το πράσινο Κανόνι πετύχει τον Μηχανάκια να τον βάψει και αυτόν πράσινο! Με τον αισθητήρα αυτόν λοιπόν θα μπορείτε να προγραμματίζετε όλες τις παραπάνω συμπεριφορές και πολλές άλλες! Ένα παράδειγμα εντολής με χρήση του αισθητήρα:
K06_shotHitParadeigma.PNG

ΌΤΑΝ[πετυχαίνω][αερόπλοιο (blimp)]ΤΟΤΕ[ανατίναξέ][το αερόπλοιο]

Ρήματα συμπεριφορών που θα πρέπει να μας φέρνουν στο μυαλό τον αισθητήρα Πετυχαίνω είναι:
Ευστοχώ, βρίσκω στόχο

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

K06_shotHitArxiki.PNG


Σύμφωνα με την εμπειρία σας μέχρι τώρα είναι εύκολο να δημιουργήσετε έναν κόσμο που μοιάζει με τον παραπάνω. Το αντικείμενο που θα παρουσιάζει κάποια συμπεριφορά είναι μόνο ο Kodu. Αρχικά θα πρέπει ο Kodu να αλληλεπιδρά με τον παίχτη προκειμένου να μπορεί να γυρνάει (turn) αριστερά και δεξιά και να εκτοξεύει πυραύλους.. Ας υποθέσουμε ότι το αντικείμενο αντιλαμβάνεται τα κουμπιά του πληκτρολογίου για την περιστροφή και το πάτημα του αριστερού κουμπιού του ποντικιού για την εκτόξευση πυραύλων. Ο προγραμματισμός των παραπάνω συμπεριφορών δεν θα πρέπει να σας δυσκολεύει ιδιαίτερα. Επιθυμούμε:
ΌΤΑΝ[στο πληκτρολόγιο][πατηθεί το πλήκτρο Α]ΤΟΤΕ[στρίψε][αριστερά]
ΌΤΑΝ[στο πληκτρολόγιο][πατηθεί το πλήκτρο D]ΤΟΤΕ[στριψε][δεξιά]
ΌΤΑΝ[στο ποντίκι][πατηθεί το αριστερό κλικ]ΤΟΤΕ[εκτόξευσε][πύραυλο]
K06_shotHitMovementMissile.PNG

Πως θα είναι όμως ο Kodu ικανός να αντιληφθεί ότι ο πύραυλος που έχει εκτοξεύσει έχει χτυπήσει κάποιο μήλο; Η χρήση του αισθητήρα Πέφτω Πάνω (Bump) δεν θα ήταν σωστή αφού αφορά μόνο το αν ο Kodu έχει χτυπήσει κάποιο άλλο αντικείμενο. Εμείς επιθυμούμε ο αισθητήρας που θα χρησιμοποιήσουμε να αντιλαμβάνεται αν ο πύραυλος (missile) που έχει εκτοξεύσει ο Kodu έχει χτυπήσει κάποιο αντικείμενο. Ο Kodu μπορεί να το αντιληφθεί το γεγονός αυτό αν τον προγραμματίσουμε με τον αισθητήρα Πετυχαίνω (Shot Hit). Έτσι λοιπόν, ο αισθήρας αυτός θα αντιλαμβάνεται την πρόσκρουση του πυραύλου με κάποιο μήλο. Συνεπώς θα έχει σαν προσδιοριστικό το αντικείμενο Μήλο (apple). Η ενέργεια που θα εκτέλεσει ο Kodu όταν το γεγονός είναι αληθές είναι να χρωματίσει τον εαυτό του με το αντίστοιχο χρώμα του μήλου. Επομένως, μήπως είναι απαραίτητο να προσθέσουμε κάποιο επιπλέον προσδιοριστικό στον αισθητήρα; Θα πρέπει να προσδιορίσουμε και το χρώμα του μήλου που ο Κodu πετυχαίνει κάθε φορά. Το ίδιο προσδιοριστικό χρώματος θα πρέπει να προσθέσουμε και στην ενέργεια.
Γενικά η συμπεριφορά του Kodu μπορούμε να πούμε ότι είναι :
ΌΤΑΝ[πετυχαίνω][Μήλο][χρώμα]ΤΟΤΕ[χρωμάτισε][εμένα][χρώμα]

Συγκεκριμένα όταν ο Kodu πετυχαίνει το κόκκινο Μήλο:
ΟΤΑΝ[πετυχαίνω][Μήλο][κόκκινο]ΤΟΤΕ[χρωμάτισε][εμένα][κόκκινο]
K06_shotHitRedEntoli.PNG
K06_shotHitRed.PNG
Παρατηρείστε ότι στην παραπάνω εικόνα λείπει το κόκκινο Μήλο.Αρα ο Kodu πέτυχε το κόκκινο Μήλο και έτσι χρωμάτισε τον εαυτό του κόκκινο.
Όταν ο Kodu πετυχαίνει το πράσινο Μήλο:
ΟΤΑΝ[πετυχαίνω][μήλο][πράσινο]ΤΟΤΕ[χρωμάτισε][εμένα][πράσινο]
K06_ShotHitGreenEntoli.PNG
K06_shotHitGreen.PNG




Όταν ο Kodu πετυχαίνει το κίτρινο Μήλο:
ΟΤΑΝ[πετυχαίνω][Μήλο][κίτρινο]ΤΟΤΕ[χρωμάτισε][εμένα][κίτρινο]


K06_shotHitYellowEntoli.PNG
K06_shotHitYellow.PNG



Εκτός από οποιοδήποτε αντικείμενο ή οποιοδήποτε χρώμα, μπορούμε να χρησιμοποιήσουμε πολλά άλλα προσδιοριστικά για τον αισθητήρα Πετυχαίνω (Shot Hit). Για παράδειγμα θα μπορούσαμε να χρησιμοποιήσουμε το δεν (not) στο παραπάνω παράδειγμα έτσι ώστε όταν ο Kodu δεν πετυχαίνει κάποιο Mήλο να χρωματίζει τον εαυτό του μαύρο. Ακόμη φανταστείτε σε ένα παιχνίδι μάχης τον Kodu να εκτοξεύει πυραύλους εναντίων ακίνητων κανονιών και κινούμενων Χελωνών. Δεν θα ήταν δίκαιο να επιβραβεύουμε με περισσότερους πόντους τον παίκτη κάθε φορά που χτυπάει ένα κινούμενο αντικείμενο από ότι όταν χτυπάει ένα ακίνητο; Για να το πετύχουμε αυτό θα πρέπει να χρησιμοποιήσουμε το προσδιοριστικό κινούμενο (moving) μετά το αντικείμενο που επιθυμούμε να αντιλαμβάνεται ο αισθητήρας ότι ο Kodu έχει πετύχει.



6.2.5 Ο αισθητήρας Έχω (Got) got.png


Ο αισθητήρας αυτός αναγνωρίζει το γεγονός ότι ο Kodu κρατάει κάποιο άλλο αντικείμενο. Μα πως είναι αυτό δυνατόν, αφού δεν έχει χέρια! Και όμως στο MSKodu κάποιο αντικείμενο είναι ικανό να κρατήσει κάποιο άλλο αντικείμενο. Θα μπορούσαμε λοιπόν να προγραμματίσουμε τον Kodu έτσι ώστε όταν έχει μία Καρδιά να εκπέμπει κόκκινο φως ή όταν κρατάει την φίλη του Χελώνα (turtle) να Πηδάει (jump) ώστε να την βοηθήσει να διασχίσει ένα ποτάμι! Ένα αντιπροσωπευτικό παράδειγμα με χρήση του αισθητήρα είναι :
K06_gotParadeigmatikiEntolh.PNG
Ο μάλλον «ερωτοχτυπημένος» προγραμματιστής είχε στο μυαλό του:
ΌΤΑΝ[έχω][μια Kαρδιά]ΤΟΤΕ[λάμπω][εγώ][με κόκκινο χρώμα]

Πάμε λοιπόν να δούμε πως μπορούμε να προγραμματίζουμε τον αισθητήρα αυτό δημιουργώντας ένα παιχνίδι δράσης/ επιβίωσης.
Φορτώστε το παιχνιδι Save The Wounded Kodus
Description: http://c1.wikicdn.com/i/mime/32/empty.png
Description: http://c1.wikicdn.com/i/mime/32/empty.png
Save The Wounded Kodus!.Kodu

Η πίστα αυτού του παιχνιδιού αποτελείται από ένα μακρύ διάδρομο από γρασίδι. Στην αρχή του διαδρόμου υπάρχει ο άσπρος Kodu που είναι ο χαρακτήρας του παίχτη όπως και αρκετά γκρι Kodu που περιφέρονται.Στο τέλος του διαδρόμου υπάρχουν δύο Κάστρα και μία Καλύβα, ενώ στον ουρανό περιφέρονται εχθρικά Τζετ τα οποία ρίχνουν πυραύλους προς τα κάτω. Ο παίκτης θα πρέπει να πάρει ένα προς ένα όλα τα γκρι Kodu και να τα μεταφέρει με ασφάλεια στην άλλη πλευρά. Τα γκρι Kodu είναι ασφαλή μόνο όταν ακουμπήσουν την Καλύβα. Ο παίκτης είναι νικητής όταν δεν υπάρχει κανένα γκρι Kodu στην πίστα. Τα Κάστρα αποτελούν απλά διακοσμητικό στοιχείο της πίστας.
K06_gotArxiki.png
Ας μελετήσουμε την συμπεριφορά καθενός από τα αντικείμενα που υπάρχουν στο παιχνίδι.
Αρχικα ο Kodu αλληλεπιδρά με τον χρήστη μέσω του αισθητήρα Πληκτρολόγιο (keyboard) και συγκεκριμένα όταν ο παίκτης πατάει κάποιο από τα πλήκτρα WASD. Όταν συμβεί κάτι τέτοιο τότε ο Kodu κινείται προς την αντίστοιχη κατεύθυνση. Επιπλέον ο παίκτης ελέγχει τον Kodu και μέσω του αισθητήρα Ποντίκι (mouse).
Μάλιστα ο αισθητήρας αυτός έχει προγραμματιστεί για δύο γεγονότα. Το πρώτο γεγονός αφορά το πάτημα του αριστερού κουμπιού. Όταν ο Kodu αντιληφθεί μέσω του αισθητήρα Ποντίκι ότι έχει πατηθεί το αριστερό κοθμπί του ποντικιού τότε Aρπάζει (Grab) ότι βρει μπροστά του. Η συμπεριφορά αυτή επιτρέπει στον Kodu να παίρνει ένα-ένα τα γκρι Kodu και να τα μεταφέρει όπου επιθυμεί. Όταν πλέον ο Kodu φτάσει στο τέλος του διαδρόμου θα πρέπει να αφήσει το γκρι Kodu που κρατάει. Για την υλοποίηση της συμπεριφοράς αυτής μας βοηθάει το δεύτερο γεγονός που αντιλαμβάνεται ο αισθητήρας Ποντίκι (mouse). Όταν ο Kodu αντιληφθει ότι έχει πατηθεί το δεξί κλικ του ποντικιού τότε Αφήνει (Drop) το γκρι Kodu. Εύκολα μπορούμε να κατανοήσουμε από το προηγούμενο κεφάλαιο για ποιο λόγο έχουμε προγραμματίσει τον Kodu ως εξής:
K06_gotMovementSavekodu.PNG

Ας εξετάσουμε λοιπόν την τελευταία συμπεριφορά με την οποία έχει προγραμματιστεί ο Kodu.
Από την στιγμή που ο Kodu εκτελεί την ενέργεια Aρπάζω (Grab) προκειμένου να κρατήσει ένα γκρι Kodu θα πρέπει να διαθέτει και έναν αισθητήρα για να αντιληφθεί το γεγονός αυτό. Ποιος άραγε μπορεί να είναι ο αισθητήρας αυτός; Μα φυσικά ο αισθητήρας Έχω (Got)! Μάλιστα θα πρέπει να συνοδεύεται με δύο προσδιοριστικά. Το πρώτο προσδιοριστικό αφορά το αντικείμενο που έχει ο Kodu και το δεύτερο είναι το χρώμα του δηλαδή το γκρι. Όταν συμβεί κάτι τέτοιο τότε ο Kodu κινείται πάρα πολύ γρήγορα προκειμένου να φτάσει το συντομότερο δυνατό στο Κάστρο.

K06_gotKoduGotEntoli.png
ΌΤΑΝ[έχω][ένα γκρι][Kodu] ΤΟΤΕ[να κινηθώ][πολύ γρήγορα]
[πονηρή ερώτηση : η χρήση του αισθητήρα Έχω (Got) έχει νόημα μόνο αν έχουμε προγραμματίσει κάποιο αντικείμενο να εκτελεί την ενέργεια Aρπάζω (Grab). Γιατί συμβαίνει αυτό άραγε;]



Συνεχίζουμε με τη μελέτη συμπεριφοράς των γκρι Kodu. Εφόσον τα γκρι Kodu είναι πανικοβλημένα από την ξαφνική επίθεση των Τζετ το μόνο που κάνουν είναι να περιφέρονται. Συνεπώς για τον προγραμματισμό της συμπεριφοράς τους δεν χρειάζεται κάποιος αισθητήρας. Άρα η συμπεριφορά που επιδεικνύουν τα γκρι Kodu είναι:
K06_gotGreyKodu.PNG


[tip: αν δεν προγραμματίσουμε ένα αντικείμενο να διαθέτει κάποιον αισθητήρα παρά μόνο να εκτελεί μία ενέργεια τότε είναι ακριβώς το ίδιο με το να έχουμε προγραμματίσει το αντικείμενο με τον αισθητήρα Πάντα (Αlways)]

Ούτε τα τζετ από την πλευρά τους χρειάζεται να διαθέτουν κάποιον αισθητήρα. Είναι όμως προγραμματισμένα να εκτελούν ταυτόχρονα δύο ενέργειες. Η πρώτη ενέργεια είναι να περιφέρονται και η δεύτερη να εκτοξεύουν πυραύλους προς τα κάτω.
K06_gotJets.PNG

Τέλος η Kαλύβα είναι προγραμματισμένη να εκδηλώνει δύο συμπεριφορές.
Αρχικά θα πρέπει να είναι εφοδιασμένη με τον αισθητήρα "Πέφτω Πάνω (Bump)" για να αντιλαμβάνεται πότε ένα γκρι Kodu την έχει ακουμπήσει. Όταν συμβεί κάτι τέτοιο τότε το εξαφανίζει.
Η καλύβα όμως είναι και υπέυθυνη για να ανακυρρήξει τον Kodu νικητή.
Θυμηθείτε ότι ο Kodu είναι νικητής μόνο όταν δεν υπάρχει κάποιο γκρι Kodu. Όπως είδαμε στο κεφάλαιο αυτό μπορούμε να χρησιμοποιήσουμε τον αισθητήρα Βλέπω (See) προκειμένου η καλύβα να αντιληφθεί την απουσία των γκρι Kodu από την πίστα.

K06_got_Castle.PNG

Τρέξτε τώρα το παιχνίδι και διασκεδάστε!

K06_gotGreyKoduFinal.PNG



Ποιά άλλα όμως προσδιοριστικά να μπορούμε να χρησιμοποιήσουμε με τον αισθητήρα Έχω (Got); Όπως θα έχετε καταλάβει μπορούμε να χρησιμοποιήσουμε οποιοδήποτε αντικείμενο και χρώμα. Μπορούμε ακόμα όπως και με τους άλλους αισθητήρες να χρησιμοποιήσουμε το προσδιοριστικό δεν (not). Για παράδειγμα θα μπορούσαμε να εμπλουτίσουμε το παραπάνω παράδειγμα προγραμματίζοντας μία καινούρια συμπεριφορά του Kodu. Θα μπορούσαμε να τον προγραμματίσουμε όταν δεν κρατάει τίποτα (anything) τότε να εκφράζει λύπη.


6.2.6 Ο αισθητήρας Κουβαλιέμαι (Ηeld Βy) held_by.png
Ο αισθητήρας Κουβαλιέμαι (Ηeld Βy), επιτρέπει στα αντικείμενα να αντιδρούν στο γεγονός ότι κάποιο άλλο αντικείμενο τα κρατάει. Έτσι λοιπόν θα μπορούσαμε να προγραμματίσουμε την φίλη του Kodu να λέει βοήθεια όταν την κρατάει ένας διαβολικός Μηχανάκιας ή ένα Αστέρι να λάμπει όταν το κρατάει ο Kodu. Ο αισθητήρας Κουβαλιέμαι (Ηeld Βy) συνοδεύεται πάντα με προσδιοριστικό το αντικείμενο που κρατάει τον χαρακτήρα μας.

[tip : θα μπορούσατε να υποψιαστείτε ότι ίσως χρειαστεί ο αισθητήρας Κουβαλιέμαι (Ηeld Βy) αν κάποιο αντικείμενο εκτελεί την ενέργεια Αρπάζω (Grab). Μάλιστα το προσδιοριστικό του αισθητήρα Kουβαλιέμαι (Held By) θα είναι το αντικείμενο που εκτελεί την ενέργεια Aρπάζω (Grab)!]
Ένα παράδειγμα εντολής με χρήση του αισθητήρα είναι :
K06_heldBy_Protasi.PNG
Τι είχε ο προγραμματιστής στο μυαλό του:
ΌΤΑΝ[με κρατάει][ένας Μηχανάκιας] ΤΟΤΕ[να εκφράζομαι][με κακιές κουβέντες]

Ρήματα συμπεριφορών που θα πρέπει να μας φέρνουν στο μυαλό τον αισθητήρα:
Κουβαλιέμαι, κρατιέμαι,μεταφέρομαι
Προκειμένου να κατανοήσουμε την χρήση του αισθητήρα αυτού θα προσθέσουμε μία επιπλέον συμπεριφορά στα γκρι Kodu του παιχνιδιού Save the wounded kodus της προηγούμενης υποενότητας.
Συγκεριμένα, στόχος μας είναι να τα προγραμματίσουμε έτσι ώστε όταν αντιλαμβάνονται ότι τα κρατάει ο Kodu τότε αυτά να εκπέμπουν μία πράσινη λάμψη. Πως λοιπόν μπορούν να αντιληφθούν τα γκρι Kodu ότι τα μεταφέρει ο Kodu; Αφού θα μεταφέρονται από τον Kodu, θα χρησιμοποιήσουμε τον αισθητήρα Κουβαλιέμαι (Held By) με προσδιοριστικό το αντικείμενο Kodu. Από τη στιγμή που κανένα άλλο αντικείμενο δεν μπορεί να κρατήσει κάποιο από τα γκρι Kodu εκτός από τον Kodu δεν θα έχουμε πρόβλημα έτσι ώστε να χρειαζόμαστε επιπλέον προσδιοριστικό (χρώμα). Συνεπώς για την καινούρια συμπεριφορά των «πληγωμένων» Kodu, δημιουργούμε την εξής εντολή:
ΌΤΑΝ[κουβαλιέμαι][από τον Kodu] ΤΟΤΕ[ να λάμπω][εγώ][με πράσινο χρώμα]
K06_helByEntoli.PNG

Φορτώστε λοιπόν το παιχνίδι και πάλι και προσθέστε την παραπάνω συμπεριφορά στα γκρι Kodu. Σώστε το και τρέξτε το.
K06_heldByFinalImage.PNG
Όπως και οι υπόλοιποι αισθητήρες έτσι κι ο αισθητήρας Κουβαλιέμαι (Ηeld Βy) μπορεί να συνδυαστεί με αρκετά προσδιοριστικά . Μπορούμε να ορίσουμε ως προσδιοριστικό οποιοδήποτε αντικείμενο του κόσμου μας, οποιοδήποτε χρώμα (π.χ. όταν ο Kodu κουβαλιέται από έναν μωβ Μηχανάκια να βάφεται και αυτός μωβ), οποιαδήποτε έκφραση άλλου αντικειμένου ( π.χ όταν ο Kodu κρατιέται από μία στενοχωρημένη Χελώνα να εκφράζει στενοχώρια και αυτός!). Στην επιλογή επιλογές (options) της πρώτης πίτας προσδιοριστικών, εμφανίζεται ένα επιπλέον προσδιοριστικό που έχει να κάνει με το αν το αντικείμενο που κουβαλάει το αντικείμενο μας κινείται. Έτσι για παράδειγμα αν επιθυμούμε ο Kodu να αντιλαμβάνεται ότι κουβαλιέται από ένα κινούμενο Ψάρι και τότε να το κλωτσάει, πρέπει να χρησιμοποιήσουμε και το προσδιοριστικό κινούμενο (moving).






6.4 H συμπεριφορά του Kodu: ενέργειες
Στο προηγούμενο κεφάλαιο προγραμματίσαμε τον Kodu να εκτελεί ενέργειες χωρίς να υπάρχει αλληλεπίδραση με άλλα αντικείμενα. Στη παράγραφο αυτή θα γνωρίσουμε ενέργειες που αφορούν την αλληλεπίδραση αντικειμένων μεταξύ τους.


6.4.1 Ενέργεια Τρώω (Eat)eat.png

Η ενέργεια αυτή ικανοποιεί την όρεξη του πεινασμένου Kodu. Αστειευόμαστε! Είτε πεινάει ή όχι, από την στιγμή που ο Kodu είναι προγραμματισμένος να εκτελεί την ενέργεια αυτή (στα πλαίσια πάντα κάποιας συμπεριφοράς) μπορεί να φάει οποιοδήποτε αντικείμενο βάλουμε σαν προσδιοριστικό της. Θα μπορούσαμε δηλαδή να προγραμματίσουμε τον Kodu όταν βλέπει ένα Mήλο να το Tρώει (Eat) ή ένα Ψάρι όταν πέσει πάνω σε ένα άλλο Ψάρι τότε να το τρώει. Συνεπώς η ενέργεια Τώω (Εat) συνοδεύεται πάντα με προσδιοριστικό το στοιχείο που θέλουμε να καταβροχθίζει ο χαρακτήρας μας. Ένα παράδειγμα εντολής με χρήση της ενέργειας :
k06_eatProtasi.PNG


Τι είχε ο προγραμματιστής στο μυαλό του:

ΌΤΑΝ[δεις] [τον Κodu] ΤΌΤΕ [φάε]

Ρήματα που μπορούν να σας φέρνουν στο μυαλό την ενέργεια αυτή είναι:
Τρώω, καταβροχθίζω, εξαφανίζω, καταπίνω.

Ας μάθουμε όμως περισσότερα για την ενέργεια αυτή προγραμματίζοντας τον Kodu κατάλληλα.
Ανοίξτε έναν άδειο κόσμο (empty world) και προσθέστε τον Kodu, δύο Μήλα, ένα κόκκινο και ένα μωβ καθώς και ένα Δέντρο. Ο κόσμος θα μπορούσε να είναι όπως φαίνεται στην παρακάτω εικόνα :


k06_eatCosmos.png
Σκοπός μας είναι να προγραμματίσουμε τον Kodu όταν Bλέπει (See) ένα κόκκινο Μήλο τότε να το καταπίνει.
Αρχικά για την κίνηση του Kodu τον προγραμματίζουμε με τον αισθητήρα πληκτρολόγιο έτσι ώστε όταν πατηθεί κάποιο από τα τέσσερα βέλη να το αντιληφθεί και να κινηθεί προς την αντίστοιχη κατεύθυνση.

K06_eatMovement.PNG

Αποθηκεύστε το παιχνίδι και τρέξτε το.























Παρατηρούμε ότι ο kodu το μόνο που κάνει είναι να σπρώχνει το Μήλο προς οποιαδήποτε κατεύθυνση κινείται.
Πώς άραγε θα μπορούσαμε να προγραμματίσουμε τον Kodu να καταπίνει το κόκκινο μήλο όταν το βλέπει; Εφόσον πρόκειται για ένα λαχταριστό κόκκινο μήλο θα μπορούσαμε να προγραμματίσουμε τον Κodu έτσι ώστε όταν Βλέπει (See) ένα κόκκινο Mήλο να το Tρώει (Eat)!
Προσθέτουμε λοιπόν στις συμπεριφιρές του Kodu τις εξής εντολές:
ΌΤΑΝ[δω][Mήλο][κόκκινο] ΤΟΤΕ[φάε][το κόκκινο Mήλο]
k06_protasiGiaEat.PNG


Αποθηκεύστε τις αλλαγές, τρέξτε το παιχνίδι και κατευθύνετε τον Kodu προς το κόκκινο Mήλο. Ο Kodu έφαγε το κόκκινο Mήλο! Παρατηρήσατε ότι ακούστηκε και ο χαρακτηριστικός ήχος που κάνει το Mήλο όταν τρώγεται;
k06_eatFinal.png


Η ενέργεια Tρώω (Eat) μπορεί να πάρει δύο προσδιοριστικά, το συγκεκριμένο (it) και το μόνο μία φορά (once) . Το πρώτο προσδιοριστικό χρησιμοποιείτε όταν επιθυμούμε o Kodu να τρώει μόνο το αντικείμενο που αντιλαμβάνεται ο αισθητήρας όσες φορές και αν το βλέπει. Εαν στην πίστα μας υπάρχουν πολλά Μήλα και επιθυμούμε ο Κodu να φάει μόνο το πρώτο που θα αντιληφθεί τότε εκτός από το προσδιοριστικό συκεκριμένο (it) θα πρέπει να προσθέσουμε και το δεύτερο προσδιοριστικό δηλαδή το μια φορά (once).


6.4.2 Ενέργεια Εξαφανίζωvanich.png
Η ενέργεια αυτή είναι διαθέσιμη στο μενού μάχη (combat). Ας σκεφτούμε λίγο την προηγούμενη ενέργεια, δηλαδή την ενέργεια «Tρώω (Eat) ». Στην περίπτωση που στην θέση του Μήλου είχαμε ένα Νόμισμα ή μια Καρδιά, θα μπορούσαμε και πάλι να χρησιμοποιήσουμε την ενέργεια Τρώω (Εat) όπως ήδη έχει αναφερθεί. Ωστόσο στις περιπτώσεις αυτές αυτό που στην ουσία επιθυμούμε να γίνεται είναι το αντικείμενο στο οποίο πέσει πάνω ο Kodu να εξαφανιστεί από τον κόσμο, και όχι να φαγωθεί. Για αυτό το λόγο μπορούμε να προγραμματίσουμε τον Kodu με την ενέργεια Εξαφανίζω (Vanish). Θα μπορούσαμε γαι παράδειγμα να προγραμματίσουμε τον Kodu όταν Πετυχαίνει (Shot Hit) ένα εχθρικό Kανόνι αυτό να εξαφανίζεται. Φανταζόμαστε λοιπόν ότι η ενέργεια αυτή συνδυάζεται πάντα με προσδιοριστικό ένα αντικείμενο. Αυτό όμως δεν είναι πάντα σωστό. Αν δεν βάλουμε κάποιο προσδιοριστικό στην ενέργεια τότε ο Κodu θα εξαφανίζει οποιοδήποτε αντικείμενο για το οποίο αληθεύει το γεγονός που οδηγεί στην εκτέλεση της ενέργειας αυτής. Ένα παράδειγμα εντολής με χρήση της ενέργειας Εξαφανίζω (Vanish):
k06_vanishProtasi.PNG
Τι είχε ο προγραμματιστής στο μυαλό του:
ΌΤΑΝ [πετυχαίνω][οτιδήποτε]ΤΟΤΕ [Eξαφάνιζε]

Ρήματα συμπεριφορών που θα πρέπει να μας φέρνουν στο μυαλό την ενέργεια:
Εξαφανίζω, καταστρέφω, σκοτώνω, εξολοθρεύω, αφανίζω

Ας υποθέσουμε λοιπόν ότι σε ένα κόσμο υπάρχει ο Μηχανάκιας και μία Χελώνα όπως φαίνεται στην παρακάτω εικόνα.
k06_vanishCosmos.PNG
Θα προγραμματίσουμε τον Μηχανάκια να παρουσιάζει μία συμπεριφορά που είναι σίγουρο ότι έχετε συναντήσει σε κάποιο άλλο παιχνίδι. Πρόκειται για μία από τις κλασικότερες συμπεριφορές σε παιχνίδια δράσης! Επιθυμούμε να προγραμματίσουμε τον Μηχανάκια έτσι ώστε αν μετά την εκτέλεση ενός άλματος πέσει πάνω στην Χελώνα να την καταστρέψει! Για να δούμε λοιπόν πως θα μπορούσαμε να προγραμματίσουμε τον Μηχανάκια έτσι ώστε να επιδεικνύει την παραπάνω συμεριφορά. Για ακόμη μια φορά θα χρειαστούμε να προγραμματίοσυμε την αλληλεπίδραση του Μηχανάκια με τον πάικτη μέσω του πληκτρολογίου έτσι ώστε να κινείται και να εκτελεί άλμα. Αυτές τις συμπεριφορές θα πρέπει να είστε πλέον σε θέση να τις προγραμματίζετε. Πώς όμως μπορούμε να προγραμματίσουμε τον Μηχανάκια έτσι ώστε όταν προσγειωθεί πάνω στην Χελώνα να την καταστρέψει; Ο Μηχανάκιας θα πρέπει να διαθέτει κάποιον αισθητήρα που να αντιλαμβάνεται πότε έχει ακουμπήσει την Χελώνα. Σωστά; Θυμηθείτε τον αισθητήρα Πέφτω Πάνω (Βump) που μάθαμε σε αυτό το κεφάλαιο. Θα έχει σαν προσδιοριστικό αντικείμενο την Χελώνα και θα χρεαστούμε και το προσδιοριστικό που υποδηλώνει κατεύθυνση. Εφόσον ο μηχανάκιας θα πέφτει πάνω στην χελώνα από τον αέρα η Χελώνα θα βρίσκεται από κάτω του. Άρα θα πρέπει να χρησιμοποιήσουμε και το προσδιοριστικό κάτω (below) . Αυτό είναι το γεγονός που θα οδηγεί τον Μηχανάκια στην εκτέλεση της ενέργειας του, η οποία είναι να σκοτώνει την Χελώνα. Θυμηθείτε λίγο τα εναλλακτικά ρήματα που παρουσιάστηκαν ως τώρα σε αυτή τη παράγραφο. Ποιά ενέργεια σας έρχεται στο μυαλό; Αυτή θα πρέπει να είναι η ενέργεια Εξαφανίζω (Vanish), την οπία μάλιστα θα πρέπει να την συνδυάσουμε με το προσδιοριστικό συγκεκριμένο (it) έτσι ώστε να εξαφανίζει μόνο την Χελώνα.
Οι συμπεριφορές λοιπόν που περιγράψαμε παραπάνω είναι:
ΌΤΑΝ[στο πήκτρολόγιο πατηθεί][κάποιο από τα βέλη] ΤΟΤΕ [κινήσου]
Όταν[στο πληκτρολόγιο πατηθεί][το πλήκτρο κενό] ΤΟΤΕ [πήδα][χαμηλά]
ΌΤΑΝ[ακουμπήσεις][μία Xελώνα][από κάτω σου ] ΤΟΤΕ[εξαφάνισε][την Xελώνα]
Και σε μορφή εντολών στο MSKodu είναι:

k06_vanishCyclePaiktis.PNG


k06_vanishCyclePaiktisDoingJump.PNG
[ο Mηχανάκιας εκτελεί άλμα προκειμένου να προσγειωθεί πάνω στην Xελώνα για να την σκοτώσει]

k06_vanishCyclePaiktisAfterJumpVanishingTurtle.PNG
[ο Mηχανάκιας προσγειώθηκε πάνω στην Xελώνα και την εξαφάνισε]

Η ενέργεια εξαφανίζω μπορεί να συνδυαστεί μόνο με δύο προσδιοριστικά. Το συγκεκριμένο (it) και το εμένα(me). Για το προσδιοριστικό εμένα θα μπορούσαμε να προγραμματίσουμε τον Μηχανάκια του παραδείγματος μας να εξαφανίζει τον εαυτό του αν πέσει πάνω στην Χελώνα από οποιαδήποτε άλλη κατεύθυνση εκτός της από κάτω (below)

6.4.3 Ενέργεια Εκτινάζω (Launch)launch.png

Η ενέργεια αυτή δίνει την ικανότητα στον Kodu να εκτινάζειι άλλα αντικείμενα. Θα μπορούσαμε για παράδειγμα να προγραμματίσουμε τον Kodu σε ένα παιχνίδι μάχης όταν πέφτει πάνω σε ένα Μηχανάκια να τον πετάει μακρυά. Θα την βρείτε στο μενού ενέργειες (actions). Ωστόσο πρόκειται για μία ιδιαίτερη ενέργεια καθώς ανάλογα με τα προσδιοριστικά που θα χρησιμοποιήσουμε αλλάζει τελείως τον τρόπο με τον οποίο ο Κodu την εκτελεί. Κάντε λίγη υπομονή και όλα αυτά θα τα ξεκαθαρίσουμε στην συνέχεια. Ένα παράδειγμα εντολών περιγραφής της ενέργειας είναι

k06_protasigiaLanch.PNG

ΌΤΑΝ[συγκρουστείς][με τον Κodu] ΤΟΤΕ[Εκτίναξε][τον kodu]
Ρήματα που μπορούν να μας φέρουν στο μυαλό την ενέργεια αυτή:
Εκτινάζω, πετάω, κλωτσάω.
Ας δούμε πρακτικά όμως την ενέργεια αυτή σε ένα παιχνίδι εκτέλεσης πέναλτι το οποίο θα ολοκληρωθεί στην επόμενη παράγραφο. Συνεπώς βάλτε τα δυνατά σας τώρα έτσι ώστε στο τέλος του κεφαλαίου να έχετε ένα ολοκληρωμένο παιχνίδι! Έστω ότι ο κόσμος του παιχνιδιού αποτελείται από ένα γήπεδο ποδοσφαίρου. Στο βάθος ακούγεται πλήθος να ζητωκραυγάζει ενώ στο κέντρο του υπάρχει ο Κodu τον οποίο χειρίζεται ο παίκτης με το πληκτρολόγιο και μία Μπάλα, όπως φαίνεται και στην παρακάτω εικόνα. Σκοπός του παιχνιδιού είναι ο κodu να βάλει γκολ στην εστία που βρίσκεται στα αριστερά του.
k06_launchCosmos.png

Ας ξεκινήσουμε με τον προγραμματισμό του Kodu δηλαδή του αντικειμένου που θα χειρίζεται ο παίχτης. Ο Kodu θα πρέπει να αξιοποιήσει τον αισθητήρα πληκτρολόγιο για να καταλαβαίνει πότε ο χρήστης έχει πατήσει τα πλήκτρα αριστερό και δεξί βέλος και το space. Για την κίνηση του Κodu λοιπόν χρειαζόμαστε τις
ΌΤΑΝ[στο πληκτρολόγιο][πατηθεί το πλήκτρο αριστερά] ΤΟΤΕ [στρίψε][αριστερα]
ΌΤΑΝ[στο πληκτρολόγιο][πατηθεί το πλήκτρο δεξιά] ΤΟΤΕ [στρίψε][δεξιά]
Πως όμως μπορούμε να προγραμματίσουμε τον Κodu έτσι ώστε να βαράει την μπάλα και αυτή να εκτοξεύεται στην εστία προκειμένου να βάλει γκολ; Από την στιγμή που επιθυμούμε ο πάικτης να εκτελεί το πέναλτι θα πρέπει να αποφασίζει εκείνος πότε να κλωτσίσει την μπάλα. Συνεπώς και πάλι θα προγραμματίσουμε τον Κodu με τον αισθητήρα πληκτρολόγιο και προσδιοριστικό το πλήκτρο κενό (space). Ποια ενέργεια όμως θα μπορούσαμε να χρησιμοποιήσουμε έτσι ώστε ο Κodu να κλωτσάει την μπάλα; Ενέργεια που να ονομάζεται κλωτσάω δεν υπάρχει. Θα μπορούσαμε συνεπώς να χρησιμοποιήσουμε την ενέργεια Εκτινάζω (Launch). Μάλιστα δεν θα πρέπει να την συνδιάσουμε με κανένα προσδιοριστικό. Έτσι λοιπόν μπορούμε να προσθέσουμε στον Κodu την εξής συμπεριφορά:
ΌΤΑΝ [στο πληκτρολόγιο][πατηθεί το κενό] ΤΟΤΕ[εκτίναζε]
Ακολουθεί το σύνολο των εντολών για τον Κodu:
k06_launchKodu.PNG
Αποθηκεύστε το παιχνίδι και τρέξτε το.

k06_launchSketo.PNG

Μήπως σας φαίνεται παράξενο ότι χρησιμοποιούμε την Εκτινάζω (Launch) χωρίς προσδιοριστικό; Για να πάμε να δούμε τι θα συμβεί άμα προσθέσουμε και το προσδιοριστικό Μπάλα αφού στην ουσία αυτό είναι το αντικείμενο που εκτινάζει ο Kodu. Ας ανοίξουμε λοιπόν τον επεξεργαστή εντολών και ας συμπληρώσουμε το προσδιοριστικό Μπάλα στην ενέργεια του Kodu.
k06_launchKoduMeProsdioristiko.PNG

Αποθηκεύστε τις αλλαγές και τρέξτε πάλι το πρόγραμμα. Αυτή τη φορά κρατείστε πατημένο το πλήκτρο κενό (space) . Όσο κρατάτε πατημένο το πλήκτρο ο κόσμος θα πρέπει να μοιάζει όπως φαίνεται στην εικόνα που ακολουθει :
k06_launchMeProsdioristikoCosmos.PNG

Όταν σταματήσετε να πατάτε το πλήκτρο ο κόσμος θα μοιάζει κάπως έτσι :k06_launchMeProsdioristikoCosmos2.PNG
Γέμισε ο τόπος Μπάλες! Επιπλέον παρατηρείστε ότι το αρχικό αντικείμενο Μπάλα που έχουμε εισάγει στον κόσμο του παιχνιδιού δεν έχει κινηθεί καθόλου. Αυτό συμβαίνει διότι στην περίπτωση που προσθέσουμε ως προσδιοριστικό στοιχείο κάποιο από τα αντικείμενα που μας προσφέρει το MSKodu στην ενέργεια εκτινάζω (Launch), ο Kodu δημιουργεί το αντικείμενο που έχουμε προσθέσει ως προσδιοριστικό και το εκτοξεύει ασχέτως με ότι βρίσκεται μπροστά του.
Θα συμφωνείτε τώρα ότι η ενέργεια αυτή είναι αρκετά παράξενη! Η ενέργεια εκτινάζω (Launch) συνδιάζεται με προσδιοριστικά που αφορούν την δύναμη και το ύψος που εκτοξεύει ο Kodu το αντικείμενο (για παράδειγμα αν επιθυμούσαμε όταν πατηθεί το πλήκτρο κενό (space) ο Κodu να ρίξει ψηλοκρεμαστό σουτ τότε θα προσθέταμε στην ενέργεια εκτινάζω τα προσδιοριστικά δυνατά (strong) και ψηλά (high) ), όπως και την κατεύθυνση στην οποία επιθυμούμε να εκτοξεύει κάποιο αντικείμενο (όπως για παράδειγμα όταν ο Κodu δει από πάνω του ένα αερόπλοιο να εκτινάξειι ένα μήλο προς τα πάνω (up)).


[tip: Η δύναμη Κλωτσιάς και ο Ρυθμός κλωτσιάς είναι δύο ιδιότητες που επηρεάζουν την λειτουργία της ενέργειας Εκτινάζω (Launch).]

[Προσδιοριστικό Mία φορά (once): Το προσδιοριστικό αυτό όπως μπορεί να έχετε παρατηρήσει μέχρι τώρα μπορεί να επιλεχθεί με οποιαδήποτε ενέργεια. Για να συμβαίνει αυτό θα πρέπει να υπάρχει κάποιος σοβαρός λόγος. Δεν συμφωνείτε; Ας μην ξεχνάμε ότι όταν προγραμματίζουμε έναν αισθητήρα εκείνος ελέγχει συνέχεια αν συμβαίνει το γεγονός που έχουμε προγραμματίσει. Στην περίπτωση που το γεγονός συμβεί τότε ο Kodu θα εκτελεί την ενέργεια που έχουμε προγραμματίσει για όση χρονική διάρκεια συμβαίνει. Σκεφτείτε την εξής συμπεριφορά ΌΤΑΝ [στο πληκτρολόγιο][πατηθεί το πλήκτρο κενό] ΤΟΤΕ[εκτόξευε][Σφαιρίδια]. Για όσο χρονικό διάστημα πατάμε το πλήκτρο κενό, ο Κodu θα εκτοξεύει Σφαιρίδια. Στην περίπτωση που προσθέσουμε και το προσδιοριστικό μία φορά (once) τότε για όσο χρονικό διάστημα κι αν κρατήσουμε πατημένο το πλήκτρο τότε ο Kodu θα εκτοξευσεί μόνο ένα Σφαιρίδιο. Προσοχή όμως! Αυτό δεν σημαίνει ότι θα είναι και η μοναδική φορά. Αν ξαναπατήσουμε το πλήκτρο κενό τότε ο Kodu θα εκτοξευσεί και πάλι ένα Σφαιρίδιο.]

6.4.4 Ενέργεια Αρπάζω (Grab)grab.png
Η ενέργεια Αρπάζω (Grab) επιτρέπει στα αντικείμενα να κρατήσουν ένα αντικείμενο. Η ενέργεια αυτή ανήκει στην "οικογένεια" ενεργειών Kρατάω (Holding). Έτσι λοιπόν ο Kodu μπορεί να αρπάξει ένα Nόμισμα για να το δώσει σε ένα Περισκόπιο έτσι ώστε να τον αφήσει να περάσει μία γέφυρα ή ένας κακός Μηχανάκιας να αρπάξει την φίλη του Κodu όταν την δει για να την απαγάγει. Ένα παράδειγμα εντολής με χρήση της ενέργειας:
k06_grabProtasi.PNG
Τι είχε ο προγραμματιστής στο μυαλό του:
ΌΤΑΝ [ακούω][τον Κodu] ΤΟΤΕ[άρπαξε][τον Κodu]

Ρήματα συμπεριφορών που θα πρέπει να μας φέρνουν στο μυαλό την ενέργεια:
Αρπάζω, αιχμαλωτίζω, κρατάω, πιάνω.


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


Η συμπεριφορά του Kodu δεν χρειάζεται να αλλάξει. Συνεπώς δεν χρειάζεται να προγραμματίσουμε τον Κodu εκ νέου. Θα πρέπει όμως να προγραμματίσουμε τον Μηχανάκια έτσι ώστε να συμπεριφέρεται σαν πραγματικός τερματοφύλακας. Ο Μηχανάκιας θα πρέπει με κάποιο τρόπο να αντιλαμβάνεται την Μπάλα που εκτινάζει ο Κodu προς την εστία έτσι ώστε να κατευθυνθεί προς αυτή και να την πιάσει. Άρα με όσα έχουμε πει μέχρι τώρα πρέπει να τον προγραμματίσουμε είτε με τον αισθητήρα Βλέπω (See) ή με τον αισθητήρα Aκούω (Hear). Συνεπώς επιλέγουμε τον αισθητήρα Bλέπω (See) με προσδιοριστικό την Mπάλα. Όταν αντιληφθεί την Mπάλα θα πρέπει ο Μηχανάκιας να κινηθεί προς το μέρος της. Θα πρέπει ωστόσο να προσθέσετε κάποια επιπλέον προσδιοριστικά στον αισθητήρα αυτόν. Αν προγραμματίσετε τον αισθητήρα αυτό μόνο για να αντιλαμβάνεται μία Μπάλα, τότε όταν θα τρέξουμε το παιχνίδι ο Μηχανάκιας θα κατευθυνθεί προς αυτή οπουδήποτε κι αν βρίσκεται. Η συμπεριφορά αυτή δεν είναι σωστή. Θα πρέπει να προγραμματίσετε τον αισθητήρα έτσι ώστε ο Μηχανάκιας να αντιλαμβάνεται την Μπάλα μόνο όταν κινείται και είναι κοντά σε αυτόν. Αυτή είναι η πρώτη συμπεριφορά με την οποία θα πρέπει να προγραμματίσουμε τον Μηχανάκια.
Όταν πλέον ο Μηχανάκιας θα έχει φτάσει στην Μπάλα θα πρέπει με κάποιον τρόπο να την αποκρούσει. Επομένως θα πρέπει πρώτα να αισθανθεί ότι έχει έρθει σε επαφή με την Μπάλα και στην συνέχεια να την κρατήσει προκειμένου να μην μπει γκολ. Για να δούμε λοιπόν πως μπορούμε να προγραμματίσουμε την παραπάνω συμπεριφορά. Το γεγονός ότι ο Μηχανάκιας έχει αγγίξει την Μπάλα μπορεί να το αντιληφθεί μέσω του αισθητήρα Πέφτω Πάνω (Βump) με προσδιοριστικό την Μπάλα. Εφόσον επιθυμούμε να κραταει την Μπάλα όταν την αγγίξει θα πρέπει να χρησιμοποιήσουμε την ενέργεια Αρπάζω (Grab) με προσδιοριστικό το συγκεκριμένο (it) το οποίο αντιστοιχεί στο προσδιοριστικό αντικείμενο του αισθητήρα Πέφτω Πάνω (Βump). Συνεπώς για την συμπεριφορά του Μηχανάκια δημιουργούμε τις εξής εντολές:
ΌΤΑΝ[δω][Μπάλα][που κινείται][κοντά μου] ΤΟΤΕ[κινούμαι][προς αυτή]
ΌΤΑΝ[πέσω πάνω σε][Μπάλα] ΤΟΤΕ[αρπάζω][την μπάλα]
k06_grabCycleEntoles.PNG



Αποθηκεύστε τις αλλαγές και τρέξτε το παιχνίδι.
k06_grabCycleFinal.PNG

Η ενέργεια αυτή μπορεί να συνδυαστεί μόνο με ένα προσδιοριστικό και αυτό είναι το συγκεκριμένο (it). Ωστόσο μπορούμε να μην χρησιμοποιήσουμε κάποιο προσδιοριστικό στην ενέργεια Αρπάζω (Grab). Για παράδειγμα θα μπορούσε ο Kodu να αρπάζει οποιοδήποτε αντικείμενο έριχνε καταπάνω του ένα Kανόνι.



6.5 Ο επεξεργαστής εντολών(editor)
Η συνεχής ενασχόλησή με τον προγραμματισμό, μας οδηγεί στην ανάπτυξη των προγραμματιστικών ικανοτήτων μας. Έτσι θα είμαστε σε θέση να γράφουμε όλο και πιο σύνθετα προγράμματα. Αυτό σημαίνει ότι θα ξοδεύουμε περισσότερη ώρα στον επεξεργαστή εντολών προκειμένου να τα υλοποιήσουμε.
Έτσι λοιπόν, προκειμένου οι σχεδιαστές του Kodu να κάνουν την προγραμματιστική μας εμπειρία πιο εύκολη έχουν προσθέσει στον επεξεργαστή εντολών κάποιες λειτουργίες. Ας ρίξουμε λοιπόν μια προσεκτική ματιά στον επεξεργαστή εντολών.
Φορτώστε το παιχνίδι Shooting Fish v.3. Ο κόσμος του παιχνιδιού αποτελείται από τον Kodu και έξι Χελιδονόψαρα διαφορετικού χρώματος το καθένα. Σκοπός του παιχνιδιού είναι ο Kodu, τον οποίο χειρίζεται ο παίκτης από το πληκτρολόγιο, να σκοτώσει όλα τα χελιδονόψαρα που υπάρχουν εκτοξεύοντας πυραύλους. Ο κόσμος του παιχνιδιού όπως περιγράφτηκε φαίνεται στην ακόλουθη εικόνα.
K06_shootingFish.PNG
Τα αντικείμενα του παιχνιδιού είναι ήδη προγραμματισμένα έτσι ώστε να εμφανίζουν τις εξής συμπεριφορές:
Χελιδονόψαρα:
ΌΤΑΝ[]ΤΟΤΕ[κινήσου][στο μονοπάτι]
ΌΤΑΝ[δεις][χελιδονόψαρο]ΤΟΤΕ[κινήσου][μακρυά του]
k06_shootingFishFlyingFish.png
Kodu:
ΌΤΑΝ [στο πληκτρολόγιο][πατηθεί το πλήκτρο αριστερά]ΤΟΤΕ[στρίψε ][αριστερά]
ΌΤΑΝ[στο πληκτρολόγιο][πατηθεί το πλήκτρο κενό]ΤΟΤΕ[εκτόξευε][πυραύλους][τυχαίου χρώματος]
k06_shootingFishKoduFirstMovementPicture.png

Ας δούμε λοιπόν ποιες λειτουργίες μας προσφέρει ο επεξεργαστής εντολών.

  • Αντιγραφή Γραμμής (copy row) και Επικόλληση Γραμμής (paste row)
Η λειτουργία αυτή μας επιτρέπει να αντιγράψουμε γραμμές εντολών και να τις προσθέσουμε τόσο στο αντικείμενο από το οποίο τις πήραμε (π.χ. αν ένα αντικείμενο έχει παρόμοιες συμπεριφορές), όσο και σε κάποιο άλλον αντικείμενο.
Όπως μπορεί να έχετε παρατηρήσει ήδη, ο Kodu μπορεί να στρίψει μόνο αριστερά. Ας τον προγραμματίσουμε να μπορεί να στρίψει και δεξιά. Δεν χρειάζεται να συντάξουμε από την αρχή ολόκληρη την εντολή. Μπορούμε να την αντιγράψουμε και να αλλάξουμε μόνο τα προσδιοριστικά που είναι διαφορετικά.


1. Επιλέγουμε την γραμμή εντολής που επιθυμούμε να αντιγράψουμε πατώτας το αριστερό κουμπι του ποντικιού μας στον αριθμό που βρίσκεται στην αρχή της. Καταλαβαίνουμε ότι έχουμε επιλέξει την γραμμή από τα βέλη με έντονο γκρι που εμφανίζονται.
k06_chooseRow.png

2. Πατάμε το δεξί κουμπί του ποντικιού και επιλέγουμε αντιγραφή γραμμής (copy row)
06_copy1.png

3. Κάνουμε αριστερό κλίκ στον αριθμό μιας κένης γραμμής προκειμένου να την επιλέξουμε.
k06_copy2.png

4. Πατάμε το δεξί πλήκτρο του ποντικιού και επιλέγουμε την επικόλληση γραμμής (paste row)
k06_copy3.png

5. Στον επεξεργαστή εντολών εμφανίζεται ένα αντίγραφο της γραμμής.
k06_copy4.png


Το μόνο που μένει τώρα είναι να αλλάξουμε το προσδιοριστικό του αισθητήρα και της ενέργειας από αριστερά (left) σε δεξιά (right).
k06_copy5.png


  • Αποκοπή (cut) και Επικόλληση (paste)
Η λειτουργία της αποκοπής γραμμής (cut row) μπορεί να μας φανεί πολύ χρήσιμη εαν θέλουμε να μετακινήσουμε μία εντολή από ένα αντικείμενο σε ένα άλλο (π.χ. αν έχουμε μπερδευτεί και προγραμματίζουμε άλλο αντικείμενο από αυτό που θέλουμε). Φανταστείτε να είχαμε μπερδευτεί και να είχαμε προσθέσει την εξής συμπεριφορά στον Kodu και όχι στο Χελιδονόψαρο:
k06_cut1.png

Με την αποκοπή γραμμής θα μπορούσαμε να την μεταφέρουμε από τον Kodu στο Χελιδονόψαρο με την εξής απλή διαδικασία:
1. Επιλέγουμε την γραμμή εντολής που επιθυμούμε να αποκόψουμε, πατώτας το αριστερό κουμπί του ποντικιού μας στον αριθμό που βρίσκεται στην αρχή της. Καταλαβαίνουμε ότι έχουμε επιλέξει την γραμμή από τα βέλη με έντονο γκρι που εμφανίζονται.
k06_cut2.png

2. Πατάμε το δεξί κουμπί του ποντικιού μας και επιλέγουμε την αποκοπή γραμμής (cut row).
k06_cut3.png

3. Παρατηρούμε ότι η γραμμή εξαφανίζεται
k06_cut4.png


4. Βγαίνουμε από τον επεξεργαστή εντολών του Kodu πατώντας το πλήκτρο escape και ανοίγουμε τον επεξεργαστή εντολών του χελιδονόψαρου.
k06_cut4.png

5. Κάνουμε αριστερό κλίκ στον αριθμό μιας κενής γραμμής προκειμένου να την επιλέξουμε.
k06_cut6.png

6. Πατάμε το δεξί πλήκτρο του ποντικιού και επιλέγουμε την επικόλληση γραμμής (paste row)
k06_cut7.png

7. Η εντολή που αποκόψαμε, επικολήθηκε με επιτυχία.
k06_cut8.png


  • Μετακίνηση Γραμμών Εντολών
Χρησιμοποιούμε την μετακίνηση γραμμών για να αλλάξουμε την σειρά των εντολών είτε για την καλαισθησία του προγράμματος ή για να αλλάξουμε την προταιρεότητα των συμπεριφορών που έχουμε προγραμματίσει. Ας μετακινήσουμε λοιπόν την τρίτη γραμμή εντολής και ας την τοποθετήσουμε κάτω από την πρώτη.
1. Επιλέγουμε την γραμμή που επιθυμούμε να μετακινήσουμε είτε πατώντας το πλήκτρο enter, ή κρατώντας πατημένο το αριστερό κουμπί του ποντικιού. Παρατηρούμε ότι στον αριθμό μπροστά από την γραμμή εμφανίζονται τα χαρακτηριστικά γκρι βέλη, όπως και το γεγονός ότι η γραμμή βρίσκεται πλέον πιο δεξιά από ότι συνήθως.
k06_moveRow1.png



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



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


  • Βοήθεια
Ο επεγερξαστής εντολών είναι σχεδιασμένος έτσι ώστε να μας βοηθάει να συντάξουμε σωστά τις συμπεριφορές των αντικειμένων. Ωστόσο μερικές φορές κατά την διάρκεια που προγραμματίζουμε ένα αντικείμενο μπορεί να ξεχάσουμε τι σημασία μίας εντολής. Σίγουρα να ανατρέξετε σε αυτό το βιβλίο θα ήταν ένας τρόπος για να λύσετε την απορία σας αλλά δεν θα ήταν και ο πιο γρήγορος. Σωστά; Αρκεί λοιπόν να αφήσετε τον κέρσορα του ποντικιού σας πάνω στην εντολή που επιθυμείτε και θα εμφανιστεί μία γκρι φούσκα που θα περιγράφει τι σημασία της εντολής.
k06_moveRow4.png
Αν πάλι δεν είστε σίγουροι ότι έχετε καταλάβει ακριβώς πως συντάσσετε μια εντολή και ποια είναι η λειτουργία της ή απλά έχετε στερέψει από έμπνευση αρκεί να πατήσετε το πλήκτρο Υ στο πληκτρολόγιό σας. Αμέσως θα ξεπροβάλλει μπροστά σας μία σειρά από παραδείγματα με χρήση της εντολής που έχετε επιλέξει.
k06_moveRow5.png


Περίληψη

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



Ερωτήσεις
1) Στο παιχνίδι εκτέλεσης πέναλντι που δημιουργήσατε στην παράγραφο 6.4 μπορείτε να εντοπίσετε ποιες ιδιότητες επηρεάζουν την συμπεριφορά του Μηχανάκια – τερματοφύλακα;

2)Μπορείτε να αναφέρετε τους λόγους για τους οποίους οι παρακάτω συμπεριφορές δεν είναι ίδιες;
k06_erotisi2.png


3)
k06_erotisi3.png
Θα μπορούσατε να αλλάξετε την παραπάνω συμπεριφορά έτσι ώστε το αντικείμενο που την εμφανίζει όταν πέσει πάνω στην χελώνα από τα δεξιά τότε να εξαφανιστεί αυτό;


4) Μπορείτε να καταλάβετε αν οι παρακάτω συμπεριφορές είναι ίδιες;
k06_erotisi4.png


5) Στον κόσμο ενός παιχνιδιού υπάρχουν ο Kodu και ένας Μηχανάκιας. Ποιά από τις δύο συμπεριφορές θα εκτελέσει ο Kodu;
k06_erotisi5.png



Δραστηριότητες

Δραστηριότητα 1η
Δημιουργία Παιχνιδιού Friend Rescue
Δημιουργείστε ένα κόσμο όπως φαίνεται στην παρακάτω εικόνα.
K06_FriendRescueWorld.PNG
Εισάγεται στον κόσμο τα εξής αντικείμενα:
  • τον μπλε Kodu τον οποίο χειρίζεται ο παίκτης
  • ένα ροζ Kodu που είναι η φίλη του Kodu
  • μία άσπρη Χελώνα
  • τρία κόκκινα Δέντρα
  • Ένα κάστρο
  • πέντε κόκκινα Μήλα διαφορετικού μεγέθους
  • τρεις Πέτρες διαφορετικού μεγέθους

Σκοπός του παιχνιδιού είναι ο Kodu, τον οποίο χειρίζεται ο παίκτης από το πληκτρολόγιο να καταστρέψει την χελώνα εκτοξεύοντας πυραύλους προκειμένου να σώσει την φίλη του. Η χελώνα όταν αντιλαμβάνεται τον ήχο που κάνει ο Kodu τον ακολουθεί πολύ αργά και όταν τον χτυπήσει τον εκτινάσει μακρυά. Όταν η χελώνα σκοτωθεί τότε η ροζ Kodu πετάει μια καρδιά στον Kodu, την οποία και πρέπει να ακουμπήσει ο Kodu για να τερματιστεί με επιτυχία το παιχνίδι. Προκειμένου να κάνετε το παιχνίδι να φαίνεται ρεαλιστικό προγραμματείστε τα μήλα και της πέτρες έτσι ώστε όταν χτυπηθούν από κάποιο πύραυλο να εξαφανιστούν από τον κόσμο. Τα Δέντρα και το Κάστρο αποτελούν στοιχεία του περιβάλλοντος και δεν παρουσιάζουν κάποια συμπεριφορά. Ωστόσο δεν θα πρέπει να καταστρέφονται από τους πυραύλους του Kodu σε περίπτωση που χτυπηθούν από αυτούς.


Δραστηριότητα 2η
Δημιουργία παιχνιδιού Υποβρύχια Περιπέτεια!
k06_ypobrixiaPeripeteia.PNG

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





Συγκεντρωτικοί Πίνακες Ιδιοτήτων Αντικειμένων
Ιδιότητες Κίνησης

K06_forwardSpeedMultiplier.PNG
Ταχύτητα κίνησης: ρυθμίζει την ταχύτητα με την οποία κινείται ένα αντικείμενο
K06_forwardAccelarationMultiplier.PNG
Επιτάχυνση κίνησης: ελέγχει τον ρυθμό μεταβολής της ταχύτητα κίνησης
K06_turningSpeedMultiplier.PNG
Ταχύτητα Περιστροφής: ταχύτητα με την οποία περιστρέφεται ένα αντικείμενο
K06_turningAccelarationMultiplier.PNG
Επιτάχυνση περιστροφής: ρυθμός μεταβολής της ταχύτητας περιστροφής
K06_immobile.PNG
Ακινησία: ελέγχει αν το αντικείμενο μπορεί να κινηθεί ή όχι. Εαν είναι ενεργοποιημένη το αντικείμενο είναι ακίνητο αλλά μπορεί να περιστραφεί.


Ιδιότητες Αλληλεπίδρασης Με Το Περιβάλλον

K06_Friction.PNG
Τριβή: ελέγχει κατά πόσο ένα αντικείμενο γλιστράει πάνω στο έδαφος , στους τοίχους ή σε άλλα αντικείμενα
K06_Ghost.PNG
Φάντασμα: ελέγχει εαν το αντικείμενο μπορούν να το δουν,να το ακούσουν ή να πέσουν πάνω του άλλα αντικείμενα. Όταν είναι ενεργοποιημένη τότε το αντικείμενο μπορεί να δει και να ακούσει άλλα αντικείμενα αλλά δεν μπορεί να πέσει πάνω τους
K06_Bounciness.PNG
Αναπήδηση: καθορίζει κατά πόσο ένα αντικείμενο αναπηδά όταν συγκρουστεί με κάποιο άλλο αντικείμενο, με ένα τοίχο ή μετά την προσγείωση από ένα άλμα.
K06_invisible.PNG
Αόρατος: καθορίζει το αν ένα αντικείμενο φαίνεται στην οθόνη. Τα άλλα αντικείμενα εξακολουθούν όμως να βλέπουν και να ακούν το αντικείμενο που έχει ενεργοποιημένη αυτή την ιδιότητα
K06_stayAboveWater.PNG
Επιπλέω: όταν είναι ενεργοποιημένη αυτή η ιδιότητα τότε το αντικείμενο επιπλέει στο νερό,διαφορετικά βουλιάζει!
K06_Hearing.PNG
Ακοή: ελέγχει την απόσταση από την οποία ένα αντικείμενο μπορεί να ακούσει τα άλλα αντικείμενα. Δεν αλλάζει την ένταση του ήχου που παράγει το ίδιο το αντικείμενο
K06_closeByRange.PNG
Κοντά: Την ρυθμίζουμε όταν έχουμε προγραμματίσει τα αντικείμενα να διαθέτουν τους αισθητήρες Ακούω (Hear) και Bλέπω (See) με το προσδιοριστικό κοντά (close by). Αντιπροσωπεύει το εύρος του προσδιοριστικού. Οι μονάδες είναι σε μέτρα. Ένα πλακάκι (tile) εδάφους(ground) είναι μισό μέτρο.
K06_farAwayRange.PNG
Μακρυά: Την ρυθμίζουμε όταν έχουμε προγραμματίσει τα αντικείμενα να διαθέτουν τους αισθητήρες Aκούω (Hear) και Bλέπω (See) με το προσδιοριστικό μακρυά (far away). Αντιπροσωπεύει το εύρος του προσδιοριστικού. Οι μονάδες είναι σε μέτρα. Ένα πλακάκι (tile)
K06_DebugLinesToBarriers.PNG
Γραμμές Αποσφαλμάτωσης Εμποδίων: όταν έχουμε προγραμματίσει ένα αντικείμενο να περιπλανάτε,να κάνει κύκλους, ή να απομακρύνεται από κάποιο άλλο αντικείμενο η ιδιότητα αυτή δείχει τυχόν εμπόδια που το εμποδίζουν.
K06_memoryLifeTime.PNG
Μνήμη : όταν ο Kodu δει ένα αντικείμενο, μπορεί να το "θυμάται" για λίγα δευτερόλεπτα.
Η ιδιότητα αυτή ρυθμίζει τον χρόνο μνήμης του Kodu.
K06_debugLinesOfSightAndSound.PNG
Γραμμές Αποσφαλμάτωσης όρασης και ήχου: όταν έχουμε προγραμματίσει τον Kodu να
διαθέτει τον αισθητήρα Bλέπω (See) , η ιδιότητα αυτή δείχνει ποιά αντικείμενα μπορεί ο Kodu
να δει ή να ακούσει.
K06_creatable.PNG
Κλώνος: κάθε αντικείμενο που έχει ενεργοποιημένη αυτή την ιδιότητα είναι ξεχωριστό για δυο λόγους.
1.εαν δημιουργήσουμε κλώνους από αυτό το αντικείμενο τότε οι κλώνοι διαθέτουν την ίδια συμπεριφορά με αυτό.
2.Μπορούμε να προγραμματίσουμε άλλα αντικείμενα να δημιουργούν το αντικείμενο αυτό.
Περισσότερα για τους κλώνους θα δείτε στο κεφάλαιο 9.
K06_Mute.PNG
Βουβός: ενεργοποιεί οποιοδήποτε ήχο παράγει ένα αντικείμενο. Σημειώστε ότι ακόμη και αν είναι
ενεργοποιημένη αυτή η ιδιότητα, τα άλλα αντικείμενα μπορούν να ακούσουν το αντικείμενο.
Ο παίκτης μόνο δεν το ακούει!




Ιδιότητες Μάχης

K06_blipDamage.PNG
Ζημιά που προκαλεί ένα Σφαιρίδιο:καθορίζει πόση απώλεια ενέργειας προκαλεί ένα Σφαιρίδιο όταν χτυπήσει ένα αντικείμενο.
K06_blipRange.PNG
Εύρος Κίνησης Σφαιριδίου: Καθορίζει την απόσταση που μπορεί να διανύσει ένα Σφαιρίδιο πρωτού εξαφανιστεί αν δεν χτυπήσει κάποιο αντικείμενο.
K06_blipReloadTime.PNG
Χρονικό διάστημα μεταξύ εκτοξεύσεων Σφαιριδίων:ρυθμίζει μετά από πόση ώρα μπορεί ο Kodu να ξαναρίξει ένα Σφαιρίδιο.
K06_blipsAtonce.PNG
Αριθμός Εκτοξευμένων Σφαιριδίων : ελέγχει πόσα Σφαιρίδια μπορούνε να ταξιδεύουν ταυτόχρονα στον αέρα, μέχρι ο Kodu να μπορεί να ξαναπυροβολήσει.
K06_BlipSpeed.PNG
Ταχύτητα Σφαιριδίου: καθορίζει την ταχύτητα του Σφαιριδίου που εκτοξεύει ένα αντικείμενο.
K06_missileRange.PNG
Εύρος Κίνησης Πυραυλου: Καθορίζει την απόσταση που μπορεί να διανύσει ένας πύραυλος πρωτού εξαφανιστεί αν δεν χτυπήσει κάποιο αντικείμενο.
K06_missilesAtOnce.PNG
Αριθμός Εκτοξευμένων Πυραύλων : ελέγχει πόσοι πύραυλοι μπορούνε να ταξιδεύουν ταυτόχρονα στον αέρα, μέχρι ο Kodu να μπορεί να ξαναπυροβολήσει.
K06_missileDamage.PNG
Ζημιά που προκαλεί ένας πύραυλος:καθορίζει πόση απώλεια ενέργειας προκαλεί ένας πύραυλος όταν χτυπήσει ένα αντικείμενο.
K06_missileSpeed.PNG
Ταχύτητα Πυραύλου: καθορίζει την ταχύτητα του πυραύλου που εκτοξεύει ένα αντικείμενο.
K06_missilereloadTime.PNG
Χρονικό διάστημα μεταξύ εκτοξεύσεων πυραύλων:ρυθμίζει μετά από πόση ώρα μπορεί ο Kodu να ξαναρίξει έναν πύραυλο.
K06_kickStrength.PNG
Δύναμη Κλωτσιάς: ελέγχει το πόσο δυνατά ένα αντικείμενο κλωτσάει κάποιο άλλο.
Όσο πιο δυνατή είναι η κλωτσιά τόσο πιο μακρυά εκτοξεύεται το αντικείμενο!
K06_kickRate.PNG
Ρυθμός Κλωτσιών: αφορά το χρονικό διάστημα που ένα αντικείμενο μπορεί να κλωτσίσει
και πάλι κάποιο άλλο!



Καλαισθητικές ιδιότητες

K06_sizeScale.PNG
Μέγεθος: όπως φανερώνει και το όνομα της ιδιότητας καθορίζει το μέγεθος ενός αντικειμένου.
K06_MissileSmoke.PNG
Εφέ Καπνού: αφορά το αν οι πύραυλοι αφήνουν ίχνος καπνού στο πέρασμά τους.
K06_shieldEffects.PNG
Εφέ Ασπίδας: ελέγχει αν θα εμφανίζεται η ασπίδα ενός αντικειμένου κάθε φορά που το αντικείμενο
χτυπάει κάπου(αντικείμενο,τοίχος) ή δέχεται μία βολή(πύραυλος,Σφαιρίδιο).
K06_glowSelflighting.PNG
Φωτεινότητα: ρυθμίζει την ένταση του φωτός που ένα αντικείμενο εκπέμπει!
K06_glowLightStrength.PNG
Ένταση Ενέργειας Λάμπω: επηρεάζει την ένταση της λάμψης που παράγει ένα αντικείμενο
όταν εκτελεί την ενέργεια Λάμπω (Glow).
K06_glowStrength.PNG
Εκπομπή Φωτός: προσδίδει σε ένα αντικείμενο την ικανότητα να ρίχνει φώς πάνω σε άλλα αντικείμενα
όταν εκέινο εκτελεί την ενέργεια Λάμπω (Glow). Όσο μεγαλύτερη τιμή έχει τόσο πιο έντονο είναι το φως.

Ιδιότητες Ζωής

K06_invulnerable.PNG
Άτρωτος: κάθε αντικείμενο που διαθέτει την ιδιότητα αυτή δεν μπορεί να καταστραφεί.
K06_maxHitPoints.PNG
Ενέργεια: η ιδιότητα αυτή καθορίζει τον αριθμό των χτυπημάτων (πύραυλοι,Σφαιρίδια)
που μπορεί να δεχτεί ένα αντικείμενο.
K06_showhitPoints.PNG
Εμφάνιση Ενέργειας: όταν είναι ενεργοποιημένη μία μικρή μπάρα εμφανίζεται πάνω από το αντικείμενο
που δείχνει την ενέργεια που του έχει απομείνει.