ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ 447 ΥΠΟΛΟΓΙΣΤΙΚΗ ΟΡΑΣΗ

Σχετικά έγγραφα
ΠΑΙΧΝΙΔΙ PACMAN 3D ΜΕ ΜΕΘΟΔΟΥΣ ΕΝΙΣΧΗΤΙΚΗΣ ΜΑΘΗΣΗΣ

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα

1ο μέρος 1. Φτιάχνουμε την πίστα. Μια ενδεικτική πίστα φαίνεται παρακάτω:

Μάθημα 1: Εισαγωγή. Κάνε κλικ την εντολή "κινήσου" και με το ποντίκι πατημένο μετέφερε τη στη περιοχή σεναρίων.

Δομή Επιλογής. 1. Αν ο σκύλος ακουμπήσει ένα κόκαλο τότε το κόκαλο εξαφανίζεται και ο παίκτης κερδίζει 10 πόντους.

Μαθήματα Scratch -Δραστηριότητα 1 Παλέτα Κίνηση

Δημιουργία δισδιάστατου παιχνιδιού, τύπου Pacman. 1ο μέρος.

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Ενότητα 5: ΜΕΤΑΒΛΗΤΕΣ

Breakdance Computer Game σε Scratch.

ΣΚΗΝΙΚΟ ΥΠΟΒΑΘΡΑ ΑΡΧΙΚΗ

Εισαγωγή στην επανάληψη

Παλέτα Κίνηση. Καλό είναι πριν ξεκινήσετε το παρακάτω φυλλάδιο να έχετε παρακολουθήσει τα παρακάτω δύο videos: a) Εισαγωγή στο περιβάλλον του Scratch

Το Κ2 είναι ένα παιχνίδι για 1 έως 5 παίκτες, ηλικίας 8 ετών και άνω, με διάρκεια περίπου 60 λεπτά.

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

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ.

Τιμή Τιμή. σκορ. ζωές

Το δεύτερο παιχνίδι ΤΟΥΒΛΑΚΙΑ

Tank Rescue Computer Game σε Scratch

Σχετική κίνηση αντικειμένων

Παλέτα Κίνηση. Για να μετακινήσουμε ένα αντικείμενο χρησιμοποιούμε την εντολή ΚΙΝΗΣΟΥ

Μεταβλητές. Για περισσότερες λεπτομέρειες πάνω στις μεταβλητές θα ήταν χρήσιμο να διαβάσεις το

Παραδείγματα μεταβλητών

Ποιές εντολές του Scratch πρέπει να ξέρω;

Ο φύλακας του μαγικού κύκλου Δεξιότητες: Ρίξιμο σε στόχο. Πλάγια βήματα. Θέση ετοιμότητας θέση άμυνας.

Σουτ σε στόχο με ακρίβεια

ΑΝΑΛΥΣΗ ΓΚΟΛ. Παίζοντας την μπάλα στην πλάτη της άμυνας που αμύνεται ψηλά (1) Ρεάλ Μαδρίτης 5-1 Ρεάλ Σοσιεδάδ (5 0 Γκολ): Ρονάλντο - Ασίστ: Ιγκουαΐν

Το τρίτο παιχνίδι ΛΑΒΥΡΙΝΘΟΣ ΜΕ ΕΜΠΟΔΙΑ

Chess Academy Free Lessons Ακαδημία Σκάκι Δωρεάν Μαθήματα. Οι κινήσεις των κομματιών Σκοπός της παρτίδας, το Ματ Πατ Επιμέλεια: Γιάννης Κατσίρης

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

Αριστείδης Παλιούρας Ανακαλύψτε το Scratch 2

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

Παιχνίδια. 2. Το σπίτι

1.1. Κινηματική Ομάδα Δ.

ΑΝΑΛΥΣΗ ΓΚΟΛ Πρόκληση ανισορροπίας στην αμυντική γραμμή του αντιπάλου: Αξιοποιώντας τις αδυναμίες της αντίπαλης άμυνας

Ένα έξυπνο παιχνίδι τοποθέτησης πλακιδίων για 2-5 παίκτες, 8 ετών και άνω από τον Klaus-Jurgen Wrede

Ενότητα: GameMaker Τα βασικά. Δημιουργώντας ένα παιχνίδι µε το GameMaker

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ. Πρώτη Σειρά ασκήσεων Ημερομηνία Παράδοσης: 24 Απριλίου 2018, 12 μ.μ.

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

Αγώνες αυτοκινήτου Παιχνίδι για 2 παίκτες

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ GPRS 1. ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ GOOGLE EARTH

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Δευτέρα 22 / 11 / 2017 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Ενότητα: ΠΑΡΑΔΟΣΙΑΚΑ ΠΑΙΧΝΙΔΙΑ

Φύλλο Εργασίας: Παιχνίδι Λαβύρινθος (MAZE) Προγραμματιστικό Εργαλείο: GAME MAKER. Ονοματεπώνυμο:

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

αντίστοιχο γεγονός. Όταν όντως το κουμπί

Η Ιστορία. Προετοιμασία του παιχνιδιού. Μια περιπετειώδης αποστολή στον παράδεισο.

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Μάθηση του παιχνιδιού British square με χρήση Temporal Difference(TD) Κωνσταντάκης Γιώργος

Slalom Race Computer Game on Scratch

Τα στοιχεία του παιχνιδιού : Σκηνικό

3 ο εργαστήριο Scratch for NinjaCoders

Τι θα απαντούσατε αλήθεια στην ίδια ερώτηση για την περίπτωση της επόμενης εικόνας;

Σενάριο 16: Ο κόσμος του Robby

Καροτοκυνηγός. Αντικείμενα

Φύλλο εργασίας 1 Εισαγωγή στη Ρομποτική

Πιθανοτικός Συμπερασμός: Πού βρίσκομαι στο πλέγμα; [ΠΛΗ 513] Αυτόνομοι πράκτορες - Project Εξαμήνου ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ

ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ ΠΛΗ 513

Δημιουργώντας ένα παιχνίδι λαβυρίνθου(maze game) με εμπόδια

Εγκατάσταση της Unity

