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


Ομάδα 11
Μανώλης Τσιτσιγιάννης
Ραπτοδήμος Στάθης




Δημιουργία Παιχνιδιού στο Kodu 1 Video
Δημιουργία Παιχνιδιού στο Kodu 2 Video
Δημιουργία Παιχνιδιού στο Kodu 3 Video
Δημιουργία Παιχνιδιού στο kodu 4 Video (20/3)
full game part 1
full game part 2
full game part 3
full game part 4
Sample Game 1 Video
Sample Game 2 Video (20/3)
Sample Game 3 Video (20/3) (τέλειο :P)
Sample Game 4 Video (20/3)
Sample Game 5 Video (20/3)
Sample Game 5 Video (20/3)
Sample Game 6 Video (20/3)
SOS -> στο Kodu αν ενεργοποιήσετε την επιλογή "Show Community on Main Menu" από το Configure Kodu Game Lab θα σας εμφανιστεί στο main menu του Kodu η επιλογή Community , αν την επιλέξετε θα δείτε ότι έχει ΠΑΡΑ ΠΟΛΛΑ έτοιμα παιχνίδια που μπορείτε να κατεβάσετε και από τα οποίανα πάρετε ιδέες! (29/3)




ΚΕΦΑΛΑΙΟ 11: Ώρα για παιχνίδι I

Στο κεφάλαιο αυτό θα περιέχονται 2 σύνθετα παιχνίδια στα οποία θα εφαρμόζονται όλα όσα έχουν μάθει τα παιδιά παραπάνω.

Καλείστε λοιπόν να παράξετε τα παιχνίδια αυτά !




GAME - Kodumania

Η διαδικασία το να προγραμματίσει και να δημιουργήσει κάποιος ένα παιχνίδι δεν αποτελεί και το πιο εύκολο πράγμα στον
κόσμο. Εξαρτάται, εν πολλοίς, και από το εργαλείο που θα χρησιμοποιήσει κανείς. Το Kodu Game Lab όπως έχετε ήδη
διαπιστώσει από τα προηγούμενα κεφάλαια (μμμ….ελπίζω πως ναι!) ενδείκνυται για τη δημιουργία ενός παιχνιδιού με ευχάριστο
και δημιουργικό τρόπο. Για να βγει ένα καλό αποτέλεσμα εκτός από τις γνώσεις, απαιτούνται θετική ενέργεια και αρκετή φαντασία.
Μην σας ακούγεται παράξενο αυτό. Όταν τα αποκτήσετε τότε θα σας φανεί πιο εύκολο και ενδιαφέρον το όλο εγχείρημα. Από
τη στιγμή που εφοδιαστείτε τα παραπάνω, τότε μόνο ασχοληθείτε με το υπόλοιπο μέρος του κεφαλαίου. xamogelo.png


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


Α) Περιγραφή του προβλήματος

Γενικά, στη δημιουργία ενός παιχνιδιού πρωταρχικός στόχος του προγραμματιστή πρέπει να είναι η περιγραφή του παιχνιδιού
ώστε να γνωρίζει εξ΄ αρχής το τι πρέπει να κάνει στη συνέχεια.
Σε αυτό το παιχνίδι που δημιουργήσαμε, για να φτάσουμε στο τέλος του θα πρέπει να περάσουμε από δύο επίπεδα (levels). Στο
πρώτο επίπεδο, ο ήρωάς μας-Kodu, μέσα από διάφορες δοκιμασίες που πρέπει να περάσει ανέπαφος, καταλήγει σε μία καλύβα
που με τη σειρά της οδηγεί τον ήρωά μας στο δεύτερο επίπεδο. Εκεί, έπειτα από έναν αγώνα δρόμου με 2 αντιπάλους, όπως
επίσης και με ορισμένες παγίδες τις οποίες θα συναντήσει ο ήρωάς μας, σε περίπτωση που καταταγεί πρώτος τότε θα είναι και
ο νικητής του παιχνιδιού. Έτσι θα εμφανιστεί το μήνυμα «WINNER».



Β) Γενική επίλυση προβλήματος

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

Κατ’ αρχήν σχεδιάζουμε τον κόσμο μας (world) βάζοντας αρκετή φαντασία έτσι ώστε να τραβήξουμε το ενδιαφέρον
των χρηστών. Είναι αρκετά σημαντικό ο κόσμος μας να είναι «ωραίος» γιατί το πρώτο πράγμα που φαίνεται σε ένα παιχνίδι
είναι ο κόσμος του. Δεν είναι πολύ εύκολο αλλά όχι και κάτι πολύπλοκο. Η φαντασία, προφανώς, παίζει σημαντικό ρόλο
στη δημιουργία του κόσμου μας. Γι ‘αυτό, εάν οι κόσμοι που θα δημιουργείτε, αισθητικά δεν σας αρέσουν, τότε και το
αποτέλεσμα της δουλειάς σας δεν θα είναι ικανοποιητικό.


Όσον αφορά τους χαρακτήρες και τα αντικείμενα του παιχνιδιού, αυτά τονίζονται παρακάτω.


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


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

1ο Επίπεδο:

Η πίστα χωρίζεται σε δύο μέρη: αριστερά του ποταμού και δεξιά από αυτόν. Ο Kodu ξεκινάει την περιπλάνησή του από
το δεξί μέρος της πίστας.

Ο ήρωας του παιχνιδιού είναι ο Kodu.
kodu.png
Αυτόν το χαρακτήρα θα χειρίζεται ο χρήστης χρησιμοποιώντας το πληκτρολόγιο
και το ποντίκι του. Ο Kodu έχει διάρκεια ζωής 20 μονάδες χρόνου, με συνέπεια όταν για κάποιο λόγο τις χάσει τότε θα
τερματίζεται το παιχνίδι και θα εμφανίζεται το μήνυμα «GAME OVER».

Καθώς ξεκινάει την περιπλάνησή του ο ήρωάς μας ,και προχωράει προς τα ενδότερα της πίστας, συναντάει 2 κανόνια
(cannons) λευκού χρώματος.
1.PNG
Αυτά έχουν ως στόχο να του αφαιρέσουν όσες περισσότερες μονάδες μπορούν από τη ζωή του πυροβολώντας
περιοδικά προς αυτόν. Οι ενέργειες που πρέπει να κάνει ο Kodu ώστε να αποφύγει τα κανόνια είναι ελιγμοί γύρω από αυτά.

Εξάλλου, για να μπορέσει ο ήρωάς μας να περάσει από την απέναντι πλευρά της πίστας, και συνεπώς πάνω από το
ποτάμι, θα πρέπει να διασχίσει την γέφυρα που υπάρχει. Είναι ο μόνος τρόπος να περάσει ο Kodu στην απέναντι πλευρά.
Αμέσως μετά την γέφυρα τον περιμένει μία δυσάρεστη έκπληξη. Είναι τοποθετημένα διαδοχικά 3 πιατάκια (saucers)
2.PNG
τα οποία κινούνται με γρήγορο ρυθμό κάθετα στην πορεία του ήρωά μας. Ο Kodu είναι υποχρεωμένος να περάσει από αυτά
με όσο το δυνατόν λιγότερες απώλειες. Όταν έρχονται σε επαφή τα πιατάκια με τον Kodu τότε του μειώνουν τη διάρκεια
ζωής του. Έτσι το μόνο που έχει να κάνει ο Kodu είναι να αποφεύγει να έρχεται σε επαφή με αυτά (αν και ο διάδρομος που
πρέπει να περάσει, και όπου βρίσκονται τα πιατάκια, είναι αρκετά στενός).