ΕΝΤΟΛΕΣ. 7.1 Εισαγωγικό μέρος με επεξήγηση των Εντολών : Επεξήγηση των εντολών που θα

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟ ΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΚΕΦΑΛΑΙΟ 9 ΜΕΤΑΒΑΣΗ ΑΠΟ ΤΗΝ ΕΠΙΘΕΣΗ ΣΤΗΝ ΑΜΥΝΑ ΣΤΗ ΜΕΣΑΙΑ ΖΩΝΗ ΜΕΤΑΒΑΣΗ ΑΠΟ ΤΗΝ ΕΠΙΘΕΣΗ ΣΤΗΝ ΑΜΥΝΑ ΣΤΗ ΜΕΣΑΙΑ ΖΩΝΗ

8. Οι κάρτες Πολιτισμού ανακατεύονται και τοποθετούνται

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

Προγραμματισμός. Το περιβάλλον του scratch

Bάτραχοι στη λίμνη. Παιχνίδια Συνεργασίας Επίπεδο 1,2

Το σκηνικό μας είναι πλέον έτοιμο για εισάγουμε τα υπόλοιπα αντικείμενα του έργου μας.

Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0

ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ

B) Ετοιμάζοντας μια Παρουσίαση

A7.2 Δημιουργία Απλής Γραφικής Εφαρμογής σε Περιβάλλον Scratch

Περιεχόμενα του Παιχνιδιού

Εισαγωγή. Περιεχόμενα. Μέσα στο Κουτί. Εισαγωγή Στόχος Μέσα στο Κουτί Οι Κάρτες Περιγραφή των Καρτών Επιβίβαση!...

Εισαγωγή 6. Είσοδος στα Windows και οθόνη κλειδώματος 11. Οι πρώτες ρυθμίσεις των Windows H επιφάνεια εργασίας 49

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΠΕΡΙΕΧΟΜΕΝΑ: 88 στόχοι 48 λεγεώνες 23 δείκτες ενεργοποίησης. Επτά λεγεώνες και. κατακτηθεί. Απόθεμα λεγεώνων. Στοίβα στόχων

Τσάπελη Φανή ΑΜ: Ενισχυτική Μάθηση για το παιχνίδι dots. Τελική Αναφορά

Σκοπός του παιχνιδιού. Περίληψη

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ DVR KTEC

Συγκομιδή και ταξινόμηση φρούτων

DS - Pacman. 2.1 Η calculatenextpacmanposition... 3

Αριστείδης Παλιούρας Ανακαλύψτε το Scratch 2

WiFi V-Timer ΕΚΔΟΣΗ 2Η

ΕΠΙΣΗΜΟΙ ΚΑΝΟΝΕΣ ΤΟΥ ΟΙ ΚΑΡΤΕΣ

Τίτλος Διδακτικού Σεναρίου

Το επαναστατικό καρτοπαίχνιδο. όπου κερδίζετε παίρνοντας κεφάλι.

Παλέτα Όψεις. Πως κάνουμε ένα αντικείμενο να μιλάει ή να σκέφτεται;

Λίγα λόγια... Περιεχόμενα

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

River IQ Game Computer Game σε Scratch

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

ΕΚΜΑΘΗΣΗ ΤΟΥ ΜΑΝ ΤΟ ΜΑΝ ΣΤΗΝ ΗΛΙΚΙΑΚΗ ΚΑΤΗΓΟΡΙΑ 8-10 χρ.

ΦΥΛΛΟ ΕΞΟΙΚΕΙΩΣΗΣ ΜΕ ΤΟ ΕΙΚΟΝΙΚΟ ΕΡΓΑΣΤΗΡΙΟ

Περιεχόμενα. Το "ζέσταμα τερματοφύλακα" μπορούμε να το εκμεταλλευτούμε με ιδανικό τρόπο και για τη βελτίωση της ικανότητας για σουτ των παικτών!

Scratch 2.0 Προκλήσεις

Microsoft PowerPoint 2007

2 ο Εργαστήριο Αλληλεπίδραση και Animation

Οδηγός Χρήσης της Εφαρμογής Web based Video Conference

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ 447 ΥΠΟΛΟΓΙΣΤΙΚΗ ΟΡΑΣΗ PROJECT Pac-Man game controlled with Kinect Αβραάμια Κοντού 990412 Νικόλας Τσεκούρας 1021973 Σκεύη Ματσεντίδου 982267 1

ΠΕΡΙΕΧΟΜΕΝΑ 1. Εισαγωγή 3-4 2. Επεξήγηση Κώδικα Παιχνιδιού Pac Man 2.1. Υλοποίηση Δομής και Αρχικοποίηση του Κεντρικού Πίνακα.. 5 2.2. Αλγόριθμος Κίνησης του Pac Man 5 2.3. Υλοποίηση Αλγόριθμου Κίνησης του Pac Man. 6 2.4. Διαδικασία κατά την οποία ο Pac-Man τρώει τις κουκκίδες. 7 2.5. Collision detection μεταξύ των φαντασμάτων και του Pac-Man 7 2.6. Φαντασματάκια: Αλγόριθμοι και Διαδικασίες. 8-10 3. Kinect 3.1. Εισαγωγή. 10 3.2. Βήματα Εγκατάστασης Kinect στο project μας. 11 3.3. Επεξήγηση Κώδικα.. 11 4. Οθόνες από το παιχνίδι.. 12 5. References. 13 2

1. Εισαγωγή Στην τελική εργασία για το μάθημα Υπολογιστική Όραση η ομάδα μας υλοποίησε το γνωστό σε όλους μας παιχνίδι Pac-Man με την διαφορά όμως από το παραδοσιακό παιχνίδι που όλοι γνωρίζουμε, ότι η κίνηση του παίκτη βασίζεται στο Kinect. Ο έλεγχος της κίνηση του παίκτη βασίζεται στο Kinect, καθώς επίσης και η επιλογή του New Game ή Quit, μετά το τέλος του παιχνιδιού. Επιπρόσθετη λειτουργία που υλοποιήθηκε με το Kinect είναι ότι ο χρήστης έχει την επιλογή στην αρχή του παιχνιδιού να επιλέξει πιο χέρι θέλει να χρησιμοποιήσει το δεξί ή το αριστερό για να παίξει το παιχνίδι. Το παιχνίδι έχει υλοποιηθεί στο Visual Studio 2010 στο XNA Game Studio 4.0, σε γλώσσα Visual C#. Οι βιβλιοθήκες που έχουν χρησιμοποιηθεί είναι οι εξής: using System; using System.IO; using System.Linq; using System.Text; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; Τα βασικά μέρη που χωρίζεται το παιχνίδι μας και οι γενικοί στόχοι που επιτεύχθηκαν με αυτή την εργασία είναι: Το πρόγραμμα υλοποίησης του αλγορίθμου του προβλήματος του Pac Μan. Την ένωση του προγράμματος με το Kinect. Την υλοποίηση της κίνησης του παίκτη (player Pac-Man) αλλά και του μενού επιλογών (New Game, Quit, επιλογή χεριού που θέλει ο χρήστης να παίξει) στο παιχνίδι με βάση το Kinect. Είναι γενικά παραδεκτό ότι το παιχνίδι Pac-Man αποτελεί ένα από τα δημοφιλέστερα παιχνίδια και ιδιαίτερα γνωστό σε όλο τον κόσμο εδώ και αρκετές δεκαετίες. Οι οδηγίες του παιχνιδιού είναι πολύ εύκολες και όλοι λίγο πολύ τις γνωρίζουμε. Καταρχάς υπάρχει ο βασικός παίκτης του παιχνιδιού, ο Pac-Man τον οποίο χειρίζεται ο χρήστης. Σκοπός του παίκτη είναι να καταφέρει να φάει όλες τις κουκίδες και δυναμωτικές κουκίδες που υπάρχουν στην πίστα του κάθε επιπέδου(level), πριν χάσει όλες του τις ζωές, οι οποίες είναι συνολικά τρείς. Επίσης σκοπός του είναι να καταφέρει να συλλέξει, σε κάθε επίπεδο από τα οποία θα περάσει μέχρι 3

να έρθει το τέλος του παιχνιδιού του, όσους περισσότερους πόντους μπορεί. Έτσι ώστε να βγει πιο ψηλά στη λίστα με το high scores. Τους πόντους μπορεί να τους συλλέξει από τις κουκίδες και τις δυναμωτικές κουκκίδες που τρώει,, από τα φρούτα που του εμφανίζονται σε κάθε επίπεδο, αν καταφέρει όμως να τα πάρει μέσα στο χρόνο που του εμφανίζονται στη πίστα. Όπως επίσης όταν έχει την δυνατότητα να φάει τους εχθρούς του, τα φαντασματάκια, παίρνει επιπλέον πόντους που αυξάνονται μάλιστα από φαντασματάκι σε φαντασματάκι. Ο τρόπος με τον οποίο μπορεί να χάσει κάποια ζωή ο παίκτης είναι όταν ένας από τους εχθρούς του, δηλαδή ένα από τα φαντασματάκια, τον φάει, ουσιαστικά αυτό γίνεται όταν συγκρουστούν μεταξύ τους. Στο παιχνίδι υλοποιήθηκαν όλα τα πιο πάνω μέρη του παιχνιδιού. Τα βασικά στοιχεία που υλοποιήθηκαν στο παιχνίδι μας είναι: Η κίνηση του βασικού παίκτη του Pac-Man, με το Kinect. Η κινήσεις που μπορούν να γίνουν είναι πάνω, κάτω, δεξιά και αριστερά Ο Pac-Man και τα φαντασματάκια μπορούν να κινηθούν σε συγκεκριμένα σημεία στον πίνακα. Επιτρεπτή κίνηση υπάρχει σε σημεία χωρίς τοίχος Το κάθε φαντασματάκι έχει την δική του συμπεριφορά, στην οποία βασίζεται και η κίνηση του στο παιχνίδι. Τα scores του παιχνιδιού είναι η κουκίδα, η δυναμωτική κουκίδα που δίνει και την δυνατότητα στον Pac-Man να τρώει τα φαντασματάκια και να κερδίζει επιπλέον πόντους. Τέλος τα φρούτα που ανάλογα με το επίπεδο αλλάζουν και αυξάνονται και οι πόνοι που δίνουν Με βάση το επίπεδο αλλάζει και η ταχύτητα του Pac-Man και των φαντασμάτων Οι εναλλαγές από επίπεδο σε επίπεδο, και οι διαφορές μεταξύ αυτών. Τα φρούτα που θα εμφανιστούν και οι πόντοι που δίνουν, οι ταχύτητες του παίκτη και των φαντασμάτων Οι ζωές συνολικά του παίκτη, πότε ακριβώς μειώνονται αυτές και σε πιο σημείο χάνει ο παίκτης Η δυνατότητα εμφάνισης των high scores, επιλογής νέου παιχνιδιού ή εξόδου από το παιχνίδι Η δυνατότητα επιλογής του χρήστη με ποιο χέρι θέλει να παίξει το παιχνίδι, δεξί ή αριστερό. Έτσι ώστε το παιχνίδι να είναι εύκολο στη χρήση και να απευθύνεται τόσο για τους δεξιόχειρες όσο και για τους αριστερόχειρες. 4