Μία άλλη δοκιμασία που πρέπει να βγάλει σε πέρας ο ήρωάς μας είναι η συλλογή 7 πράσινων μήλων που βρίσκονται σε
όλο το φάσμα της πίστας. Το μόνο που έχει να κάνει ο Kodu είναι να τα εντοπίσει και να τα φάει όλα. Όταν έρχεται σε επαφή
με αυτά, το σκορ που υπάρχει πάνω δεξιά στην οθόνη αυξάνεται κατά ένα. Άμα δεν μαζέψει και τα 7 πράσινα μήλα ο Kodu
τότε δεν θα μπορέσει να αλλάξει επίπεδο και ας μην έχει τελειώσει η διάρκεια ζωής του. Υπάρχουν, όμως, και 4 κόκκινα
(ΠΡΟΣΟΧΗ!) μήλα που άμα έρθει σε επαφή, τότε θα χάσει ένα μέρος από τη ζωή του. Γι’ αυτό, όταν βλέπει
κόκκινα μήλα καλό είναι να αλλάζει κατεύθυνση.

Τέλος, στην αριστερή πλευρά της πίστας υπάρχει μία καλύβα (hut)
3.PNG
η οποία αποτελεί και το τερματικό αντικείμενο του επιπέδου. Δηλαδή, εάν ο Kodu περνώντας τις δοκιμασίες δεν χάσει τη ζωή του και
φτάσει στην καλύβα, τότε σημαίνει ότι πέρασε επιτυχώς το πρώτο επίπεδο και έχει δικαίωμα μετάβασης στο δεύτερο επίπεδο.


2ο Επίπεδο:

Σε αυτό το επίπεδο ο ήρωάς μας έχει μετατραπεί σε έναν μηχανάκια (Cycle). Θα πρέπει να συναγωνιστεί σε έναν αγώνα
δρόμου 2 αντίπαλους Cycles και να τερματίσει πρώτος, έχοντας βέβαια να αντιμετωπίσει και ορισμένες δυσκολίες. Εάν τερματίσει
τελικά πρώτος θα εμφανιστεί το μήνυμα «WINNER». Όπως και στο πρώτο επίπεδο, τον ήρωά μας μπορείτε να τον χειρίζεστε με
το πληκτρολόγιο και το ποντίκι.

Τα αντικείμενα του δευτέρου επιπέδου και η χρησιμότητα τους είναι:

--> αστέρια (stars): όταν έρχονται σε επαφή τα Cycles με τα αστέρια τότε αυξάνουν ταχύτητα για λίγα δευτερόλεπτα

-->αρκετοί βράχοι (rocks): παρεμποδίζουν την πορεία των Cycles

-->σύννεφα (clouds): ρίχνουν κεραυνούς στους Cycles και τους αναγκάζουν να παγώσουν (freeze) για πολύ λίγα δευτερόλεπτα

-->κέρματα (coins): όποιος ακουμπάει ένα από κέρματα θα έχει την δυνατότητα να πυροβολεί τους υπόλοιπους για λίγα
δευτερόλεπτα ώστε να επιβραδύνει την κίνησή τους


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

Με αυτόν τον τρόπο ολοκληρώνεται επιτυχώς το παιχνίδι


Γ) Παρουσίαση κώδικα και αιτιολόγηση










GAME 2 - Mission Impossible









Update word files ( με το κόψιμο του αρχείου φύγανε τα italic)




Update το part2 όπου υπήρχε το πρόβλημα με την εικόνα.



Update το part2 με τις δραστηριότητες


Update το κύριο παιχνίδι(Κάποιες μικροαλλαγές σε settings αντικειμένων και όχι σε κώδικα)


Παιχνίδι(Η πρώτη δραστηριότητα)


Παιχνίδι(Η δεύτερη δραστηριότητα)


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


Α)Πρόβλημα


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


Ειδικότερα:


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

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



Βασικά χαρακτηριστικά πίστας - λαβύρινθου

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


Β)Αντικείμενα και συμπεριφορές

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

Αρχικά θα έχουμε τον βασικό μας ήρωα, τον Τομ όπως μας παρουσιάζεται στην παρακάτω εικόνα.
k11_Tom.png

Ο χρήστης θα μπορεί να τον χειρίζεται απο το πληκτρολόγιο και πιο συγκεκριμένα με τα βέλη και θα έχει αρχική ζωή τα 500. Επίσης θα μπορεί να πυροβολεί με το κουμπί space από το πληκτρολόγιο. Κάθε φορά που πυροβολεί έναν αντίπαλο θα αυξάνεται ο κόκκινος μετρητής. Όταν χτυπήσει μια καρδιά θα κερδίζει ενέργεια 20 πόντους. Όταν χτυπήσει ένα νόμισμα ανεβάζει κατά ένα το κίτρινο μετρητή του. Αν μηδενιστεί η ενέργειά του χάνει. Επιπλέον αν χτυπήσει το αστέρι το παιχνίδι τερματίζει επιτυχώς.


Οι φίλοι του τους οποίους θα πρέπει να σώσει.
k11_friendsTom.png

Οι αντίπαλοί του θα είναι:
  • Κανόνια ( cannon )
k11_cannon.png
Τα κανόνια μόλις μπορέσουν να δούνε τον Τομ ( έχουνε δηλαδή οπτική επαφή με τον Τομ ) θα τον πυροβολούνε και θα του αφαιρούν από την ενεργειά του 5 πόντους. Όταν τελειώσει η ζωή τους θα καταστρέφονται.
  • Περισκόπια ( stick )
k11_stick.png
Τα περισκόπια θα είναι κρυμμένα στο έδαφος. Όταν πλησιάσει ο Τομ ανοίγουν και πυροβολάνε στριφογυρίζοντας. Όταν απομακρυνθεί ο Τομ, ξανακρύβονται. Και αυτά καταστρέφονται όταν τελειώσει η ζωή τους.
  • κουμπί πίεσης ( push pad ). Προσοχή όμως γιατί καταστρέφοντας ένα push pad θα δημιουργείται ένα κανόνι. Έτσι ο Τομ θα έχει έναν ακόμα μπελά να αντιμετωπίσει.
k11_pushpad.png

Αρχικά το κουμπί πίεσης θα αρχίζει να πυροβολεί τον Τομ όταν έχει οπτική επαφή μαζί του. Αν τον πετύχει αφαιρεί από την ζωή του 5 πόντους. Όταν το κουμπί πίεσης χάσει όλη την δικιά του ενέργεια θα εμφανιστεί ένα μήνυμα στην οθόνη ( SUPRISE!! ) και τον χρήστη τον περιμένει μια δυσάρεστη έκπληξη που θα τον δυσκολέψει ακόμα περισσότερο. Στο ίδιο ακριβώς σημείο "γεννιέται" ένα ακόμη κουμπί πίεσης, σαν μία άλλη λερναία ύδρα, που θα θελήσει να ολοκληρώσει το έργο του προηγούμενου, δηλαδή την εξολόθρευση του Τομ.
  • τα νομίσματα