2. Επεξήγηση κώδικα παιχνιδιού Pac-Man 2.1 Υλοποίηση Δομής και Αρχικοποίηση του Κεντρικού Πίνακα Ο κεντρικός πίνακας είναι ο βασικός πίνακας πάνω στον οποίο βασίζονται πολλά στοιχεία της λογικής του παιχνιδιού και πολλά κομμάτια του προγράμματος. Επίσης θα μπορούσαμε να πούμε πως ότι τελικά εμφανίζεται στην οθόνη βασίζεται πάνω σε αυτόν. Ένα από τα κομμάτια που έπρεπε να υλοποιηθούν, είναι κάποιος τρόπος με τον οποίο θα ξέραμε σε ποια σημεία μπορεί ο Pac-Man αλλά και τα φαντασματάκια να κινηθούν. Δηλαδή σε ποια σημεία η κίνηση είναι επιτρεπτή και σε ποια όχι. Σε ποια σημεία μπορούν ή δεν μπορούν να κινηθούν, αν υπάρχουν κουκκίδες ή δυναμωτικές κουκκίδες ή τοίχος. Αυτό υλοποιήθηκε βάση ενός πίνακα ο οποίος αρχικοποιείται από ένα αρχείο και οι τιμές οι οποίες φυλάει είναι οι εξής: 0,1,2 και 3. Το 0 αναπαριστά θέση που δεν επιτρέπεται η κίνηση, δηλαδή τοίχος, το 1 επιτρεπτή κίνηση δηλαδή κουκκίδα ή κενό, το 2 αναπαριστά το σπίτι των φαντασμάτων και το 3 αναπαριστά δυναμωτική κουκκίδα. Ο πίνακας αυτός ονομάστηκε TileGrid, και είναι τύπου Tile. Ο τύπος struct (Tile) κρατάει για κάθε αντικείμενο αυτού του τύπου (σε αυτή την περίπτωση τον πίνακα μας TileGrid), το TileTypes: Open, Closed, Home καθώς επίσης και εάν έχει κουκκίδα ή δυναμωτική κουκκίδα. Ο τύπος είναι Open εάν η τιμή είναι 1,3, Closed εάν είναι 0 και Home εάν είναι 2. Αυτός ο πίνακας είναι πολύ βοηθητικός και αρκετά κομμάτια του προγράμματος βασίζονται πάνω σε αυτόν όπως θα δούμε και πιο κάτω. Μερικά από αυτά είναι: τι ακριβώς σχεδιάζεται στην οθόνη κουκκίδα, δυναμωτική κουκκίδα, τοίχος, σπίτι φαντασμάτων. Σε ποια σημεία μπορεί να κινηθεί ή όχι ο Pac-Man και τα φαντασματάκια. Αν μια συγκεκριμένη θέση στον πίνακα είναι ανοικτή προς διακίνηση ή όχι. Επιπλέον αυτός ο πίνακας θα ανανεώνεται όταν τρώγεται ή όχι μια κουκκίδα για να ξέρουμε τι θα σχεδιάζουμε στην οθόνη. 2.2 Αλγόριθμος Κίνησης του Pac Man: Ένα άλλο σημαντικό κομμάτι στο παιχνίδι είναι η κίνηση του κυρίως παίκτη. Πότε μπορεί να κινηθεί, που μπορεί να πάει, που όχι, ποια η κατεύθυνσή του και πότε μπορεί να αλλάξει κατεύθυνση. Όταν δοθεί εντολή κίνησης σε κάποια κατεύθυνση για τον παίκτη, ελέγχουμε αν προσπαθεί να αλλάξει κατεύθυνση από αυτή που βρίσκεται τώρα. Αν ναι ελέγχει αν μπορεί να γίνει αυτή η αλλαγή στην κατεύθυνση. Αυτό εξαρτάται από το αν επιτρέπεται να πάει εκεί, δηλαδή αν υπάρχει κουκκίδα και όχι τοίχος. Αν πράγματι υπάρχει κουκκίδα τότε γίνεται η αλλαγή στην κατεύθυνση και ο παίκτης προχωρεί προς τα εκεί, αλλάζοντας ανάλογα το position x και το position y του. Έτσι όταν θα καλεστεί η συνάρτηση σχεδίασης Draw, θα σχεδιαστεί στην ανανεωμένη του θέση και έτσι θα φαίνεται ότι προχωρά, επειδή αυτό γίνεται πάρα πολύ γρήγορα. 5

Μια ιδιαιτερότητα στην κίνηση που έπρεπε να προσεχθεί είναι η κίνηση στο tunnel εάν η θέση του παίκτη γίνει ίση με τις συντεταγμένες του άκρου κάποιου από τα tunnel, θα πρέπει οι συντεταγμένες της θέσης του να γίνουν ίδιες με της συντεταγμένες του άκρου του άλλου tunnel. 2.3 Υλοποίηση Αλγόριθμου Κίνησης του Pac Man: Οι επιτρεπτές κατευθύνσεις του παίκτη είναι: Up, Down, Right, Left. Οι επιτρεπτές καταστάσεις (states) του παίκτη είναι: Start, Normal, Dying. Οι συντεταγμένες της θέσης του παίκτη δίνονται από το Tile table. Όταν ο παίκτης είναι σε state Start τότε είναι στην αρχική κατάσταση. Μόλις ξεκινήσει το παιχνίδι, δηλαδή γίνει οποιαδήποτε κίνηση από τον παίκτη το state του αλλάζει και γίνεται Normal. Ακόμα εάν η κίνηση του παίκτη με το χέρι είναι προς τα δεξιά τότε δεν γίνεται προσπάθεια αλλαγής της κατεύθυνσης του παίκτη, επειδή η default τιμή κατεύθυνσης του παίκτη όταν το παιχνίδι ξεκινά είναι πάντα προς τα δεξιά. Εάν όμως η κίνηση του παίκτη είναι προς τα αριστερά τότε γίνεται προσπάθεια αλλαγής της κατεύθυνσης του παίκτη καλώντας την συνάρτηση TryTurn. Εάν τώρα ο παίκτης δεν βρίσκεται σε state Start αλλά σε state Normal, τότε απλά ελέγχουμε αν η κατεύθυνση στην οποία είναι τώρα ο παίκτης είναι διαφορετική από την κατεύθυνση που ζητείτε. Εάν ισχύει αυτό τότε καλείται και πάλι η συνάρτηση TryTurn. Εάν όχι δηλαδή η δύο κατευθύνσεις είναι ίδιες δεν γίνεται καμιά προσπάθεια αλλαγής κατεύθυνσης και τα πράγματα μένουν ως έχουν. Η συνάρτηση TryTurn ελέγχει τις τρείς διαφορετικές περιπτώσεις όπου ο παίκτης δικαιούται να κάνει αλλαγή στην κίνησή του, και να κινηθεί. Εάν ισχύει κάποια από αυτές τότε κινείται ο παίκτης δηλαδή καλείται η συνάρτηση DoTurn. Η πρώτη περίπτωση είναι εάν ο παίκτης κάνει αλλαγή στην κατεύθυνση κατά 180 μοίρες, για παράδειγμα αν κινείται προς τα πάνω(κατεύθυνση Up) και ζητηθεί να κινηθεί προς τα κάτω (Down). Η δεύτερη περίπτωση είναι όταν κινείτε μέσα στο tunel και η τρίτη περίπτωση είναι η γενική περίπτωση όπου απλά ο παίκτης κινείται σε μια κατεύθυνση και στη θέση που προσπαθεί να πάει, δικαιούται να πάει. Δηλαδή αν σε εκείνες συντεταγμένες ο τύπος (Type) της θέσης αυτής στον πίνακα TileGrid είναι Open. Η συνάρτηση DoTurn είναι υπεύθυνη για την κίνηση του παίκτη, θα κινήσει τον παίκτη. Ανάλογα με την κατεύθυνση που ζητείτε, ενημερώνεται η νέα κατεύθυνση με την νέα τιμή, η θέση του παίκτη για χ,ψ αλλάζει ανάλογα με το που κινείται τώρα. Είτε θα αλλάξουν τα χ, είτε τα ψ κατά μία μονάδα, θετικά ή αρνητικά, ανάλογα με τον αν θα κινηθεί πάνω, κάτω, δεξιά ή αριστερά. Μετά από αυτές τις κλήσεις συναρτήσεων καλείται και η συνάρτηση DoMove. Αυτή η συνάρτηση είναι υπεύθυνη για την κίνηση του παίκτη, σύμφωνα με την ταχύτητά του και τα updates που γίνονται ανά pixel. Συγκεκριμένα κάθε φορά που το updatecount είναι ίσο με την τιμή του updatesperpixel (speed του pacman κάθε πόσο πρέπει να γίνεται update), θα πρέπει ο παίκτης να κινηθεί ένα pixel στην κατεύθυνση που βρίσκεται και να γίνει reset 6

το updatecount. Επιπλέον εδώ γίνεται ο έλεγχος αν είναι στην άκρια του ενός από τα δύο tunnel τότε να βρεθεί στην άκρια του άλλου tunnel. Αλλιώς αν απλά βρίσκεται στο tunnel αλλά όχι στην άκρια να κινηθεί απλά κατά μια θέση στην ανάλογη κατεύθυνση. Στη συνέχεια καλείται η συνάρτηση Draw, όπου σχεδιάζει τον παίκτη στην καινούρια του θέση και κατεύθυνση ανάλογα με τις αλλαγές που έχουν γίνει πιο πάνω. Επειδή η θέση του παίκτη για χ, ψ έχει αλλάξει τότε ο παίκτης θα σχεδιαστεί σε αυτές τις καινούριες θέσεις και έτσι θα φαίνεται ότι έχει κινηθεί. Τώρα υπάρχουν τρείς διαφορετικές περιπτώσεις που πρέπει να ελεγχθούν έτσι ώστε να ξέρουμε ποια εικόνα του παίκτη θα σχεδιάσουμε. Στην περίπτωση που ο παίκτης είναι σε State Start τότε σχεδιάζεται η εικόνα με τον full pacman δηλαδή εκεί όπου είναι ολόκληρος μια κίτρινη μπάλα. Εάν το State είναι Normal τότε σχεδιάζονται τα texture του ανάλογα με το αν θα φαίνεται ολόκληρος ή όχι, που εξαρτάται με το πια κίνηση κάνει για να φαίνεται ότι τρώει και επιπλέον από το αν περνά από το ένα tunnel στο άλλο. Στο State Dying, σχεδιάζεται το texture που πεθαίνει. 2.4 Διαδικασία κατά την οποία ο Pac-Man τρώει τις κουκκίδες Εάν στον πίνακα TileGrid στην θέση στην οποία πρόκειται να κινηθεί ο Pac-Man υπάρχει κουκκίδα, τότε το σκορ αυξάνεται κατά 10 πόντους και ενημερώνεται η κατάσταση της θέσης αυτής στον πίνακα TileGrid ότι πλέον δεν υπάρχει κουκκίδα. Εάν τώρα αυτή η κουκκίδα είναι και δυναμωτική κουκκίδα προστίθενται ακόμα 40 πόντοι έτσι ώστε στο σύνολο να γίνουν 50. Ακόμα σε αυτή την περίπτωση τα φαντασματάκια γίνονται μπλε και αρχικοποιείται η μεταβλητή που μετράει τα φαντασματάκια που έχει φάει με μηδέν. Αυτή η μεταβλητή θα βοηθήσει στην περίπτωση που κάθε φορά που τρώγεται ένα ακόμη φαντασματάκι οι πόντοι που δίνονται για αυτό αυξάνονται ανάλογα από τα πόσα άλλα φαντασματάκια έχουν φαγωθεί. Επιπλέον ενημερώνεται και πάλι η κατάσταση του πίνακα σε αυτή τη θέση ότι δεν υπάρχει πλέον δυναμική κουκκίδα. Στην περίπτωση όπου εμφανίζεται φρούτο(υπάρχει το φρούτο) και η θέση του παίκτη γίνει ίση με τις συντεταγμένες που εμφανίζεται το φρούτο, τότε σημαίνει πως ο παίκτης τρώει το φρούτο και έτσι προστίθενται στους πόντους του οι πόντοι που του αντιστοιχούν. Στην περίπτωση όμως του φρούτο, το φρούτο εμφανίζεται μόνο για κάποιο χρονικό διάστημα. Μετά από έναν προκαθορισμένο χρόνο θεωρούμε ότι δεν υπάρχει φρούτο πλέον σε αυτές τις συντεταγμένες. Τα φρούτα εμφανίζονται για ένα συγκεκριμένο χρονικό διάστημα και μόνο όταν οι κουκκίδες στον πίνακα είναι 180 ή 80, και δεν εμφανίζονται περισσότερες από 2 φορές σε κάθε επίπεδο. 2.5 Collision detection μεταξύ των φαντασμάτων και του Pac-Man Η διαδικασία κατά την οποία εντοπίζονται collisions μεταξύ του παίκτη και των φαντασμάτων, είναι σημαντική γιατί σε αυτή την περίπτωση είτε πεθαίνει ο παίκτης είτε κάποιο από τα φαντάσματα. 7