k11_coin.png
Τα νομίσματα θα αποκτούνται απλά από τον χρήστη χωρίς να εκτελούν κάποια ενέργεια. Με την απόκτησή του ο κίτρινος μετρητής αυξάνεται. Τι πρεπει να προσέξουμε όμως; Τι θα συμβεί αν κοντά στο σημείο που έχει τοποθετηθεί ένα νόμισμα γίνεται μία μάχη του Τομ και ενός αντιπάλου; Οι σφαίρες μπορεί να χτυπήσουν το νόμισμα με αποτέλεσμα να το καταστρέψουν και να το εξαφανίσουν. Το νόμισμα όμως θα πρέπει να να εξαφανιστεί μόνο όταν το χτυπήσει ( bump ) ο χρήστης.
  • οι καρδιές
k11_heart.png
Και οι καρδιές θα αποκτούνται από τον χρήστη. Με την απόκτησή τους ο Τομ θα μπορεί να αυξάνει την μπάρα ζωή του.
Γ)Δημιουργώντας τον κόσμο
Αρχικά θα πρέπει να σκεφτούμε πως θα θέλαμε να είναι η πίστα μας. Μπορούμε να σκεφτούμε όποια μορφή λαβύρινθου θέλουμε, από μία σχετικά απλή μέχρι μία πιο σύνθετη. Έπειτα δημιουργούμε τα περιγράμματα των διαδρόμων μέσα από τα οποία θα κινηθεί ο παίκτης. Στην υλοποίησή μας δημιουργήσαμε περιγράμματα από λόφους προσθέτοντας πρώτα έδαφος (τύποι εδάφους 20 και 78) και μετά με την επιλογή Δημιουργήστε Λόφους ή Κοιλάδες ανυψώνουμε το έδαφος εώς ότου γίνουν αρκετά ψηλοί. Μετά (αν και εσείς το επιθυμείτε στην υλοποίησή σας), με την επιλογή Λείανση Εδάφους κάναμε τους λόφους πιο λείους. Για την κατασκευή των δρόμων όπου θα κινηθεί ο Μηχανάκιας χρησιμοποιήσαμε έδαφος (τύπος 25) και στην άκρη των δρόμων βάλαμε μία γραμμή έτσι ώστε να είναι πιο ευδιάκριτοι καθώς και από αισθητικής πλευράς πιο ωραίοι. Είναι βέβαια στην ευχέρεια του κάθε χρήστη να πειραματιστεί σε διάφορους τύπους εδάφους προσθέτοντας έτσι την δικιά του πινελιά! Ακόμα δηλώσαμε την αρχή από όπου ξεκινάει ο χρήστης με μία διαφορετική επιλογή εδάφους (τύπος 29) και το σημείο όπου βρίσκονται οι φίλοι του με ένα άλλο τύπο εδάφους (τύπος 32). Τέλος κάναμε το ουρανό του κόσμου μας μαύρο προσθέτοντας φώτα δημιουργώντας μία πιο ενδιαφέρουσα, από αισθητικής πλευράς, ατμόσφαιρα! Πάμε να δολυμε σε εικόνες τα όσα περιγράψαμε.
Οι λόφοι:
k11_hills.png
Οι δρόμοι:
k11_roads.png
Η έναρξη (έισοδος):
k11_start.png
Σημείο που βρίσκονται οι φίλοι του Μηχανάκια (έξοδος):
k11_end.png
Γενική άποψη της πίστας:
k11_generalview.png
Δ)Συμπεριφορές αντικειμένων και ανάλυση εντολών

  • Τομ, συμπεριφορά και ανάλυση εντολών

Από την αρχική περιγραφή του προβλήματος μπορούμε να οργανώσουμε τις ενέργειες και τις συμπεριφορές ως εξής:
  • Σελίδα 1: βασικές ενέργειες και μεταβάσεις προς άλλες σελίδες
  • Σελίδα 2: αύξηση της μπάρας ζωής με το φάγωμα μιας καρδιάς
  • Σελίδα 3: απόκτηση πυραύλου-ων για τηναντιμετώπιση των αντιπάλων

Βρισκόμαστε στην πρώτη σελίδα όπου ο ηρωάς μας έχει μία συγκεκριμένη συμπεριφορά. Καταρχήν θα πρέπει να δώσουμε την δυνατότητα στον ήρωά μας να κινείται και να πυροβολεί. Θα θέλαμε να κινείται με τα βελάκια και μάλιστα γρήγορα. Άρα με την πρώτη εντολή επιλέγουμε από το πληκτρολόγιο τα βελάκια και για να κινηθεί γρήγορα προσθέτουμε τρεις φορές την επιλογή γρήγορα ( quickly ). Και πως θα πυροβολεί ο Τομ; Έστω ότι θέλουμε να πυροβολεί με το πλήκτρο space από το πληκτρολόγιο και έστω ότι επιλέγουμε να πυροβολεί σφαιρίδια ( blip ). Έτσι μπορούμε να σκεφτούμε ως εξής: OΤΑΝ ( WHEN ) πατήσεις πλήκτρο space TOTE ( DO- ΚΑΝΕ ) πυροβόλησε σφαιρίδιο.Τα παραπάνω λοιπόν μπορούν να γίνουν με τις εξής εντολές:
k11_page1.1.png

Σε αυτό το σημείο θα υλοποιήσουμε την δυνατότητα του χρήστη να τρώει καρδιές για να κερδίζει πόντους στην ζωή του. Επίσης, με το φάγωμα μιας καρδιάς ο Τομ θα γίνεται κόκκινος και μετά από δύο δευτερόλεπτα θα σβήνει. Αυτό θα είναι μία ένδειξη ότι ο παίκτης πήρε την καρδιά. Αρχικά θα πρέπει να σκεφτούμε πως ο ο παίκτης θα τρώει την καρδιά. Θα τρώει την καρδιά μόλις την ακουμπήσει. Άρα μπορούμε να πούμε: ΟΤΑΝ ( WHEN ) χτυπήσεις καρδιά ΤΟΤΕ ( DO ) φάε αυτή, όπως φαίνεται και στην εντολή 3. Στη συνέχεια θέλουμε αφού έχει φάει την καρδιά να γίνεται κόκκινος, να γεμίζει την ζωή του με 20 πόντους και μετά από 2 δευτερόλεπτα να σβήνει. Προγραμματιστικά πως μπορούμε να γράψουμε αυτές τις εντολές; Αρχικά θέλουμε να γίνεται κόκκινος και να παραμένει μέχρι να τον δώσουμε εμείς εντολή να σβήσει. Δηλαδή, ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) άναψε κόκκινο. Με αυτή την πρόταση ο Τομ γίνεται κόκκινος και παραμένει έτσι μέχρι εμείς να του πούμε να σβήσει. Αυτό υλοποιείται στην εντολή 4. Στη συνέχεια θέλουμε πάντα να γεμίζει - γιατρεύει την ζωή του με έναν οποιονδήποτε αριθμό πόντων. Μπορούμε δηλαδή να πούμε ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) γιάτρεψέ με 20 πόντους. Τέλος, μετά από 2 δευτερόλεπτα θέλουμε ο Τομ να σβήσει. Η έκφραση ΟΤΑΝ ( WHEN ) ρολόι φτάσει 2 δευτερόλεπτα ΤΟΤΕ ( DO ) σβήσε ικανοποιεί την προηγούμενη πρόταση. Αυτές οι ενέργειες θα συμβαίνουν παράλληλα και με την προϋπόθεση ότι ο παίκτης έχει φάει την καρδιά. Για αυτό το λόγο θα μπούνε πιο μέσα από την εντολή 3. Δηλώνουμε έτσι ότι πρέπει να ικανοποιηθεί η εντολή 3 πρώτα για να εκτελεστούν και αυτές. Επίσης για να εκτελεστούν παράλληλα θα πρέπει να τοποθετηθούν η μία κάτω από την άλλη. Στο παρακάτω σχήμα φαίνεται συγκεντρωτικά η ακολουθία των εντολών. Είναι όμως σωστή αυτή η ακολουθία; Τι πιστεύετε θα γίνει εάν τις εκτελέσουμε με αυτό τον τρόπο; Ο Τομ θα έμενε κόκκινος όλη την ώρα χωρίς να σβήσει. Γιατί; Όπως αναφέραμε οι εντολές που τοποθετούνται η μία κάτω από την άλλη εκτελούνται παράλληλα. Δηλαδή στην περίπτωσή μας οι εντολές 4, 5, 6 εκτελούνται παράλληλα. Άρα η εντολή 6 δεν θα εκτελεστεί ουσιαστικά ποτέ αφού ταυτόχρονα εκτελείται και η 4 που κρατά τον Τομ αναμμένο κόκκινο.
k11_pag1.2fault.png