Υπολογίζονται τα τετράγωνα που αποτελούν την περιοχή τόσο γύρω από τον Pac-Man, όσο και γύρω από τα φαντασματάκια. Εάν υπάρχει intersection μεταξύ τους τότε σημαίνει πως υπάρχει σύγκρουση μεταξύ τους και ένας από τους δύο πρέπει να πεθάνει Εάν το φαντασματάκι είναι μπλε σημαίνει προς πρέπει να πεθάνει αυτό και ανάλογα με τον αριθμό των φαντασμάτων που έχουν φαγωθεί αυξάνονται και οι πόντοι που προστίθενται. Εάν όμως το φαντασματάκι δεν είναι μπλε σημαίνει πως ο Pac - Man θα πεθάνει. 2.6 Φαντασματάκια: Αλγόριθμοι και Διαδικασίες Τα φαντασματάκια αποτελούν ένα σημαντικό κομμάτι στο παιχνίδι. Είναι αυτά με βάση τα οποία αλλάζει η κατεύθυνση του Pac-Man, λόγω του ότι προσπαθεί να τα αποφύγει και έτσι κάνει τις ανάλογες κινήσεις. Υπάρχουν 4 είδη φαντασμάτων : 1. Blinky 2. Inky 3. Clyde 4. Pinky O Blinky είναι το κόκκινο φαντασματάκι και είναι το πιο έξυπνο γιατί πάει κατευθείαν στο Pac- Man. Ο Inky είναι το γαλάζιο φαντασματάκι, το οποίο κινείται κάπως τυχαία. Είναι o αποπροσανατολισμένος που με την βοήθεια του Blinky προσπαθεί να βρει τον Pac-Man. Το τρίτο φαντασματάκι είναι ο Clyde. Έχει χρώμα πράσινο και είναι o πιο παράξενος. Όταν βρίσκεται κοντά στο Pac-Man (8 tiles), φεύγει και πηγαίνει στην αγαπημένη του γωνιά, ενώ όταν είναι μακριά του, προσπαθεί να πλησιάσει με τη βοήθεια του Blinky. Το τελευταίο φαντασματάκι είναι ο Pinky ο πρωτοπόρος. Έχει χρώμα ροζ και προσπαθεί να πηγαίνει δυο πλακάκια μπροστά από τον Pac-Man. Στο πρόγραμμα δημιουργήσαμε μια κλάση που αφορά τα φαντασματάκια και τις ενέργειες τους. Αρχικά δηλώσαμε τα ονόματα του καθενός, τα οποία αναφέρθηκαν πιο πάνω, για την μετέπειτα υλοποίηση των τεσσάρων ξεχωριστών αλγορίθμων κίνησης. Επιπλέον δηλώσαμε τις μετέπειτα καταστάσεις που θα αντιμετωπίσουν : Home, Scatter, Attack, Blue, Dead. Στην αρχή, για κάθε φαντασματάκι δημιουργούμε τη βάση του, το χρώμα του, τα μάτια του, ορίζουμε τη ταχύτητα του με την συνάρτηση UpdateSpeed() και το τοποθετούμε στο σπιτάκι, από το οποίο θα ξεκινήσει πιο μετά το κυνήγι με τη βοήθεια της συνάρτησης Reset(..). Η συνάρτηση UpdateSpeed() καλείται από την Reset(..) και ελέγχει τη ταχύτητα κίνησης ανάλογα με το αν το φαντασματάκι είναι στο σπίτι, αν είναι σε μπλε κατάσταση, δηλαδή ο Pac- Man έχει φάει τη δυναμωτική μπαλίτσα, αν είναι μέσα στο τούνελ και αν είναι το κόκκινο φαντασματάκι. Σε όλες τις περιπτώσεις η ταχύτητα αυξάνεται αλλά με διαφορετικά ποσοστά εκτός στη περίπτωση που το φαντασματάκι είναι ο Blinky και οι μπαλίτσες είναι μικρότερες από ένα αριθμό σταθεράς χρόνου. Σε αυτή τη περίπτωση ο ταχύτητα μειώνεται κατά μια μονάδα. 8