Ας εξετάσουμε τώρα την υλοποίηση αυτού του προβλήματος σκεπτόμενοι ως εξής: στην πρώτη σελίδα ο παίκτης αφού ακουμπήσει και φάει την καρδιά αποκτά μία συμπεριφορά, γίνεται κόκκινος. Άρα ισχύει όπως και πριν ΟΤΑΝ ( WHEN ) χτυπήσεις καρδιά ΤΟΤΕ ( DO ) φάε αυτή. Και αφού την φάει θα ισχύει ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) άναψε κόκκινο. Έτσι όπως βλέπουμε στη παρακάτω εικόνα οι εντολές 3 και 4 παραμένουν ίδιες, με την εντολή 4 τοποθετημένη, όπως και πριν, πιο μέσα από την εντολή 3. Τώρα μπορούμε να σκεφτούμε το εξής: το μπόνους στην ζωή καθώς και το σβήσιμο όταν ο Τομ γίνεται κόκκινος δεν είναι μία αλλαγή συμπεριφοράς; στην αρχή ( πιο συγκεκριμένα στην σελίδα 1 ) του δώσαμε μία συμπεριφορά, γίνε κόκκινος. Μετά ζητάμε μία άλλη συμπεριφορά, να γιατρευτεί 20 πόντους και να σταματήσει να είναι κόκκινος μετά από 2 δευτερόλεπτα. Στο κεφάλαιο 9 είδαμε πως αλλάζουμε συμπεριφορά ενός χαρακτήρα χρησιμοποίωντας σελίδες. Αυτό λοιπόν θα κάνουμε και εδώ. Καταρχήν όταν γίνεται κόκκινος θα πρέπει να μεταβαίνει πάντα σε άλλη σελίδα. Προγραμματιστικά μπορούμε να πούμε ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) πήγαινε σελιδα 2. Αυτό φαίνεται στην εντολή 5 η οποία τοποθετείται κάτω από την εντολή 4 και εκτελείται παράλληλα με αυτή.
k11_page1.3_true.png
Στη σελίδα 2, όπως αναφέραμε, θέλουμε ο Τομ να αλλάξει συμπεριφορά. Να γιατρευτεί 20 πόντους και να σβήσει μετά από 2 δευτερόλεπτα. Ας δούμε πως μπορεί να γίνει αυτό. Καταρχήν, από την στιγμή που μεταβαίνουμε στην σελίδα 2, θέλουμε πάντα να γιατρεύεται ο Τομ. Πως μπορούμε να το εκφράσουμε αυτό; Μπορούμε να πούμε ΟΤΑΝ ( WHEN )πάντα ΤΟΤΕ ( DO ) γιατρεψέ με 20 πόντους ( εντολή 3 στο παρακάτω σχήμα ). Επίσης όταν φτάσουμε στα 2 δευτερόλεπτα θέλουμε ο Τομ να σβήσει, δηλαδή ΟΤΑΝ ( WHEN ) ρολόι φτάσει 2 δευτερόλεπτα ΤΟΤΕ ( DO ) σβήσε ( εντολή 4 στο παρακάτω σχήμα ). Τώρα όμως πρέπει να σκεφτούμε να γυρίσουμε πίσω στην παλιά μας συμπεριφορά, να γυρίσουμε δηλαδή πίσω στην σελίδα 1. Πότε και πως θα γίνει αυτό είναι δύο ερωτήματα που πρέπει να απαντήσουμε. Πρώτον θέλουμε να γυρίζει πίσω στην σελίδα 1 μετά το πέρας των 2 δευτερολέπτων ( ΠΟΤΕ ). Άρα η επιστροφή θα πρέπει να συνδεθεί με την εντολή όπου ο Τομ μετά από 2 δευτερόλεπτα θα σβήσει. Και αφού περάσουν τα 2 δευτερόλεπτα τότε μόνο θα έχουμε πάντα μετάβαση στην σελίδα 1, δηλαδή ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) πήγαινε σελιδα 1 ( εντολή 5 ). Άρα η μετάβαση στη σελιδα 1 θα ακολουθήσει την εντολή ΟΤΑΝ ( WHEN ) ρολόι φτάσει 2 δευτερόλεπτα ΤΟΤΕ ( DO ) σβήσε και θα πρέπει να μπει πιο μέσα ώστε να ικανοποιείται μόνο όταν περάσουν τα 2 δευτερόλεπτα και ο Τομ σβήσει ( ΠΩΣ ). Στο παρακάτω σχήμα βλέπουμε την εντολή 5 κάτω και πιο μέσα από την εντολή 4 σύμφωνα με όσα αναφέραμε παραπάνω. Παρατηρείτε κάτι άλλο στην παρακάτω εικόνα; Προφανώς θα έχετε ήδη παρατηρήσει ότι στην αρχή της έχουμε προσθέσει τις δύο πρώτες εντολές της προηγούμενης σελίσας. Γιατί έχει γίνει αυτό; Τι θα γινόταν αν δεν τις προσθέταμε; Όπως αναφέραμε μετάβαση σε μία άλλη σελίδα σημαίνει και αλλαγή συμπεριφοράς. Στη σελίδα 2 αλλάξαμε συμπεριφορά δίνοντας ζωή στον Τομ και σβήνοντάς τον μετά από 2 δευτερόλεπτα. Αφού έσβηνε γυρνούσε πίσω στην σελίδα 1. Τι γίνεται όμως σε αυτή την σελίδα με αυτή την συμπεριφορά;μπορεί ο Τομ να κινηθεί; μπορεί να πυροβολήσει; Όχι! Θα γυρίσει στην σελίδα 1 και στην προηγούμενη συμπεριφορά του μετά από 2 δευτερόλεπτα. Όμως εμείς θέλουμε να συνεχίζει να κινείται και να πυροβολεί και κατά την διάρκεια αυτών των 2 δευτερολέπτων που μεσολαβούν μέχρι να γυρίσει στην παλιά του συμπεριφορά. Έτσι προσθέτουμε και εδώ τις εντολές 1 και 2 της σελίδας 1.
k11_page2.1.png

Συνεχίζοντας τώρα στην σελιδα 1, έχουμε δώσει μέχρις στιγμής την δυνατότητα στον χρήστη να κινείται, να πυροβολεί, να τρώει καρδιές ( παραμένοντας κόκκινος για 2 δευτερόλεπτα σαν ένδειξη ότι έφαγε μία καρδιά ) αυξάνοντας έτσι την ζωή του. Πάμε τώρα να του δώσουμε την δυνατότητα να τρώει νομίσματα. Πότε θα τρώει τα νομίσματα; Θέλουμε να τρώει τα νομίσματα όταν τα χτυπήσει. Άρα μπορούμε να πούμε :ΟΤΑΝ ( WHEN ) χτυπήσεις νόμισμα ΤΟΤΕ ( DO ) φάε αυτό. Αυτό μπορούμε να το δούμε στην εντολή 6 στην παρακάτω εικόνα. Τότε τι θέλουμε πάντα να γίνεται; Θέλουμε πάντα να αυξάνεται ένας κίτρινος μετρητής, δηλαδή ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) αύξησε κατά ένα το κίτρινο σκορ (εντολή 7 όπως φαίνεται στην παρακάτω εικόνα ). Άρα κάτω από την εντολή 6 και πιο μέσα, ώστε να ικανοποιηθεί αφού ο Τομ φάει ένα νόμισμα, βάζουμε την εωτολή 7. Συνολικα τι έχουμε πει στον Τομ να κάνει; ΟΤΑΝ ( WHEN ) χτυπήσεις νόμισμα ΤΟΤΕ ( DO ) φάε αυτό ( ΚΑΙ ΤΟΤΕ ΚΑΙ ΜΟΝΟ ΤΟΤΕ ) ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) αύξησε κατά ένα το κίτρινο σκορ.
k11_page1.4.png

Σε αυτό το σημείο θέλουμε ο Τομ με το που αποκτά 3 νομίσματα να αλλάζει συμπεριφορά. Σαν μία ένδειξη ότι έχει αλλάξει συμπεριφορά ο Τομ θα ανάβει σε πορτοκαλί χρώμα.Είδαμε πριν ότι αποκτώντας ένα νόμισμα αυξάνεται κατά ένα το κίτρινο σκορ. Μπορούμε δηλαδή να πούμε ότι όταν έχεις στο κίτρινο σκορ τον αριθμό τρία άναψε σε πορτοκαλί. Πως μπορούμε να το σκεφτούμε προγραμματιστικά; ΟΤΑΝ ( WHEN ) έχεις σκορ πάνω από δύο κίτρινους πόντους ΤΟΤΕ ( DO ) γίνε πορτοκαλί ( εντολή 8 στην παρακάτω εικόνα ). Προσοχή όταν λέμε πάνω από 2 πόντους εννοούμε το αμέσως επόμενο αριθμό που είναι το 3. Αυτό το κάνουμε γιατί δεν μας δίνεται η δυνατότητα της ισότητας. Στην εντολή 8 βλέπουμε αυτά που περιγράψαμε παραπάνω. Τι γίνεται με την απόκτηση των τριών νομισμάτων; Είπαμε ότι θέλουμε ο Τομ να αλλάζει συμπεριφορά και να αποκτά πύραυλο και αυτό θα γίνεται πάντα από την στιγμή που ο Τομ έχει 3 νομίσματα. Άρα θα πρέπει να μεταβούμε σε μία άλλη σελίδα. Εμείς εδώ θα μεταφερθούμε στην σελίδα 3, δηλαδή ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) πήγαινε σελιδα 3 ( εντολή 9 στην παρακάτω εικόνα ). Πως; Πότε; Αφού θέλουμε να μεταβαίνουμε πάντα στην σελίδα 3 μόνο όταν ο Τομ έχει αποκτήσει 3 νομίσματα και έχει γίνει πορτοκαλί ( ΠΟΤΕ ) θα βάλουμε την εντολή 9 κάτω από την 8 και πιο μέσα ώστε να ικανοποιηθεί αφού ο κίτρινος μετρητής έχει γίνει τρία ( ΠΩΣ ).
k11_page1.5.png

Μεταφερόμαστε τώρα στην σελίδα 3 όπου ο Τομ θα έχει μία διαφορετική συμπεριφορά ρίχνοντας αυτή την φορά πύραυλο. Και σε αυτή την σελίδα με την δεδομένη συμπεριφορά, θα χρειαστεί να κινούμαστε. Παρατηρήστε στην παρακάτω εικόνα πως στην πρώτη γραμμή βάζουμε την εντολή κίνησης ( εντολή 1 του παρακάτω σχήματος ) όπως και στις δύο προηγούμενες σελίδες. Στη συνέχεια θα θέλαμε ο Τομ να πυροβολεί με πύραυλο. Πώς μπορεί να γίνει αυτό; Αντίστοιχα με ότι κάναμε στην σελίδα 1 για να πυροβολούμε σφαιρίδια, έτσι και εδώ θα διαλέξουμε ένα κουμπί από το πληκτρολόγιο που όταν το πατήσουμε θα ρίχνει ένα πύραυλο, δηλαδή ΟΤΑΝ ( WHEN ) πατήσεις πλήκτρο αριστερό alt TOTE ( DO- ΚΑΝΕ ) πυροβόλησε πύραυλο. Αυτό φαίνεται στην εντολή 2 του παρακάτω σχήματος. Θα παρατηρήσετε ότι στο τέλος έχουμε προσθέσει το once. Γιατί; Η ενέργεια μετά το DO θέλουμε να εκτελεστεί μία φορά. Δηλαδή θέλουμε να ρίχνουμε ένα πύραυλο με το πάτημα του αριστερού πλήκτρου alt. Πως μπορούμε να πούμε στον Τομ να την εκτελέσει μόνο μία; Βάζοντας στο τέλος της εντολής το once. Από την στιγμή τώρα που ο χρήστης χρησιμοποίησε τον πύραυλο το κίτρινο σκορ θα πρέπει να μειωθεί κατά 3 ( τόσο ήταν και το σκορ που έπρεπε να μαζέψουμε με την συγκομιδή νομισμάτων για να μπορέσουμε να χρησιμοποιήσουμε τον πύραυλο). Την επόμενη φορά που θα μαζέψει 3 νομίσματα και το κίτρινο σκορ θα φτάσει τον αριθμό 3 τότε θα έχει πάλι την δυνατότητα να ρίξει πύραυλο. Άρα αφού ο Τομ ρίξει ένα πύραυλο πάντα το σκορ θα μειώνεται κατά 3. Που λοιπόν θα βάλουμε την μείωση του σκορ; Αφού προϋπόθεση είναι ο χρήστης να έχει ρίξει τον πύραυλο θα πρέπει να μπει από κάτω και μέσα από την εντολή 2 του παρκάτω σχήματος ( με αυτή έχουμε δώσει την δυνατότητα στον χρήστη να ρίξει ένα πύραυλο ). Πρώτα θα πρέπει να ικανοποιηθεί η εντολή 2 και μετά η εντολή μείωσης. Δεν πρέπει να συμβούν παράλληλα. Και ποια θα είναι η εντολή μείωσης; Μπορούμε να σκεφτούμε ως εξής:Από την στιγμή που ρίξαμε τον πύραυλο θέλουμε πάντα να εκτελείται μείωση, δηλαδή ΟΤΑΝ ( WHEN ) πάντα TOTE ( DO ) μείωσε τρεις κίτρινους πόντους. Αυτό εκτελείται με την εντολή 3 του παρακάτω σχήματος. Προσέξτε πως την έχουμε βάλει κάτω από την εντολή 2 και πιο μέσα για την αποφυγή αυτές να εκτελεστούν παράλληλα. Πάμε να δούμε τώρα κάτι ακόμα πιο ενδιαφέρον. Το μάζεμα των νομισμάτων και η αύξηση του κίτρινου μετρητή συμβαίνουν στην πρώτη σελίδα. Έστω ότι μαζέψαμε 3 κίτινους πόντους από τα νομίσματα και έχουμε μεταβεί στη σελίδα 3. Έστω πάλι ότι ο χρήστης δεν ρίχνει τον πύραυλο και έτσι το κίτρινο σκορ δεν μειώνεται.Δεν θα θέλαμε ακόμα ο χρήστης να έχει την δυνατότητα να μαζεύει νομίσματα; ( δηλαδή και άλλους κίτρινους πόντους; ) Γιατί όχι!! Άρα μπορούμε να χρησιμοποιήσουμε, όπως στην σελίδα 1, τις εντολές για το φάγωμα και την αύξηση του μετρητή κατά τον ίδιο ακριβώς τρόπο και με την ίδια λογική. Αυτό φαίνεται με τις εντολές 4 και 5 του παρακάτω σχήματος. Τι ακριβώς πετυχαίνουμε με την αύξηση εντός της σελίδας 3; Έχουμε την δυνατότητα να χρησιμοποιήσουμε και άλλο πύραυλο μαζεύοντας και άλλα νομίσματα ( Προσοχή:είπαμε πως με την συλλογή τριών νομισμάτων αποκτούμε την δυνατότητα να ρίξουμε και άλλο πύραυλο ). Τι σημαίνει πρακτικά αυτό; Αφού ο χρήστης έχει μαζέψει τρία νομίσματα ( 3 κίτρινους πόντους ) και βίσκεται στην σελίδα 3 υπάρχει η περίπτωση να μην έχει χρησιμοποιήσει τον πύραυλό του και έτσι να μην έχουμε μείωση του κίτρινου σκορ. Μαζεύοντας και άλλα 3 νομίσματα κατά την διάρκεια αυτή θα έχει την δυνατότητα να πετάξει δύο πυραύλους!! Με 9 νομίσματα 3 πυραύλους. Με κάθε πολλαπλάσιο του 3 θα μπορεί να ρίξει τους ανάλογους πυραύλους. Πάμε να δούμε πως!!
k11_page3.1.png