Στο πρόγραμμα μας υπάρχει η συνάρτηση Update() που καθορίζει τη κίνηση σε όποια κατάσταση και αν βρίσκεται το φαντασματάκι, γιατί γίνονται έλεγχοι και καθορίζεται η κατάσταση στην οποία βρίσκεται μέσω της καλούμενης συνάρτησης StateEval(). Η StateEval() συνάρτηση διαχωρίζει τις καταστάσεις Home, Scatter, Attack, Blue και Dead και στο τέλος αναβαθμίζει την προηγούμενη κατάσταση με τη πιο πρόσφατη. Ακόμη η Update() καλεί και τη συνάρτηση Move(), μέσω της οποίας γίνεται αναβάθμιση κίνησης ανά pixel και αναβάθμιση ταχύτητας (UpdateSpeed()) για να επιβεβαιωθούμε ότι όλα θα τρέξουν σωστά μετά από όλες αυτές τις αλλαγές και τις καταστάσεις του παιχνιδιού. Γίνεται ακόμη έλεγχος κατεύθυνσης και επιπλέον έλεγχος για την ειδική περίπτωση του τούνελ. Στην κατάσταση Home, γίνονται έλεγχοι αν πρέπει το φαντασματάκι πιο μετά να πάει αριστερά, δεξιά, να επιτεθεί ή να περιηγηθεί. Επιπλέον, το φαντασματάκι βγαίνει έξω από το σπιτάκι όταν είναι μπροστά του η έξοδος και κινείται προς το κέντρο όταν είναι προς τα κάτω του σπιτιού και τελειώνει ο χρόνος. Όταν δεν τελειώνει ο χρόνος πάει πάνω κάτω. Στην κατάσταση Scatter γίνεται έλεγχος αν πρέπει να αντιστραφεί η κατεύθυνση του φαντάσματος, γίνεται αναβάθμιση του χρόνου και έλεγχος μετάβασης στη κατάσταση επίθεσης ανάλογα με τη σύγκριση των χρόνων. Επιπλέον καλείται η συνάρτηση AIScatter(), με την βοήθεια της οποίας γίνεται αλλαγή κατεύθυνσης αν είναι απαραίτητο, το οποίο συμβαίνει μόνο σε μια διασταύρωση. Ακόμη γίνεται έλεγχος των διάφορων tiles. Για παράδειγμα, αν η τελευταία διασταύρωση ήταν αγαπημένο tile και η συγκεκριμένη που είναι το φαντασματάκι τη προκαθορισμένη στιγμή δεν είναι, τότε αγνοείται. Διαφορετικά βρίσκει ένα κοντινό tile και πάει σε αυτό. Γενικά, η συνάρτηση AIScatter() καθοδήγα το φαντασματάκι στην αγαπημένη του περιοχή στο πίνακα. Στη συνέχεια ακολουθεί η κατάσταση, όπου το φαντασματάκι πεθαίνει. Γίνεται έλεγχος για αντιστροφή κατεύθυνσης ή καλείται η συνάρτηση AIDead(). Επιπλέον γίνεται έλεγχος μετάβασης στο σπιτάκι μετά το θάνατο του φαντάσματος. Με τη συνάρτηση AIDead() όταν ένα φαντασματάκι ευθυγραμμιστεί με την είσοδο του σπιτιού πάει κάτω προς το σπίτι. Όταν βρίσκεται σε ένα tile, κατευθύνεται προς τα τετράγωνα δεξιά και αριστερά του σπιτιού, έπειτα κινείται λίγο αριστερά ή δεξιά έτσι ώστε να ευθυγραμμιστεί με την είσοδο του σπιτιού. Επιπλέον όταν είναι σε μια διασταύρωση, κατευθύνεται στο πιο κοντινό τετράγωνο κοντά στο σπίτι. Όσο αφορά τη κατάσταση επίθεσης, γίνεται έλεγχος για αντιστροφή κατεύθυνσης ή καλείται η συνάρτηση AIAttack(). Επιπλέον γίνεται έλεγχος μετάβασης στη κατάσταση διασκορπισμού Scatter. Η συνάρτηση AIAttack() οδηγά τα φαντασματάκια στο Pac-Man. Γίνεται αλλαγή κατεύθυνσης αν είναι αναγκαίο. Ωστόσο υπάρχει μια περίπτωση που πρέπει οπωσδήποτε να αλλάξουμε κατεύθυνση και είναι η περίπτωση που ένα φαντασματάκι βρίσκεται σε μια διασταύρωση. Ακόμη σε αυτή τη συνάρτηση γίνεται ταυτοποίηση των φαντασμάτων έτσι ώστε να καθοριστεί το τι πρέπει να κάνει το κάθε φαντασματάκι ξεχωριστά. Καλείται η συνάρτηση AttackAIBlinky() για τον Blinky, η AttackAIPinky() για τον Pinky, η AttackAIInky() για τον Inky και τέλος η AttackAIClyde() για τον Clyde. Η καθεμία αντίστοιχη συνάρτηση καθορίζει τη συμπεριφορά του κάθε φαντάσματος. Η AttackAIBlinky() βοηθά στο να βρίσκει το φάντασμα κατευθείαν το Pac-Man με τη βοήθεια της συνάρτησης FindDirection(). Η AttackAIPinky()βοηθά στο να κατευθύνεται το φαντασματάκι δυο τετράγωνα μπροστά από το Pac-Man με τη βοήθεια της συνάρτησης FindDirection() και της 9

NextTile( ). Η συνάρτηση AttackAIInky() βοηθά το φαντασματάκι να κινείται τυχαία και δίνει την ευκαιρία στον Inky να πάει στο τετράγωνο που είναι απέναντι από το Pac-Man σε σχέση με τη θέση του Blinky. Τέλος η συνάρτηση AttackAIClyde(), κάνει τον Clyde να φαίνεται παράξενος στον χρήστη. Όταν ο Clyde βρίσκεται σε απόσταση 8 tiles από το Pac-Man θα πάει στην αγαπημένη του γωνιά (AIScatter()), ενώ όταν είναι μακριά θα πλησιάσει το Pac-Man με τη βοήθεια του Blinky (AttackAIBlinky()). Η τελευταία κατάσταση είναι η Blue, όπου τα φαντασματάκια γίνονται μπλε λόγω της δυναμικής μπαλίτσας. Γίνεται έλεγχος για αντιστροφή κατεύθυνσης ή καλείται η συνάρτηση AIAttack(). Επιπλέον γίνεται έλεγχος μετάβασης στη κατάσταση Attack. Στο πρόγραμμα χρησιμοποιούμε επιπλέον τις συναρτήσεις: LockTimer() : αναβαθμίζει το χρόνο όταν κλειδώνουμε το παιχνίδι και επιβεβαιώνουμε ότι αντιμετωπίζεται το χάσιμο του χρόνου. SetBlinky(): χρησιμοποιείται από το γαλάζιο φαντασματάκι για να τριγυρνά αποδοτικά μέσα στο λαβύρινθο με τη βοήθεια του Blinky. AIOverride(): κατευθύνει όλα τα φαντασματάκια σε ορισμένη κατεύθυνση για να βοηθήσει το Pac-Man να ξεφύγει. OppositeDirection(): δίνει την αντίθετη κατεύθυνση από αυτή που δίνουμε. FindDirection() : δίνει την επόμενη κατεύθυνση που πρέπει να ακολουθήσουμε για τον προορισμό μας. Tile NextTile(): δίνει το επόμενο πλακάκι στη συγκεκριμένη κατεύθυνση από τη θέση του φαντάσματος. public static Tile NextTile(): δίνει το επόμενο πλακάκι στη συγκεκριμένη κατεύθυνση από συγκεκριμένη θέση. IsAJunction(): επιβεβαιώνει αν βρισκόμαστε σε διασταύρωση Draw(): σχεδιάζει το περιβάλλον του παιχνιδιού (φαντασματάκια) RenderSprite(): βοηθά στο σχεδιασμό (textures) 3. Kinect 3.1 Εισαγωγή Το Kinect κυκλοφόρησε από την Microsoft (στην Ευρώπη στις 10 Νοεμβρίου 2010) σαν add-on για το XBOX 360. [1] Ελάχιστες μέρες μετά την κυκλοφορία του hackers κατάφεραν να σπάσουν τον κώδικα ελέγχου του Kinect. Έτσι, η Microsoft πήρε την απόφαση να κυκλοφορήσει επίσημα SDK. [2] Στις 16 Ιουνίου 2010 κυκλοφόρησε το Kinect SDK beta 2 για τα Windows 7 (32bit και 64bit). Ήδη η Microsoft ετοιμάζει να κυκλοφορήσει Kinect ειδικά για Windows. [3] Το Kinect αποτελείται από τρία υποσυστήματα: το οπτικό, το ακουστικό και το κινητό. Το οπτικό υποσύστημα αποτελούν ένα depth projector (εκπέμπει ακτίνες infrared), ένα depth sensor και μια RGB κάμερα. Η RGB κάμερα έχει resolution 640x480 στα 30 frames το δευτερόλεπτο. Το ακουστικό υποσύστημα αποτελούν τέσσερα μικρόφωνα, που 10

αναγνωρίζονται σαν ένα μικρόφωνο στα Windows, και τον audio processor. Η χρήση των τεσσάρων μικροφώνων είναι ο εντοπισμός ήχων από διάφορες θέσεις στο χώρο, ενώ ο audio processor επεξεργάζεται τους ήχους και αφαιρεί ήχους παιχνιδιού και ήχους κίνησης. Τέλος, το κινητό υποσύστημα του Kinect αποτελεί ο κορμός που το στηρίζει. Η Microsoft θέλοντας να δώσει το ελεύθερο στον χρήστη να τοποθετήσει το Kinect όπου επιθυμεί, έδωσε την δυνατότητα κίνησης του κορμού μέχρι και 27 Ο ούτως ώστε το Kinect να μπορεί να εντοπίζει τον χρήστη από οποιοδήποτε ύψος. 3.2 Βήματα εγκατάστασης Kinect στο project μας 1. [2] Εγκατάσταση του Kinect SDK v1.0 beta 2 για Windows 7 64bit. 2. Σύνδεση του Kinect στον υπολογιστή μέσω USB port. (Αναμονή μέχρι να αναγνωριστεί το Kinect από τον υπολογιστή) 3. Δημιουργία του Project στο Microsoft Visual Studio 2010. 4. Εισαγωγή της βιβλιοθήκη για το Kinect στα references του project. Add Reference.NET tab Microsoft.Research.Kinect OK 5. Εισαγωγή της βιβλιοθήκης για το Kinect στον κώδικα. using Microsoft.Research.Kinect.Nui; [για χρήση ήχου: using Microsoft.Research.Kinect.Audio;] 3.3 Επεξήγηση κώδικα Ο πίνακας Runtime.Kinect έχει μέγεθος, όσα είναι τα συνδεδεμένα Kinect στον υπολογιστή. Έτσι, γίνεται η ένωση με το Kinect και το αρχικοποιούμε ζητώντας να γίνεται χρήση του αλγόριθμου για εντοπισμό σκελετού. Σημαντικό να σημειώσουμε ότι το Kinect χρησιμοποιεί το Depth Map και με διάφορους αλγόριθμους για skeletal tracking μας επιστρέφει συγκεκριμένα σημεία του σώματος (π.χ. ώμους, αγκώνες, χέρια, κεφάλι κλπ.). Τέλος, ρυθμίσαμε το ElevationAngle στις 20 μοίρες για τον καλύτερο εντοπισμό μας στη παρουσίαση του demo (στα παιχνίδια του xbox 360 υπάρχει αλγόριθμος για να ρυθμίζεται αυτόματα). 11

Πιο πάνω παρουσιάζεται το πιο σημαντικό κομμάτι του κώδικά μας, όσον αφορά τον χειρισμό. Με βάση το κέντρο του χάρτη μας δημιουργούμε ένα τετράγωνο, όπου θεωρούμε αυτή την περιοχή ως νεκρή (στη δεξιά εικόνα με γκρίζο χρώμα). Όταν ο χρήστης πάρει το χέρι του έξω από την νεκρή περιοχή, τότε ανάλογα με τη διαφορά που σημειώνεται όσον αφορά τους άξονες υπολογίζουμε πια κίνηση θέλει να εκτελέσει ο pac-man. Έτσι, ο χάρτης του παιχνιδιού χωρίζεται ουσιαστικά στα πέντε μέρη που φαίνεται στην δεξιά εικόνα. 4. Οθόνες από το παιχνίδι ΑΡΧΙΚΗ ΟΘΟΝΗ Αρχικά, παρουσιάζονται και τα δύο χέρια, ούτως ώστε να επιλέξει ο χρήστης με πιο χέρι θέλει να παίξει. Όταν κάποιο από τα δύο χέρια εντοπιστεί εντός του τετραγώνου, τότε αυτό επιλέγεται. 12

ΟΘΟΝΗ ΠΑΙΧΝΙΔΙΟΥ Ανάλογα με το χέρι που επιλέχθηκε θα εμφανίζεται το ανάλογο χέρι στην οθόνη για βοήθεια προς τον χρήστη. Επίσης, κάτω δεξιά με την ένδειξη DEBUG παρουσιάζεται η επιλογή του χρήστη. ΟΘΟΝΗ ΣΚΟΡ & ΕΠΙΛΟΓΩΝ Όταν το παιχνίδι τελειώσει, παρουσιάζονται τα 10 high scores και οι επιλογές για Νέο Παιχνίδι ή για Έξοδο από το παιχνίδι. Όταν εντοπιστούν τα ακροδάχτυλα του χρήστη (με βάση την εικόνα) να αγγίζουν κάποια από τις δύο επιλογές τότε εκτελείται η επιλογή αυτή. 5. References [1] BBC News. (2010). Kinect hacked days after release. [Online]. Available: http://www.bbc.co.uk/news/technology-11742236 [2] Microsoft. (2011). Kinect for Windows. [Online]. Available: http://kinectforwindows.org/ [3] Tina. (2010). The tech behind Kinect: Major subsystems, RGB camera, Depth Sensor. [Online]. Available: http://channel9.msdn.com/shows/techwithtina/the-tech-behindkinect-major-subsystems-rgb-camera-depth-sensor 13