Καταρχήν πρέπει να σκεφτούμε πότε θέλουμε να φύγουμε από την σελίδα 3. Πότε δηλάδή θέλουμε να αφήσουμε αυτή την συμπεριφορά και να ξαναπεράσουμε στη συμπεριφορά που είχαμε στην σελίδα 1. Αποκτάμε την συμπεριφορά της σελίδας 3 όταν έχουμε μαζέψει 3 νομίσματα ( 3 κίτρινους πόντους ). Άρα θα την αφήσουμε όταν έχουμε λιγότερους από 3 πόντους. Τι ακριβώς θα γίνει τότε; Ο Τομ θα σβήσει ( είχε ανάψει στην πρώτη σελίδα όταν μαζεψε 3 νομίσματα ). Πιο συνοπτικά μπορούμε να πούμε ΟΤΑΝ ( WHEN ) έχεις σκορ κάτω από τρεις κίτρινους πόντους TOTE ( DO- ΚΑΝΕ ) σβήσε ( εντολή 6 στο παρακάτω σχήμα ). Σε αυτή την περίπτωση θέλουμε πάντα ο χρήστης να πηγαίνει στην σελίδα 1. Έτσι κάτω από την εντολή 6 και πιο μέσα ( για να μην συμβαίνουν παράλληλα ) θα πούμε: ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) πήγαινε σελιδα 1. Κατά αυτό τον τρόπο ο παίκτης που δεν χρησιμοποιεί τον πυραυλό του και παράλληλα μαζεύει νομίσματα θα μπορεί να χρησιμοποίησει ξανά πύραυλο εφόσον οι κίτρινοι πόντοι του δεν έναι κάτω από δύο και τα το πλήθος των νομισμάτων είανι πολλαπλάσιο του 3. Για παράδειγμα αν το πλήθος των νομισμάτων είναι 4 ή 5 πάλι άνα πύραυλο θα χρησιμοποιήσει ο παίκτης ( τέσσερις πόντοι πλην τρεις επειδή ρίξαμε ένα πύραυλο=1, άρα στην σύγκριση που κάνουμε στην εντολή 6 του παρακάτω πίνακα αυτή δεν ικανοποιείται και γυρνάμε στην σελιδα 1 ). Αντίστοιχα αν είναι πέντε. Αν είναι 7 ή 8 θα μπορεί να χρησιμοποιήσει 2( εφτά πόντοι πλην τρεις επειδή ρίξαμε ένα πύραυλο=4, άρα στην σύγκριση που κάνουμε στην εντολή 6 του παρακάτω πίνακα αυτή ικανοποιείται και παραμένουμε στην σελιδα 3, ξαναρίχνουμε ένα πύραυλο κάνοντας το άθροισμα των κίτρινων πόντων ίσον με 1 και στην σύγκριση αφού αυτή τώρα δεν ικανοποιείται μεταβαίνουμε στην σελίδα 1 ) κοκ. Αντίστοιχα αν είναι οκτώ το κίτρινο σκορ.
k11_page3.2.png

k11_page3.3.png
Ένα ακόμα ενδιαφέρον σημείο που θα πρέπει να σκεφτούμε είναι τι γίνεται όταν ο χρήστης φάει μία καρδιά και μεταβεί στην σελίδα 2 όπως εξετάσαμε παραπάνω. Είδαμε ότι θα παραμείνει στη σελίδα δύο για 2 δευτερόλεπτα. Μέσα στα δύο αυτά δευτερόλεπτα αν βρεθεί ένα νόμισμα κοντά θα μπορεί να το φάει και να αυξήσει τον κίτρινο μετρητή; Σύμφωνα με την υλοποίηση των εντολών στην σελίδα 2 δεν θα μπορεί. Πως λοιπόν μπορούμε να προσθέσουμε και αυτή την δυνατότητα; Και που θα την προσθέσουμε; Επειδή αυτή η δυνατότητα θέλουμε να συμβαίνει μέσα στα 2 δευτερόλεπτα που ο χρήστης βρίσκεται στην σελίδα 2 ( μετά από τα 2 αυτά δευτερόλεπτα γυρνάει πίσω στην σελίδα 1 και στην παλιά συμπεριφορά που είχε ) θα την προσθέσουμε στην σελίδα 2. Για να απαντήσουμε στο πως,θα ανατρέξουμε στις σελίδες 1 και 3 όπου εκεί εκτελούσαμε το σκεπτικό: ΟΤΑΝ ( WHEN ) χτυπήσεις νόμισμα ΤΟΤΕ ( DO ) φάε αυτό ( ΚΑΙ ΤΟΤΕ ΚΑΙ ΜΟΝΟ ΤΟΤΕ ) ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) αύξησε κατά ένα το κίτρινο σκορ. Οι εντολές που υλοποιούσαν το παραπάνω σκεπτικό είναι οι εντολές 6 και 7 του παρακάτω σχήματος ( όπως ακριβώς και στις σελίδες 1 και 3 ).
k11_page2.2.png

Γυρνώντας πάλι στην σελίδα 1 θα θέλαμε σε αυτή την φάση να υλοποιήσουμε την δυνατότητα του χρήστη χτυπώντας τους ααντιπάλους του να αυξάνει ένα κόκκινο μετρητή. Όταν ο μετρητής ξεπεράσει ένα όριο ο χρήστης θα επιβραβεύεται με μπόνους ζωής και ο κόκκινος μετρητής θα μειώνεται τόσο όσο ήταν το όριο που έπρεπε να περάσει ο παίκτης. Πάμε να δούμε σταδιακά πως θα δημιουργήσουμε αυτή την δυνατότητα. Καταρχήν οι αντίπαλοι του παίκτη είναι τρεις στον αριθμό. Τα κανόναι, τα κουμπιά πίεσης και τα περισκόπια. Για το κάθε εχθρό χωριστά θέλουμε όταν το χτυπήσει ο χρήστης να αυξάνει τον κόκκινο μετρητή κατά ένα, δηλάδή μπορούμε να σκεφτούμε ως εξής: ΟΤΑΝ ( WHEN ) πυροβολήσεις εχθρό ΤΟΤΕ ( DO ) αύξησε κόκκινο μετρητή κατά ένα. Έτσι για τον κάθε εχθρό που έχουμε χωριστά μπορούμε να γράψουμε τις εντολές 10, 11 και 12 όπως φαίνεται και στο παρακάτω σχήμα.
k11_page1.6.png

Στη συνέχεια θέλουμε αφού έχει φτάσει το σκορ σε ένα αριθμό πόντων να μιας γιατρεύει. Μπορόυμε να σκεφτούμε ανάλογα όπως με την εντολή 8. ΟΤΑΝ ( WHEN ) έχεις σκορ πάνω από εκατό κόκκινους πόντους ΤΟΤΕ ( DO ) γιατρεψέ με εκατό συν είκοσι πόντους( εντολή 13 στο παρακάτω σχήμα ) . Αφού συμβεί αυτό πάντα να μου μειώνεις εκατό πόντους. Πως μπορούμε να το εκφράσουμε αυτό; ΟΤΑΝ ( WHEN ) πάντα ΤΟΤΕ ( DO ) μείωσε εκατό κόκκινουσ πόντους ( εντολή 14 στο παρακάτω σχήμα ). Αυτή η εντολή θα πρέπει να μπει από κάτω από την εντολή 13 και πιο μέσα ώστε να μην εκτελούνται παράλληλα. Θα πρέπει να ικανοποιείται εφόσον έχει ικανοποιηθεί η εντολή 13.
k11_page1.7.png

Σε αυτό το σημείο πρέπει να σκεφτούμε τι θα συμβεί αν ο παίκτης χάσει όλη του την ζωή. Προφανώς θα χάσει. Μπορούμε δηλαδή να πούμε ΟΤΑΝ ( WHEN ) η ζωή σου είναι κάτω από ένα πόντο ΤΟΤΕ ( DO ) έχασες. Αυτό μπορεί να υλοποιηθεί με την παρακάτω εντολή του σχήματος ( εντολή 15 ).
k11_page1.8.png

Και πότε θα τερματίζει επιτυχώς το παιχνίδι; όταν ο χρήστης καταφέρει και αρπάξει το μπλε αστέρι. Τότε ο παίκτης θα έχει νικήσει. Άρα ΟΤΑΝ ( WHEN )χτυπήσεις το μπλε αστέρι ΤΟΤΕ ( DO ) άρπαξέ το. Τότε είσαι ο νικητής. Οι εντολές του παρακάτω σχήματος μας προσφέρουν αυτή την υλοποίηση. Προσοχή και εδώ η εντολή 17 όπως βλέπουμε μπαίνει από κάτω από την 16 και πιο μέσα. Έτσι εξασφαλίζουμε ότι η εντολή 17 θα συμβεί όταν ικανοποιηθεί η εντολή 16.
k11_page1.9.png

  • Κανόνι, συμπεριφορά και ανάλυση εντολών
Η συμπεριφορά του κανονιού θα θέλουμε να είναι η εξής: όταν δει έναν Μηχανάκια, στην περίπτωσή μας τον Τομ, χωρίς όμως κάτι να τον εμποδίζει, όπως για παράδειγμα ένα βουνό, θέλουμε να ρίχνει πυραύλους ευθεία χωρίς να πηγαίνουν πάνω ή κάτω. Δήλαδή προγραμματιστικά μπορούμε να πόυμε ΟΤΑΝ ( WHEN ) έχεις οπτική επαφή με τον Μηχανάκια ΤΟΤΕ ( DO ) πυροβόλησε πυραύλους ευθεία ( εντολή 1 στη παρακάτω εικόνα ). Παράλληλα όταν πετύχει ένα Μηχανάκια ο χρήστης θέλουμε να του προκαλέιται ζημιά πέντε πόντων, δηλαδή να του αφαιρούνται πέντε πόντοι από την ζωή του. Πως μπορούμε να το σκεφτούμε αυτό; ΟΤΑΝ ( WHEN ) πυροβολήσεις Μηχανάκια ΤΟΤΕ ( DO ) προκάλεσέ του ζημιά πέντε πόντων ( εντολή 2 στη παρακάτω εικόνα ).
k11_page1.cannon.png
  • Περισκόπιο, συμπεριφορά και ανάλυση εντολών
Η συμπεριφορά του περισκοπίου θα θέλουμε να είναι ως εξής: Καταρχήν πρέπει πάντα να είναι κλειστό και θα ανοίγει μόνο όταν δει ένα Μηχανάκια να είναι κοντά.
Στην παραπάνω πρόταση έχουμε δύο ξεχωριστά πράγματα να επιλύσουμε:
  1. περισκόπιο πάντα κλειστό.
  2. περισκόπιο ανοίγει μόνο όταν δει έναν Μηχανάκια και ο Μηχανάκιας είναι κοντά.
Για το πρώτο μπορούμε να δώσουμε την εντολή ΟΤΑΝ ( WHEN ) πάντα ( always ) ΤΟΤΕ ( DO ) κλειστό ( close ). ( εντολή 1 στο παρακάτω σχήμα ). Για το δεύτερο πως μπορούμε να σκεφτούμε; Μπορούμε απλά να πούμε ΟΤΑΝ ( WHEN ) δεις ( see ) Μηχανάκια ( cycle ) κοντά ( close by ) ΤΟΤΕ ( DO ) άνοιξε ( open ). ( εντολή 2 στο παρακάτω σχήμα ).
k11_page1.stick.png

Στη συνέχεια θα πρέπει να σκεφτούμε τι θέλουμε να κάνει το περισκόπιο όταν αυτό παραμένει ανοικτό ( θυμηθείτε ότι παραμένει ανοικτό όσο ο Μηχανάκιας είναι κοντά σε αυτό ). Αυτό που θέλουμε να κάνει είναι:
  1. να γίνεται κόκκινο
  2. να πυροβολάει σφαιρίδια
  3. να στυφογυρίζει
Τις παραπάνω ενέργειες θέλουμε το περισκόπιο να τις εκτελεί πάντα εφόσον ο Μηχανάκιας είναι κοντά σε αυτό. Πως μπορούμε αυτές τις ενέργειες να τις σκεφτούμε προγραμματιστικά; Θα έχουμε αντίστοιχα τις εξής τρεις εντολές:
  1. ΟΤΑΝ ( WHEN ) πάντα ( always ) ΤΟΤΕ ( DO ) άναψε ( glow ) κόκκινο ( red ).
  2. ΟΤΑΝ ( WHEN ) πάντα ( always ) ΤΟΤΕ ( DO ) πυροβόλησε ( shoot ) σφαιρίδιο ( blip ).
  3. ΟΤΑΝ ( WHEN ) πάντα ( always ) ΤΟΤΕ ( DO ) στριφογύριζε ( turn ).
Επίσης θέλουμε να εκτελούνται παράλληλα, δηλαδή και οι τρεις μαζί. Άρα θα πρέπει να τοποθετηθούν η μία κάτω από την άλλη. Όπως φαίνεται και στη παρακάτω εικόνα οι εντολές 3, 4 και 5 εκτελούν τις παραπάνω ενέργειες και εκτελούνται, όπως είπαμε, εφόσον ο Μηχανάκιας είναι κοντά στο περισκόπιο, δηλαδή εφόσον ικανοποιείται η εντολή 2. Για αυτό τον λόγο θα πρέπει να τοποθετηθούν πιο μέσα. Τέλος πότε το περισκόπιο θα παύει να ανάβει κόκκινο; Πρέπει να σκεφτούμε πρώτα πότε άναψε το περισκόπιο. Άναψε όταν ο Μηχανάκιας έφτασε κοντά σε αυτό. Άρα θα πρέπει να σβήσει όταν απομακρυνθεί. Όταν λοιπόν απομακρυνθεί θα παύει να ισχύει η εντολή 2. Έτσι θα ακολουθήσει η εντολή 6, όπως φαίνεται στη παρακάτω εικόνα, με την οποία το περισκόπιο θα σβήσει.
k11_page1.1stick.png

  • Κουμπί πίεσης, συμπεριφορά και ανάλυση εντολών
Η συμπεριφορά του κομπιού πίεσης θα θέλουμε να είναι η εξής: Αρχικά η συμπεριφορά θα θέλουμε να είναι ίδια με αυτή του κανονιού, δηλαδή όταν δει ένα Μηχανάκια, χωρίς όμως κάτι να τον εμποδίζει, θέλουμε να ρίχνει πυραύλους ευθεία χωρίς να πηγαίνουν πάνω ή κάτω. Δήλαδή προγραμματιστικά μπορούμε και εδώ να πόυμε ΟΤΑΝ ( WHEN ) έχεις οπτική επαφή με τον Μηχανάκια ΤΟΤΕ ( DO ) πυροβόλησε πυραύλους ευθεία ( εντολή 1 στη παρακάτω εικόνα ). Παράλληλα όταν πετύχει ένα Μηχανάκια ο χρήστης θέλουμε να του προκαλέιται ζημιά πέντε πόντων, δηλαδή να του αφαιρούνται πέντε πόντοι από την ζωή του. Πως μπορούμε να το σκεφτούμε αυτό; ΟΤΑΝ ( WHEN ) πυροβολήσεις Μηχανάκια ΤΟΤΕ ( DO ) προκάλεσέ του ζημιά είκοσι πόντων ( εντολή 2 στη παρακάτω εικόνα ). Μέχρι στιγμής παρατηρείτε ότι η συμπεριφορά του είναι ίδια με αυτή ενός κανονιού. Όμως, όπως αναφέραμε στην περιγραφή του προβλήματος θέλουμε το κουμπί πίεσης να κλωνοποιείται. Θέλουμε δηλαδή να ξαναγεννιέται. Εδώ έρχεται η έννοια των Creatables δηλαδή των κλώνων. Όπως αναφέραμε στο Κεφάλαιο 9, μπορούμε να δημιουργήσουμε "αρχέτυπα", δηλαδή "πρότυπα" αντικείμενα τα οποία μπορούμε να αναπαράγουμε στο παιχνίδι μας μέσα από άλλα αντικείμενα. Είδαμε λοιπόν στο κεφάλαιο 9 πως δημιουργείται ένα "πρότυπο" αντικείμενο με την ενεργοποίηση της επιλογής Creatable. Στην περίπτωσή μας ενεργοποιούμε αυτή την επιλογή σε ένα κουμπί πίεσης αφού αυτό θέλουμε να κλωνοποιηθεί. Από που όμως θέλουμε να κλωνοποιηθεί, δηλαδή ποιό αντικείμενο θα το γεννήσει; Θα το "γεννήσει" ένα κουμπί πίεσης, το οποίο βέβαια δεν θα έχουμε χαρακτηρίσει ως Creatable, αφού θέλουμε να υπάρχει στο παιχνίδι μας, και το οποίο με την ενέργεια Δημιούργησε ( Create ) θα προκαλεί την δημιουργία του "προτότυπου" κουμπιού πίεσης. Πότε όμως θέλουμε να δημιουργείται το "προτότυπο"; Όταν το κουμπί πίεσης που συμμετέχει στο παιχνίδι μας χάσει την ζωή του. Πάμε να υλοποιήσουμε το παραπάνω σκεπτικό μας με μία εντολή. Μπορούμε λοιπόν να πόυμε: ΟΤΑΝ ( WHEN ) η ζωή σου είναι κάτω από ένα πόντο ΤΟΤΕ ( DO ) δημιούργησε το "προτότυπο" κουμπί πίεσης. Προφανώς αυτή την εντολή ( εντολή 3 στη παρακάτω εικόνα ) θα την προσθέσουμε στο κουμπί πίεσης που συμμετέχει στο παιχνίδι και από όπου θα "γεννήσουμε" το "προτότυπο".
k11_page1pushpad.png
Τώρα το κλωνοποιημένο κουμπί πίεσης ( που δημιουργήθηκε από το πρότυπο ) τι συμπεριφορά θα έχει; Και αυτό θα έχει την ίδια συμπεριφορά με το αρχικό κουμπί πίεσης που είχαμε στην ίστα μας πριν κλωνοποιηθεί, δηλαδή θα πυροβολεί μόλις έχει οπτική επαφή με τον Μηχανάκια και θα τον προκαλεί ζημιά είκοσι πόντων ( εντολές 1 και 2 του αρχικοόυ κομπιού πίεσης ). Επιπλεόν θα εμφανίζει το μήνυμα SUPRISE!!
k11_pushpadcreate.png
  • Καρδιά
Η καρδιά θα τρώγεται από τον χρήστη δίνοντας του μπόνους ζωής. Ας δώσουμε λιγη παραπάνω προσοχή και ας σκεφτούμε τι θα γίνει αν καταλάθος πυρά από μία μάχη πέσουν πάνω σε μια καρδιά. Αν αυτά είναι αρκετά θα καταστραφεί. Θέλουμε εμείς να συμβαίνει αυτό; Προφανώς όχι! Θέλουμε η καρδιά να παραμένει ακέραια μέχρι να την χτυπήσει ο Μηχανάκιας και να την φάει. Πως μπορούμε να κάνουμε την καρδιάα ακέραια, δηλαδή να μην καταστρέφεται; Πηγαίνοντας στις επιλογές του αντικειμένου ( Change Settings ) ενεργοποιούμε την επιλογή Invulnerable. Με αυτό τον τρόπο η καρδιά δεν θα καταστρέφεται.

  • Νομίσμα
Ακριβώς την ίδια διαδικασία ακολουθούμε και με το νόμισμα. Και το νόμισμα δεν θέλουμε να καταστρέφεται άρα ενεργοποιούμε την επιλογή Invulnerable.
k11_coinundestruct.png