Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών"

Transcript

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ: ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΕΥΝΗΤΙΚΗ ΟΜΑΔΑ ΑΛΛΗΛΕΠΙΔΡΑΣΗΣ ΑΝΘΡΩΠΟΥ-ΥΠΟΛΟΓΙΣΤΗ Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών Διαμαντή Βασιλείου του Πέτρου Αριθμός Μητρώου 6240 Θέμα «Σχεδίαση και αξιολόγηση χωρο-ευαίσθητης εφαρμογής σε συσκευή Android» Επιβλέπων κ. Νικόλαος Αβούρης Αριθμός Διπλωματικής Εργασίας: Πάτρα, Σεπτέμβριος

2 ΠΙΣΤΟΠΟΙΗΣΗ Πιστοποιείται ότι η Διπλωματική Εργασία με θέμα «Σχεδίαση και αξιολόγηση χωρο-ευαίσθητης εφαρμογής σε συσκευή Android» Του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Διαμαντή Βασιλείου του Πέτρου Αριθμός Μητρώου: 6240 Παρουσιάστηκε δημόσια και εξετάστηκε στο Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών στις.../../2013 Ο Επιβλέπων Ο Διευθυντής του Τομέα Καθηγητής κ. Νικόλαος Αβούρης 2

3 Αριθμός Διπλωματικής Εργασίας: Θέμα: «Σχεδίαση και αξιολόγηση χωρο-ευαίσθητης εφαρμογής σε συσκευή Android» Επιβλέπων: Καθηγητής κ. Νικόλαος Αβούρης Φοιτητής : Διαμαντής Βασίλειος του Πέτρου Περίληψη Η διπλωματική αυτή εργασία, εκπονήθηκε στο Εργαστήριο της Ερευνητικής Ομάδας Αλληλεπίδρασης Ανθρώπου Υπολογιστή, του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών του Πανεπιστημίου Πατρών, υπό την επίβλεψη του καθ. Νικόλαου Αβούρη. Στόχος της εργασίας είναι η σχεδίαση και αξιολόγηση χωροευαίσθητης εφαρμογής σε συσκευή Android. Για την μελέτη αυτή, αναπτύχθηκε ένα παιχνίδι διάχυτου υπολογισμού, το οποίο υποστηρίζει την χρήση του από πολλούς παίκτες ταυτόχρονα και μπορεί να παιχτεί παράλληλα σε διαφορετικές πόλεις από διαφορετικές ομάδες παικτών. Το παιχνίδι αυτό ανήκει σε ένα αναδυόμενο είδος παιχνιδιών που αναμιγνύουν την πραγματικότητα με τον εικονικό ψηφιακό κόσμο, χρησιμοποιώντας τον πραγματικό χώρο σαν το περιβάλλον του παιχνιδιού. Η παρούσα διπλωματική εργασία ασχολείται με ένα παιχνίδι πολλών παικτών εκπαιδευτικού χαρακτήρα, φτιαγμένη σε πλατφόρμα android. Σκοπός της εργασίας είναι η αποσφαλμάτωση του παιχνιδιού και η ενσωμάτωση νέων τεχνολογιών σε αυτό με σκοπό την καλύτερη λειτουργία του,τη βελτίωση της εμφάνισης και της ιστορίας του, και την εξέλιξή του σε ένα πολύ καλό εργαλείο για την εξερεύνηση της πόλης. Για την ανάπτυξή του ακολουθήθηκε ένα επαναληπτικό μοντέλο σχεδιασμού με την αξιολόγηση να παίρνει μέρος με διάφορες τεχνικές και μεθόδους στα διάφορα στάδια ανάπτυξης. Η υλοποίηση πραγματοποιήθηκε για κινητά τηλέφωνα με λειτουργικό σύστημα Android, μια επίσης καινούργια πλατφόρμα για φορητές συσκευές από την Google και την ΟΗΑ. 3

4 ΕΥΧΑΡΙΣΤΙΕΣ Θα ήθελα να ευχαριστήσω ιδιαίτερα τον καθηγητή κ. Νικόλαο Αβούρη για την εμπιστοσύνη που μου έδειξε δίνοντάς μου αυτή τη διπλωματική εργασία, αλλά και για τις γνώσεις και την έμπνευση που μου προσέφερε μέσα από τα μαθήματά του κατά τη διάρκεια της φοίτησής μου στο Πανεπιστήμιο Πατρών. Επίσης ευχαριστώ ιδιαίτερα τον υποψήφιο διδάκτορα κ. Χρήστο Σιντόρη για τη στήριξή του, τις συμβουλές του, τη συνεχή επικοινωνία και την υπομονή του, που συνέβαλε ουσιαστικά στην εκπόνηση αυτής της διπλωματικής εργασίας. 4

5 ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΗ ΚΕΦΑΛΑΙΟ PERVASIVE GAMES GAMEPLAY ΜΑΓΙΚΟΣ ΚΥΚΛΟΣ 1.2 ΠΑΙΧΝΙΔΙΑ ΔΙΑΧΥΤΟΥ ΥΠΟΛΟΓΙΣΜΟΥ ΣΠΑΖΟΝΤΑΣ ΤΟ ΜΑΓΙΚΟ ΚΥΚΛΟ ΤΑ ΠΑΙΧΝΙΔΙΑ ΔΙΑΧΥΤΟΥ ΥΠΟΛΟΓΙΣΜΟΥ ΚΑΙ Ο ΜΑΓΙΚΟΣ ΚΥΚΛΟΣ ΧΩΡΙΚΗ ΕΠΕΚΤΑΣΗ (Spatial expansion) ΧΡΟΝΙΚΗ ΕΠΕΚΤΑΣΗ (Temporal expansion) ΚΟΙΝΩΝΙΚΗ ΕΠΕΚΤΑΣΗ (Social expansion) ΚΕΦΑΛΑΙΟ 2 ΤΕΧΝΟΛΟΓΙΕΣ ΕΙΣΑΓΩΓΗ 2.2 ANDROID 2.3 ΤΙ ΕΙΝΑΙ ΤΟ ANDROID 2.4 ΓΙΑΤΙ ANDROID 2.5 QR CODES 2.6 GOOGLE CLOUD MESSAGING 2.7 GOOGLE MAPS ΚΕΦΑΛΑΙΟ 3 Η ΑΡΧΙΚΗ ΕΦΑΡΜΟΓΗ ΠΑΛΕΡΜΟ ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ ΤΟ ΠΑΙΧΝΙΔΙ ΡΟΛΟΙ ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΕΚΚΙΝΗΣΗ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ 5

6 3.1.5 ΤΡΟΠΟΣ ΠΑΙΧΝΙΔΙΟΥ Έναρξη Κατά τη διάρκεια της ημέρας Κατά τη διάρκεια της νύχτας 3.2 ΑΝΤΙΣΤΑΣΗ (RESISTANCE) ΜΕΤΑΦΟΡΑ ΣΤΟΝ ΧΩΡΟ ΤΩΝ PERVASIVE GAMES ΑΡΧΙΚΗ ΙΔΕΑ ΠΑΙΧΝΙΔΙΟΥ ΡΥΘΜΙΣΕΙΣ ΠΑΙΧΝΙΔΙΟΥ ΠΕΡΙΟΧΗ ΠΑΙΧΝΙΔΙΟΥ ΕΡΓΑΛΕΙΑ ΥΠΟΔΟΜΗΣ ΕΙΔΟΣ ΣΕ ΠΟΙΟΥΣ ΑΠΕΥΘΥΝΕΤΑΙ GAMEPLAY ΒΑΣΙΚΑ ΣΤΟΙΧΕΙΑ ΔΙΑΧΥΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΧΟΙ ΠΑΙΧΝΙΔΙΟΥ Ο ΚΟΣΜΟΣ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ ΙΣΤΟΡΙΑ -STORYLINE ΣΧΕΔΙΑΣΜΟΣ ΚΑΝΟΝΕΣ ΥΛΟΠΟΙΗΣΗ Περίληψη Μηχανή Καταστάσεων Επικοινωνία ΔΙΕΠΙΦΑΝΕΙΕΣ ΧΡΗΣΤΗ ΚΕΦΑΛΑΙΟ 4 ΣΚΕΨΕΙΣ ΓΙΑ ΒΕΛΤΙΩΣΗ ΑΡΧΙΚΕΣ ΣΚΕΨΕΙΣ 4.2 ΒΕΛΤΙΩΣΗ ΤΟΥ SERVER ΚΕΦΑΛΑΙΟ 5 ΕΛΕΓΧΟΣ ΚΑΙ ΒΕΛΤΙΩΣΗ ΠΡΟΒΛΗΜΑ 1 ο Έρευνα προβλήματος Επίλυση προβλήματος Αλλαγή 1 η : Γενικές αλλαγές Αλλαγή 2 η : Προετοιμασία για πέρασμα σε GCM 6

7 5.2 ΠΡΟΒΛΗΜΑ 2 ο Επικοινωνία με το server Επίλυση του προβλήματος Μεθοδολογία επίλυσης Κώδικας 5.3 ΔΟΚΙΜΕΣ ΕΠΙ ΠΛΕΟΝ ΔΙΟΡΘΩΣΕΙΣ ΕΝΣΩΜΑΤΩΣΗ ΥΠΗΡΕΣΙΑΣ GCM ΚΕΦΑΛΑΙΟ 6 ΠΡΟΣΘΗΚΗ ΥΠΟΘΕΣΗΣ ΚΑΙ ΑΛΛΑΓΗ LAYOUT ΒΗΜΑ 1 ο ΔΗΜΙΟΥΡΓΙΑ ΤΟΥ ΚΟΣΜΟΥ ΟΠΟΥ ΕΞΕΛΙΣΣΕΤΑΙ ΤΟ ΠΑΙΧΝΙΔΙ 6.2 ΒΗΜΑ 2 ο ΔΗΜΙΟΥΡΓΙΑ ΧΑΡΑΚΤΗΡΩΝ ΚΑΙ ΥΠΟΒΑΘΡΟΥ 6.3 ΒΗΜΑ 3 ο ΙΣΤΟΡΙΑ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ 6.4 ΒΗΜΑ 4 ο ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΣΤΟΙΧΩΝ ΕΙΚΟΝΩΝ ΚΑΙ ΟΠΤΙΚΩΝ ΕΡΕΘΙΣΜΑΤΩΝ 6.5 ΒΗΜΑ 5 ο ΕΝΣΩΜΑΤΩΣΗ ΤΗΣ ΙΣΤΟΡΙΑΣ ΣΤΟ ΠΑΙΧΝΙΔΙ ΚΑΙ ΔΙΗΓΗΣΗ ΚΕΦΑΛΑΙΟ 7 ΑΞΙΟΛΟΓΗΣΗ ΟΙ ΑΛΛΑΓΕΣ 7.2 ΔΟΚΙΜΗ 7.3 ΑΝΑΛΥΣΗ ΤΩΝ ΑΠΟΤΕΛΕΣΜΑΤΩΝ 7.4 ΣΥΜΠΕΡΑΣΜΑΤΑ ΒΙΒΛΙΟΓΡΑΦΙΑ

8 ΕΙΣΑΓΩΓΗ Αν έπρεπε να περιγράψουμε την εποχή στην οποία ζούμε με μια μόνο λέξη, σίγουρα αυτή η λέξη θα ήταν τεχνολογία. Ζούμε σε μια εποχή στην οποία η τεχνολογία εξελίσσεται με αλματώδη βήματα και οι δυνατότητες που μας προσφέρει είναι ατελείωτες σε βαθμό που ίσως να τρομάζουν. Η εξέλιξη στον τομέα των υπολογιστών και των επικοινωνιών είναι τέτοια που ο καθένας έχει εύκολα πρόσβαση στο διαδίκτυο, το οποίο αποτελεί μια αστείρευτη πηγή πληροφοριών αλλά και μέσον επικοινωνίας που φέρνει τους ανθρώπους πιο κοντά. Επιπρόσθετα η εξέλιξη στις φορητές συσκευές σε συνδυασμό με την κινητή τηλεφωνία κυριολεκτικά επιτρέπουν την επικοινωνία με το διαδίκτυο από οπουδήποτε. Έτσι δεν χρειάζεται ο προσωπικός υπολογιστής ή το laptop, το οποίο αν και φορητό βάζει μεγάλους περιορισμούς, για να υπάρχει πρόσβαση στα mail ή για την επικοινωνία με οποιονδήποτε, οπουδήποτε. Αυτή την εξέλιξη της τεχνολογίας δε θα μπορούσε παρά να ακολουθήσει και η ανάπτυξη παιχνιδιών που εκμεταλλεύονται στο έπακρο τις νέες αυτές δυνατότητες που προσφέρονται απλόχερα. Μια νέα κατηγορία παιχνιδιών δημιουργήθηκε, τα λεγόμενα παιχνίδια διάχυτου υπολογισμού (pervasive games), τα οποία ουσιαστικά επιχειρούν το ακατόρθωτο, την ανάμειξη του πραγματικού κόσμου με τον ψηφιακό, ώστε να δώσουν το μέγιστο που μπορεί να προσφέρει καθένας από τους δύο κόσμους. Ο πραγματικός κόσμος χρησιμοποιείται ως περιβάλλον του παιχνιδιού και η ψηφιακή φορητή συσκευή που χρησιμοποιούμε για να παίξουμε αποτελεί επέκταση αυτού. Η παρούσα διπλωματική εργασία ασχολείται με ένα παιχνίδι πολλών παικτών εκπαιδευτικού χαρακτήρα, φτιαγμένη σε πλατφόρμα android. Σκοπός της εργασίας είναι η αποσφαλμάτωση του παιχνιδιού και η ενσωμάτωση νέων τεχνολογιών σε αυτό με σκοπό την καλύτερη λειτουργία του καθώς και η βελτίωση της εμφάνισης και της ιστορίας του. 8

9 ΚΕΦΑΛΑΙΟ PERVASIVE GAMES Τα παιχνίδια διάχυτου υπολογισμού (pervasive games) είναι παιχνίδια η εξέλιξη των οποίων σχετίζεται μέσω κάποιας συνθήκης με την τοποθεσία στην οποία βρίσκεται ο παίκτης. Αυτό σημαίνει πως για παράδειγμα θα πρέπει ο παίκτης να βρεθεί στην τάδε πλατεία ή στη δείνα εκκλησία ώστε να του επιτραπεί η πρόσβαση στη συνέχεια του παιχνιδιού. Κάτι τέτοιο απαιτεί τη χρήση τεχνολογίας για τον εντοπισμό της θέσης του παίκτη, για παράδειγμα μέσω δορυφόρου (GPS) χρησιμοποιώντας την αντίστοιχη δυνατότητα του κινητού του τηλεφώνου. Τα παιχνίδια αστικού περιβάλλοντος (urban games) ή παιχνίδια στο δρόμο (street games) όπως είναι αλλιώς γνωστά, είναι συνήθως παιχνίδια για πολλούς παίχτες που βασίζονται σε κάποια τεχνολογία εντοπισμού θέσης και συνήθως παίζονται σε αστικό περιβάλλον, δηλαδή μέσα σε κτίρια και στους δρόμους της πόλης. (Wikipedia) GAMEPLAY Ο Johan Huizinga συχνά θεωρείται σαν ο «πατέρας» της σπουδής των παιχνιδιών, βασιζόμενος στη φιλοσοφική και ανθρωπολογική δουλειά που έχει κάνει κατά τη δεκαετία του Ο Huizinga, λοιπόν περιγράφει τον όρο play ως: «Ελεύθερη δραστηριότητα που στέκεται συνειδητά έξω από τη συνηθισμένη ζωή αφού είναι μη σοβαρή, αλλά παράλληλα απορροφά τους παίκτες έντονα και εντελώς. Είναι μια δραστηριότητα που συνδέεται με μη ουσιώδες ενδιαφέρον και χωρίς κάποιο κέρδος από αυτήν. Προχωράει μέσα στα δικά της χρονικά και χωρικά όρια σύμφωνα με κανόνες και μεθοδευμένο τρόπο. Προωθεί τη δημιουργία κοινωνικών ομάδων, που τείνουν να περιβάλουν τους εαυτούς τους με μυστικότητα και τονίζουν τις διαφορές τους από τον κοινό κόσμο με μεταμφιέσεις ή άλλα μέσα.» (Huizinga, 1938) Εν ολίγοις ο Huizinga περιγράφει τον όρο play σαν μια τελετουργική δραστηριότητα που συμβαίνει έξω από τη συνηθισμένη ζωή και ακολουθεί δικούς της κανόνες. Ουσιαστικά δηλαδή ο παίχτης που «απορροφάται» από το παιχνίδι βρίσκεται αποκομμένος από την πραγματικότητα και μέσα σε έναν διαφορετικό κόσμο, αυτόν που ορίζεται από τους κανόνες του παιχνιδιού. Το παιχνίδι λοιπόν όπως συμπεραίνεται από τα λόγια του Huizinga συμβαίνει σε ένα συγκεκριμένο χώρο και χρόνο, που έχουν αφιερωθεί γι αυτό το σκοπό. Πολύ αργότερα οι Katie Salen και Eric Zimmerman (2004), πήραν την ιδέα του game, σαν κάτι που συμβαίνει ξεχωριστά από τη συνηθισμένη ζωή, υιοθετώντας την έννοια του μαγικού κύκλου (magic circle βλ. επόμενο υποκεφάλαιο) από τη δουλειά του Huizinga (Homo ludens, 1955). Οι Salen και Zimmerman όμως, βλέπουν το μαγικό κύκλο πιο μεταφορικά, σαν ένα εννοιολογικό όριο μεταξύ του παιχνιδιού και της 9

10 πραγματικότητας, σαν μια στενογραφία της ιδέας του ειδικού τόπου και χρόνου για την εκτέλεση του παιχνιδιού. Το όριο αυτό όμως δεν είναι πάντα απόλυτο. Επιπρόσθετα οι συγκρούσεις που συμβαίνουν κατά τη διάρκεια ενός παιχνιδιού μεταξύ των παικτών είναι τεχνητές. Οι πράξεις που θεωρητικά μπορεί να κάνει ο παίκτης στον φανταστικό κόσμο του παιχνιδιού είναι πράξεις που δεν μπορεί να κάνει στη συνηθισμένη του ζωή. Χαρακτηριστικό παράδειγμα του Markus Montola Pervasive στο Games Theory and Design, με τους μποξέρ να ανταλλάσουν γροθιές κατά τη διάρκεια ενός αγώνα, κάτι που στην πραγματικότητα όχι μόνο δεν μπορεί να κάνει κάποιος έξω στο δρόμο επειδή δε συνάδει με την ηθική, αλλά είναι και παράνομο. Μετά την περιγραφή και τον ορισμό της έννοιας του παιχνιδιού περιγράφεται η έννοια του μαγικού κύκλου, η οποία θα βοηθήσει στην καλύτερη κατανόηση τόσο της έννοιας του παιχνιδιού γενικά όσο και του νέου υποείδους που καλείται pervasive gaming ΜΑΓΙΚΟΣ ΚΥΚΛΟΣ (Magic Circle) Ο όρος αυτός εισήχθηκε από τον Ολλανδό ερευνητή Johan Huizinga ο οποίος έμελλε να γίνει σημείο αναφοράς στα έρευνα των μοντέρνων play και game μέσα από το βιβλίο του Homo Ludens (1938). Ο Huizinga θεωρεί το play έξω από την συνηθισμένη ζωή, μη χρηστικό, μη βλάσφημο, οριοθετημένο με κανόνες, εθελοντικό και ξεχωριστό χωρικά και χρονικά. Επιπρόσθετα πιστεύει ότι αφιερωμένες παραστάσεις, πραγματοποιούνται σε ειδικά αφιερωμένους χώρους ή αντίθετα, ότι αφιερωμένοι χώροι υπαγορεύουν ειδικές παραστάσεις του play ή μιας τελετουργίας. Με άλλα λόγια, στηρίζει το γεγονός ότι το play σχετίζεται με συγκεκριμένους χώρους, οι οποίοι οριοθετούνται για αυτό τον σκοπό. Κάποιοι χώροι μπορεί να είναι μικροί ή μετακινήσιμοι, αλλά είναι όλοι διακριτοί και οριοθετημένοι. Ο όρος μαγικός κύκλος, χρησιμοποιήθηκε για να περιγράψει αυτή την λογική του Huizinga. Είναι μετάφραση από την ολλανδική λέξη toovercirkel, που πιθανόν να σημαίνει τον κύκλο όπου λαμβάνουν χώρα τελετουργίες μαγείας. Ενδεικτικό το απόσπασμα που ακολουθεί: «Τυπικά μιλώντας, δεν υπάρχει καμία διάκριση μεταξύ της οριοθέτησης ενός χώρου για ένα ιερό σκοπό και της οριοθέτησης του για τους σκοπούς ενός μεγάλου play. Η σκακιέρα και το γήπεδο του τένις δεν μπορούν επίσημα να διαφοροποιηθούν από τον ναό ή τον μαγικό κύκλο». (Huizinga, 1938) Παρατηρείται ότι ο ίδιος ο Huizinga δεν είχε σκοπό να ορίσει τον μαγικό κύκλο, απλά να τονίσει ότι ο μαγικός κύκλος και ο ναός είναι το ίδιο σημαντικά όπως το γήπεδο του τένις και η σκακιέρα. Αργότερα πολλοί ερευνητές χρησιμοποίησαν τον όρο μαγικός κύκλος, για να περιγράψουν ένα συγκεκριμένο τόπο παιχνιδιού (play-ground) όπου ισχύουν ειδικοί κανόνες. Αναφέρεται (ο όρος μαγικός κύκλος), στον μαγικό κόσμο του παιχνιδιού, 10

11 μέσα στον πραγματικό κόσμο. Είναι ένα όριο ή μεμβράνη μεταξύ του πραγματικού και του προσποιητού. [Adams and Rollings, 2006, p.6-8] (δες Σχήμα Α1) Σχήμα Α1: Ο μαγικός κύκλος [Adams and Rollings, 2006, p.7]. Ο μαγικός κύκλος είναι το πλαίσιο ενός παιχνιδιού και είναι ένας κλειστός χώρος όπου λαμβάνει χώρα το παιχνίδι. Ο μαγικός κύκλος μπορεί να προσδιορίσει ένα ισχυρό χώρο, ασκώντας την εξουσία του στις πράξεις των παικτών και δημιουργώντας καινούργιες και πολύπλοκες σημασίες που είναι πιθανές στο χώρο του play. Είναι όμως ταυτόχρονα αισθητά εύθραυστος, και απαιτεί συνεχή συντήρηση για να διατηρηθεί ανέπαφος. ( Salen and Zimmerman, 2003, p.98) Μέσα στον μαγικό κύκλο, οι παίκτες συμφωνούν να δώσουν μια προσωρινή, τεχνητή σημασία σε καταστάσεις και γεγονότα μέσα στο παιχνίδι. Ο μαγικός κύκλος υπάρχει από την στιγμή που οι παίκτες συμμετέχουν στο παιχνίδι και έρχεται σε ισχύ όταν συμφωνήσουν να συμμορφώνονται με τους κανόνες. Χάνεται δε, όταν εγκαταλείψουν το παιχνίδι ή όταν το παιχνίδι τελειώσει. (Adams and Rollings, 2006, p.8) Σύμφωνα με τα παραπάνω το συμπέρασμα είναι ότι ο μαγικός κύκλος είναι μια μεταφορά και μια τελετουργική σύμβαση. Η λειτουργία αυτού του απομονωτικού συμβατικού ορίου, είναι η απαγόρευση στους παίκτες, να φέρνουν μέσα στο παιχνίδι εξωτερικά κίνητρα και προσωπικές ιστορίες ή αντίστοιχα να μεταφέρνουν γεγονότα του παιχνιδιού στην συνηθισμένη ζωή. Ενώ όλες οι ανθρώπινες δραστηριότητες είναι εξίσου πραγματικές, στις εκδηλώσεις που λαμβάνουν χώρα μέσα σε αυτή την σύμβαση, δίνεται ιδιαίτερη κοινωνική σημασία. 1.2 ΠΑΙΧΝΙΔΙΑ ΔΙΑΧΥΤΟΥ ΥΠΟΛΟΓΙΣΜΟΥ ΣΠΑΖΟΝΤΑΣ ΤΟ ΜΑΓΙΚΟ ΚΥΚΛΟ Αφού αναφέρθηκαν συνοπτικά ορισμοί από το χώρο των σπουδών πάνω στα παιχνίδια, έφτασε η ώρα να παρουσαστεί αυτό το νέο είδος παιχνιδιού, το παιχνίδι διάχυτου υπολογισμού (pervasive gaming). Στη συνέχεια θα δοθεί πώς ορίζεται αυτό το είδος παιχνιδιού και τι ομοιότητες και διαφορές έχει με τα συνηθισμένα παιχνίδια 11

12 όπως περιγράφηκαν στην προηγούμενη ενότητα, καθώς και τη σημασία του μαγικού κύκλου στην κατανόηση του pervasive gaming. ΟΡΙΣΜΟΙ Τι είναι στ αλήθεια τα παιχνίδια διάχυτου υπολογισμού ( pervasive games ); Ο Magerkuth δίνει σε ένα άρθρο του ένα απλοϊκό ορισμό, δηλώνοντας ότι τα pervasive games είναι απλά παιχνίδια που έχουν τις ρίζες τους στα παιχνίδια πριν τους υπολογιστές, ενώ επίσης πιστεύει ότι τα αληθινά παιχνίδια παίζονται καλύτερα στον εξωτερικό χώρο. Μπορεί επίσης να αναζητηθεί συσχέτιση ανάμεσα στον όρο pervasive και ubiquitous (πανταχού παρών - διάχυτο). Ο όρος ubiquitous computing (διάχυτη πανταχού παρούσα υπολογιστικότητα), έχει τις ρίζες τις στα τέλη του 1980 όπου ο Mark Weiser την χρησιμοποίησε. Ο ίδιος έγραψε και κάποια από τα πρώτα κείμενα στο θέμα αυτό, όπου όρισε την φράση: «Ο σκοπός είναι να πετύχουμε τον πιο αποτελεσματικό τύπο τεχνολογίας, ο οποίος θα είναι εν τέλει αόρατος στον χρήστη. Για να φέρουμε τους υπολογιστές σε αυτό το σημείο, κρατώντας παράλληλα την δύναμή τους, απαιτεί καινούργια είδη υπολογιστών σε όλα τα μεγέθη και σχήματα που να είναι διαθέσιμα σε κάθε άτομο. Ονομάζω αυτό τον μελλοντικό κόσμο Ubiquitous Computing διάχυτη πανταχού παρούσα υπολογιστικότητα.» (Weiser, 1993) Μερικές φορές αναφέρεται ο όρος αυτός σαν everyware [cf. Greenfield 2006], υποδηλώνοντας ότι η υπολογιστικότητα μπορεί να βρεθεί παντού (λογοπαίγνιο με την αγγλική λέξη everywhere ). Επιπρόσθετα υπάρχουν τεράστιες διαφορές ανάμεσα σε παιχνίδια που ανήκουν στην κατηγορία των pervasive games. Αυτό το γεγονός αλλά και το ότι αποτελούν ένα καινούργιο φαινόμενο, είναι από τις βασικότερες αιτίες για τις οποίες δεν αναφέρεται ξεκάθαρος ορισμός για αυτό το είδος. Κάτι όμως που είναι κοινό σχεδόν σε όλα τα pervasive games, είναι η μετακίνηση (locomotion) ή έστω η κίνηση του σώματος. Επίσης σημαντικό ρόλο παίζει και η τεχνολογία η οποία χρησιμοποιείται. Οι Kampmann-Walther (2006), τοποθετούν το pervasive game μεταξύ πραγματικότητας και εικονικότητας. Μπορεί επίσης, υποστηρίζουν, να περιλαμβάνει χρήση τεχνολογιών (υλικού και λογισμικού) προκειμένου να διευκολυνθεί ένα φυσικό περιβάλλον για το gameplay. Από την άλλη ο Lindt (2005) συγκεντρώνεται στον φυσικό κόσμο. Τα Pervasive games εστιάζουν σε ένα game play που είναι ενσωματωμένο στον δικό μας φυσικό κόσμο. Στοιχεία του φυσικού κόσμου είναι εγγενή μέρη του παιχνιδιού. Τα 12

13 χαρακτηριστικά και οι καταστάσεις του περιβάλλοντος χώρου είναι αισθητά μέσα από το παιχνίδι και ικανά να επηρεάσουν την ροή του. Επιπρόσθετα, τα pervasive games επιτρέπουν την πρόσβαση οποιαδήποτε χρονική στιγμή και από οποιαδήποτε τοποθεσία. (Lindt et al. 2005) 1.3 ΤΑ ΠΑΙΧΝΙΔΙΑ ΔΙΑΧΥΤΟΥ ΥΠΟΛΟΓΙΣΜΟΥ ΚΑΙ Ο ΜΑΓΙΚΟΣ ΚΥΚΛΟΣ Ο μαγικός κύκλος, όπως διατυπώθηκε από τον Huizinga και υιοθετήθηκε από άλλους μελλοντικούς ερευνητές, είναι ένα χαρακτηριστικό της έννοιας του παιχνιδιού που όμως είναι πολύ περιοριστικός για τα pervasive games. Πολλοί ερευνητές όπως αναφέρθηκε προηγουμένως, συμφωνούν με την παρουσία του μαγικού κύκλου. Ο Koster [2005, p.38], διαφωνεί με πολλούς από τους ερευνητές για τον ορισμό του μαγικού κύκλου με το επιχείρημα ότι είναι πολύ περιοριστικός για ένα παιχνίδι που θέλει να διαρκεί πολύ ώρα. Σύμφωνα με αυτόν, ένα παιχνίδι πρέπει να ενσωματώνει την ανθρώπινη ψυχολογία, την φυσική και άλλα ώστε να είναι πραγματικά ανταγωνιστικό και να μπορεί να παιχτεί ξανά και ξανά. Για αυτό το λόγο θεωρεί ότι τα παιχνίδια δεν υπάρχουν στον δικό τους μαγικό κύκλο, αλλά αντίθετα είναι μέρος της πραγματικότητας. Αυτός ο τρόπος σκέψης του Koster, είναι πολύ κοντά στους ορισμούς που αναφέρθηκαν προηγουμένως για τα pervasive games. Δηλαδή παιχνίδια τα οποία είναι αναντίρρητα μέρος της πραγματικότητας, της συνηθισμένης ζωής. Παιχνίδια τα οποία παρεισφρέουν στην καθημερινή ζωή των παικτών, χωρίς να επηρεάζουν τις καθημερινές δραστηριότητες τους. (Αυτό ίσως να μην ισχύει πάντα, αφού ένας παίκτης του Killer το παιχνίδι που είδαμε στην αρχή μπορεί να αποφασίσει να μην βγει για ψώνια αν υποψιάζεται ότι παρακολουθείται και πολύ πιθανόν να δεχθεί κτύπημα ). Με τον ένα ή τον άλλο τρόπο, φαίνεται ότι η παρουσία του μαγικού κύκλου θέτει κάποια περιοριστικά όρια, τα οποία στην ουσία δεν υπάρχουν στα pervasive games. Χαρακτηριστικό το απόσπασμα από τον Montola: «Στα pervasive games ο μαγικός κύκλος επεκτείνεται με ένα ή περισσότερους τρόπους: Το παιχνίδι δεν υφίσταται πλέον σε καθορισμένο χρόνο ή χώρο και οι εμπλεκόμενοι δεν είναι πλέον καθορισμένοι. Τα pervasive games διαχέουν, κάμπτουν και θολώνουν τα παραδοσιακά όρια του παιχνιδιού, και διαχέονται από το πεδίο του παιχνιδιού στο πεδίο του συνηθισμένου.» (Montola et al.2009) Τα pervasive games μπορούν να σπάσουν ή να επεκτείνουν τον μαγικό κύκλο χωρικά, χρονικά ή κοινωνικά. Τα παιχνίδια που επεκτείνονται χωρικά (ή και κοινωνικά), μπορούν πιο εύκολα να θεωρηθούν pervasive games αφού διαφέρουν κατά πολύ από τα παραδοσιακά παιχνίδια. Αντιθέτως τα παιχνίδια που επεκτείνουν τον μαγικό κύκλο χρονικά, δυσκολότερα θεωρούνται σαν μέλη της κατηγορίας των pervasive games. Για να είναι ένα παιχνίδι pervasive θα πρέπει να επεκτείνεται τουλάχιστον με έναν από 13

14 τους πιο πάνω τρόπους χωρίς να παραγνωρίζεται μπορεί να έχει και περισσότερες από μια επεκτάσεις. το γεγονός ότι κάποιο παιχνίδι Στη συνέχεια θα γίνει περσσότερο αναλυτική αναφορά στις έννοιες χωρική, χρονική και κοινωνική επέκταση ΧΩΡΙΚΗ ΕΠΕΚΤΑΣΗ (Spatial expansion) Ο Huizinga καθόρισε ότι ένα παιχνίδι μπορεί να παιχτεί σε καθορισμένο και οριοθετημένο χώρο που τον κάνει να διαχωρίζεται από το συνηθισμένο. Τα pervasive games δεν συμμερίζονται αυτή την φιλοσοφία, αφού ένα τέτοιου είδους παιχνίδι μπορεί να παιχτεί παντού. Το περιβάλλον του παιχνιδιού δεν είναι αυστηρά καθορισμένο ή με άλλα λόγια, οι παίκτες καθώς μετακινούνται στον πραγματικό χώρο, μετακινούν μαζί τους και το μαγικό κύκλο (Montola et al.2009). Ένα παιχνίδι έχει χωρική επέκταση, όταν μεταφέρεται έξω από τον συνηθισμένο τόπο παιχνιδιού playground. Ο τόπος παιχνιδιού playground είναι η φυσική τοποθεσία όπου λαμβάνει χώρα το παιχνίδι. Τα pervasive games που σπάνε τον μαγικό κύκλο, επεκτείνουν την φυσική αυτή τοποθεσία του παιχνιδιού. «Οι παίκτες των pervasive games υιοθετούν ένα κόσμο παιχνιδιού ο οποίος είναι παρών μέσα στον συνηθισμένο κόσμο, μεταφέροντας τον μαγικό κύκλο όπου πάνε. Σε αντίθεση με τους παίκτες των μη pervasive games οι οποίοι προσπαθούν να αποσπαστούν από τον περίγυρό τους, οι παίκτες των pervasive games αγκαλιάζουν το περιβάλλον τους και το πλαίσιο που τους περιβάλλει». (Montola et al.2009) Επίσης ο Montola στο ίδιο βιβλίο, αναφέρει ότι κάποιο παιχνίδι είναι pervasive, όταν μεταφέρει το παιχνίδι σε απρόβλεπτες, αβέβαιες και μη αφιερωμένες περιοχές, δίνοντας μας καλύτερα να καταλάβουμε την έννοια της χωρικής επέκτασης. Όπως όμως έχει αναφερθεί προηγουμένως, εκτός από χωρικά, τα παιχνίδια μπορούν να επεκταθούν και χρονικά ΧΡΟΝΙΚΗ ΕΠΕΚΤΑΣΗ (Temporal expansion) Η χρονική επέκταση υποδηλώνει ότι ένα παιχνίδι δεν είναι συνυφασμένο με κάποια συγκεκριμένη χρονική διάρκεια. Οι Jussi Holopainen και Staffan Bjork σε σχετική δουλειά τους για τα παιχνίδια έδωσαν τον πιο κάτω ορισμό για το play session : «Μια play session είναι ένα αδιάκοπο τέντωμα του χρόνου όταν ένας παίκτης παίζει ενεργά ένα παιχνίδι.» (Bjork& Holopainen, 2005) Για ένα παιχνίδι μη pervasive, χωρίς χρονική επέκταση αυτός ο ορισμός θα ήταν έγκυρος. Για παράδειγμα, όταν ένας παίκτης παίζει σκάκι, τότε ασχολείται ενεργά με το παιχνίδι και λειτουργεί μέσα στο χρόνο του play session. Όταν πάει να πάρει ένα ποτήρι νερό, ή μιλάει με την ενοχλητική αδελφή του που μπήκε στο δωμάτιο του χωρίς 14

15 να ρωτήσει, τότε το play session σταματά. Με αυτή την λογική, ένα παιχνίδι μπορεί να αποτελείται από πολλά μικρά ή μεγάλα play sessions. Αυτά όμως τα όρια του χρόνου δεν μπορούν να εξηγήσουν ένα pervasive game, όπου πλέον τα play sessions δεν είναι κάτι το διακριτό. Ο παίκτης από τη στιγμή που συμμετέχει στο παιχνίδι ασχολείται ενεργά με αυτό, είτε έντονα είτε πιο χαλαρά. Ας θυμηθούμε ξανά το παιχνίδι Killer. Εκεί οι παίκτες από τη στιγμή που άρχισε το παιχνίδι ή που συνδέθηκαν σε αυτό, είναι συνέχεια σε ενεργή κατάσταση. Ακόμα και όταν ο παίκτης μιλάει με ένα φίλο του στο δρόμο, πάλι ασχολείται ενεργά με το παιχνίδι, αφού ανά πάσα στιγμή μπορεί να εμφανιστεί ο δολοφόνος που τον έχει σαν στόχο και να τον βγάλει από το παιχνίδι. Η συνηθισμένη ζωή γίνεται ένα με το παιχνίδι και δεν μπορούμε να διακρίνουμε τα κατά τους Bjork& Holopainen play sessions. Το play session εδώ δεν σταματά αλλά μεταφέρεται από το κέντρο της προσοχής του παίκτη στην περιφέρεια και το ανάποδο. Παρατηρούμε λοιπόν την δυσκολία του να θέσουμε χρονικά όρια στο παιχνίδι Killer. Αυτό διότι τέτοιου είδους παιχνίδια έχουν χρονική επέκταση. Τέλος, ένα pervasive game μπορεί να έχει και κοινωνική επέκταση ΚΟΙΝΩΝΙΚΗ ΕΠΕΚΤΑΣΗ (Social expansion) Η χωρική και χρονική επέκταση των pervasive games έχει σαν αποτέλεσμα την συμπερίληψη σε αυτά ξένων. Αυτή είναι μια μόνο προέκταση της κοινωνικής επέκτασης που εισέρχεται στα pervasive games, Σύμφωνα με τον Linderoth (Linderoth et al. 2005), η κοινωνική επέκταση μπορεί να χωριστεί σε τέσσερις ομάδες: Αποσύνδεση δραστών (Actor detachment) Αποσύνδεση ταυτότητας Προσβασιμότητα Σχέση με μη παίκτες Η αποσύνδεση δραστών αφορά την ικανότητα του παιχνιδιού να παίζεται από διάφορους ανθρώπους, γυναίκες, άντρες, παιδιά και ενήλικες. Η αποσύνδεση ταυτότητας αφορά την ικανότητα του παιχνιδιού να παίζεται από ανθρώπους διαφορετικής ηλικίας, διαφορετικού φύλου και με διαφορετικό ιστορικό. Η προσβασιμότητα αφορά το πόσο εύκολα μπορεί κανείς να έχει πρόσβαση στο παιχνίδι και έχει να κάνει είτε με τεχνολογικά εμπόδια ή κοινωνικά. Τέλος η σχέση με μη παίκτες, αφορά στο πώς ένα παιχνίδι εκμεταλλεύεται τους ξένους σε αυτό. Η σχέση με μη παίκτες είναι μια όψη της κοινωνικής επέκτασης που παίζει σημαντικό ρόλο στα pervasive games αφού το διαχωρίζει από τα υπόλοιπα παιχνίδια. Είναι επίσης ένα στοιχείο που επιδέχεται κριτική, αφού δημιουργεί ηθικές 15

16 ανησυχίες. Το να χρησιμοποιεί το παιχνίδι τους ξένους, είτε εις γνώσιν τους, είτε χωρίς, θέλει προσοχή. Ο Montola (Montola et al.2009), δίνει ιδιαίτερη βαρύτητα στο θέμα αυτό κατά την διάρκεια της συζήτησης που κάνει για την κοινωνική επέκταση. Οι ξένοι, λέει, που συμμετέχουν στο παιχνίδι χωρίς να το γνωρίζουν, δεν προστατεύονται από το προστατευτικό πλαίσιο του playfulness. Συγχέουν τις παραστάσεις του παιχνιδιού με καθημερινές παραστάσεις, αφού δεν μπορούν να γνωρίζουν ότι αυτό που συμβαίνει μπροστά τους είναι παιχνίδι. «ένας ανόητος Δολοφόνος (αναφέρεται στο παιχνίδι Killer), παίκτης που στρέφει ένα όπλο που μοιάζει με αυθεντικό σε ένα ξένο, θα αντιμετωπιζόταν σαν μια αληθινή, τρομακτική, ένοπλη απειλή. ένας απληροφόρητος ( για το παιχνίδι ), αστυνομικός που θα αντιμετώπιζε τον προηγούμενο Δολοφόνο θα τον έβαζε κάτω με πραγματική βία.» (Montola et al.2009) Η κοινωνική προέκταση είναι σημαντικός παράγοντας στα pervasive games και οι σχεδιαστές τέτοιων παιχνιδιών πρέπει να την παίρνουν σοβαρά. ΣΥΜΠΕΡΑΣΜΑΤΑ Το κεφάλαιο αυτό ήταν μια μικρή εισαγωγή στον κόσμο του παιχνιδιού. Βασικές για την κατανόηση αυτής της διπλωματικής εργασίας είναι οι έννοιες του παιχνιδιού και του μαγικού κύκλου, ο οποίος στην περίπτωση των pervasive games που μας ενδιαφέρουν έχει ασαφή όρια, επιτρέποντας την πραγματικότητα με τον κόσμο του παιχνιδιού να αναμιχτούν σε μια πραγματικότητα, τα δύο συστατικά της οποίας είναι αδιάκριτα. Στο επόμενο κεφάλαιο αναπτύσονται συνοπτικά, με επιπλέον επεξηγήσεις όπου κρίνεται σκόπιμο, οι τεχνολογίες που χρησιμοποιήθηκαν στο παιχνίδι. 16

17 ΚΕΦΑΛΑΙΟ 2 ΤΕΧΝΟΛΟΓΙΕΣ 2.1 ΕΙΣΑΓΩΓΗ Στο προηγούμενο κεφάλαιο γνωρίσαμε τις βασικές έννοιες για τα pervasive games και τα διάφορα είδη τέτοιων παιχνιδιών. Αναντίρρητα, αυτά τα παιχνίδια, εμπλέκουν άλλοτε πιο ισχυρά και άλλοτε πιο χαλαρά την τεχνολογία. Υπολογιστές, κινητά Τηλέφωνα, φορητές συσκευές και γενικότερα οι τεχνολογίες και πρότυπα, στρατολογούνται για να δώσουν στα παιχνίδια μια αίσθηση της πραγματικότητας, ως εργαλεία ανάμιξης του ψηφιακού με τον πραγματικό κόσμο. Στα πλαίσια αυτής της διπλωματικής εργασίας, μελετήθηκαν διάφορες τεχνολογίες οι οποίες θα μπορούσαν να χρησιμοποιηθούν στον σχεδιασμό και την υλοποίηση ενός παιχνιδιού για κινητές συσκευές με υποστήριξη πολλών παικτών. Θα δούμε τα βασικά χαρακτηριστικά του Android, μιας στοίβας λογισμικού για κινητές συσκευές, τους QR κωδικούς, την RFID τεχνολογία και τους χάρτες Google. 2.2 ANDROID Αυτή η διπλωματική εργασία βασίζεται σε μια προηγούμενη διπλωματική εργασία, που εκπονήθηκε από το συνάδελφο Σωτήρη Δημητρίου. Η εφαρμογή που προτείνεται να βελτιωθεί από τη παρούσα Διπλωματική, είναι ένα πρόγραμμα για φορητές συσκευές με λειτουργικό σύστημα android. Η επιλογή έγινε τότε με βάση τις δυνατότητες των επιλογών και τις προοπτικές τους. (android, ios, windows mobile). Τα σημερινά δεδομένα τη δικαιώνουν. Σχήμα Β1: Μερίδιο Αγοράς Λειτουργικών Συστημάτων για Φορητές Συσκευές 17

18 2.3 ΤΙ ΕΙΝΑΙ ΤΟ ANDROID; Το Android είναι μια στοίβα λογισμικού για κινητές συσκευές η οποία περιλαμβάνει λειτουργικό σύστημα, υλικολογισμικό (middleware) και βασικές εφαρμογές. Το Android τρέχει τον πυρήνα του λειτουργικού Linux και μέσω της δικιάς του εργαλειοθήκης ανάπτυξης συστήματος λογισμικού (Software Development Kit), επιτρέπει στους κατασκευαστές να δημιουργούν πρωτοποριακές εφαρμογές. Αρχικά αναπτύχθηκε από την Google και αργότερα το πρόγραμμα ανάπτυξης του Android, συνεχίστηκε με την συνεργασία της εταιρίας αυτής με την Open Handset Alliance (OHA). Η πρώτη παρουσίαση της πλατφόρμας Android έγινε στις 5 Νοεμβρίου 2007, παράλληλα με την ανακοίνωση της ίδρυσης του οργανισμού OHA, μιας κοινοπραξίας 48 τηλεπικοινωνιακών εταιριών, εταιριών λογισμικού καθώς και κατασκευής υλικού, οι οποίες είναι αφιερωμένες στην ανάπτυξη και εξέλιξη ανοιχτών προτύπων στις συσκευές ανοιχτής τηλεφωνίας. Ενδεικτικά αναφέρουμε μερικά μέλη του οργανισμού αυτού για να δείξουμε την τεράστια προοπτική που δημιουργείται: Sprint Nextel T-Mobile Motorola Samsung Sony Ericsson Vodafone Google Intel Texas Instruments Η Google δημοσίευσε το μεγαλύτερο μέρος του κώδικα του Android, υπό τους όρους της Apache License, μιας ελεύθερης άδειας λογισμικού. Εικόνα Β2: Λογότυπο της πλατφόρμας Android 18

19 2.4 ΓΙΑΤΙ ANDROID; Στο τέλος της ενότητας που αναφέρεται στο λειτουργικό σύστημα Android παρατίθενται εν συντομία οι λόγοι που συνέβαλαν στην επιλογή αυτής της πλατφόρμας για την ανάπτυξη μιας εφαρμογής σε κινητό τηλέφωνο. Γιατί Android λοιπόν; Είναι μια πραγματικά ανοιχτή, ελεύθερη πλατφόρμα ανάπτυξης, βασισμένη στο Linux. Διαθέτει αρχιτεκτονική βασισμένη σε δομικά στοιχεία τα οποία μπορούν να τροποποιηθούν, να ολοκληρωθούν και να προσαρμοστούν στις ανάγκες κάθε κατασκευαστή και κατά συνέπεια χρήστη. Πάμπολλες ενσωματωμένες υπηρεσίες που μπορούν να κάνουν την εμπειρία του χρήστη μοναδική, όπως υπηρεσίες βασισμένες στην τοποθεσία, πανίσχυρη SQL βάση δεδομένων, μηχανή αναζήτησης και χάρτες. Αυτόματη διαχείριση του κύκλου ζωής μιας εφαρμογής, με πολλαπλές δικλίδες ασφαλείας ανάμεσα στα προγράμματα, βελτιστοποιήσεις στον τομέα διαχείρισης μνήμης και χαμηλής κατανάλωσης σε τέτοιο βαθμό που δεν έχει ξανασυναντηθεί σε άλλο smartphone. Υψηλής ποιότητας γραφικά και ήχος. Φορητότητα ανάμεσα σε ένα ευρύ φάσμα ήδη υπάρχον υλικού αλλά και μελλοντικού. Αυτό έρχεται σαν απόρροια του γεγονότος ότι όλα τα προγράμματα γράφονται σε Java και εκτελούνται από την εικονική μηχανή Dalvik. Επιπρόσθετα οι οθόνες μπορούν να τροποποιηθούν κατάλληλα για να υποστηρίζουν οποιαδήποτε ανάλυση, μέγεθος και προσανατολισμό οθόνης. Αυτοί είναι μερικοί μόνο από τους λόγους για τους οποίους έγινε η επιλογή του Android σαν πλατφόρμα ανάπτυξης σε αυτή την διπλωματική εργασία. Όποιος δεν έχει πειστεί, δεν έχει παρά να πάρει στα χέρια του ένα τηλέφωνο που τρέχει το λειτουργικό αυτό σύστημα. 2.5 QR CODES Παράδειγμα QR code 19

20 Ο κώδικας QR είναι ένας γραμμωτός κώδικας (barcode) δύο διαστάσεων, που δημιουργήθηκε από την ιαπωνική εταιρία Denso-Wave το Το όνομά τους (QR) προέρχεται από τα αρχικά των λέξεων Quick Response (γρήγορη ανταπόκριση), γιατί οι δημιουργοί του είχαν ως κύριο σκοπό τα δεδομένα που περιέχονται στον κώδικα να αποκωδικοποιούνται με μεγάλη ταχύτητα. Ο κώδικας QR είναι πολύ διαδεδομένος στην Ιαπωνία, όπου αποτελεί το πιο δημοφιλές είδος κώδικα δύο διαστάσεων. Πιο συγκεκριμένα, στην Ιαπωνία η χρήση των barcodes ήταν και είναι πολύ διαδεδομένη, η πληροφορία, όμως, που μπορεί να αποθηκεύσει ένας μονοδιάστατος ραβδοκώδικας, κάποια στιγμή δεν ήταν πια αρκετή. Έτσι άρχισαν να γίνονται έρευνες για κωδικοποίηση πληροφορίας σε σχήματα δύο διαστάσεων. Ο κώδικας QR είναι ένα από τα αποτελέσματα αυτών των ερευνών. Αρχικά χρησιμοποιήθηκε για τον εντοπισμό ανταλλακτικών οχημάτων σε τμήματα παραγωγής. Σήμερα χρησιμοποιείται σε πολύ πιο ευρύ φάσμα, στο εμπόριο, στη διαφήμιση και στη διαχείριση εμπορευμάτων καθώς και για προσωπικά μηνύματα. Χρήση δυσδιάστατων κωδικών QR Μια συνήθης χρήση ενός κώδικα QR είναι για να αποθηκευτεί ένας σύνδεσμος προς μια ιστοδελίδα στον παγκόσμιο ιστό. Ο χρήστης φωτογραφίζει με το κινητό του τηλέφωνο τον κώδικα QR και πλοηγείται αυτόματα στην ιστοσελίδα. Αυτή η πράξη της σύνδεσης από το φυσικό κόσμο είναι γνωστή ως hardling, ή υπερσύνδεση με το φυσικό κόσμο. Οι χρήστες μπορούν επίσης να δημιουργήσουν δικούς τους κωδικούς QR με τη χρήση ελεύθερου λογισμικού. Μέσα μπορεί να αποθηκευτεί οποιοδήποτε μήνυμα. Η τεχνολογία των δυσδιάστατων κωδικών QR φαίνεται πολύ ενδιαφέρουσα και θα μπορούσε πιθανόν να χρησιμοποιηθεί με κάποιο τρόπο στο παιχνίδι για να δίνονται tips στους παίχτες. 20

21 2.6 GOOGLE CLOUD MESSAGING Το Google Cloud Messaging είναι μια νέα υπηρεσία της Google που βοηθά τους προγραμματιστές να πραγματοποιήσουν την επικοινωνία των συσκευών για τις οποίες προγραμματίζουν με τους servers. Για να γίνει όμως πιο κατανοητή η υπηρεσία αυτή θα δοθεί πρώτα μια περιγραφή της γενικότερης έννοιας του cloud computing. To cloud computing είναι η χρήση υπολογιστικών πόρων (υλικού και λογισμικού) οι οποίοι παρέχονται ως υπηρεσία μέσα από ένα δίκτυο (συνήθως το διαδίκτυο). Ο όρος cloud computing προέρχεται από τη συνήθη χρήση ενός σχήματος που μοιάζει με σύννεφο για να περιγραφεί η δομή περίπλοκων συστημάτων. Το cloud computing εμπιστεύεται σε απομακρυσμένες υπηρεσίες τα δεδομένα του χρήστη και τους απαραίτητους υπολογισμούς που γίνονται για να πραγματοποιηθεί η εντολή του. Το σύννεφο πληροφοριών και πόρων Ο τελικός χρήστης έχει πρόσβαση σε εφαρμογές που βασίζονται στο cloud computing μέσα από ένα περιηγητή του διαδικτύου ή μια ελαφριά εφαρμογή στον υπολογιστή ή 21

22 στη φορητή του συσκευή, ενώ το λογισμικό που στην πραγματικότητα εκτελεί τις εντολές του χρήστη καθώς και τα δεδομένα του χρήστη βρίσκονται αποθηκευμένα σε απομακρυσμένους servers. Η πρόσβαση στο σύννεφο και τους διαμοιρασμένους πόρους γίνεται με οποιαδήποτε συσκευή Τα πλεονεκτήματα του cloud computing είναι τεράστια. Επιτρέπει σε επιχειρήσεις να αποφύγουν το αρχικό κόστος εξοπλισμού και τους επιτρέπει να εστιάσουν τόσο το χρόνο όσο και τα κεφάλαιά τους σε εργασίες που έχουν να κάνουν με τον προσανατολισμό της επιχείρησης. Επιπλέον επιτρέπει την ευκολότερη και πιο γρήγορη χρήση των εφαρμογών, την ευκολότερη διαχείριση τους, καθώς και τη δυνατότητα να ανταποκριθούν πιο εύκολα σε διακυμάνσεις του φόρτου εργασίας. Με πιο απλά λόγια επειδή όλη η δουλειά γίνεται σε ένα απομακρυσμένο server, η επιχείρηση ή ο χρήστης δεν χρειάζεται κάποιο ακριβό ή τελευταίας τεχνολογίας υπολογιστή για να έχει πρόσβαση στα απαραίτητα εργαλεία για τη δουλειά του. Το μόνο που χρειάζεται ο χρήστης, είτε αυτός είναι ένας απλός χρήστης που κάνει κάτι στον προσωπικό του χρόνο, είτε υπάλληλος μιας εταιρίας που εργάζεται, το μόνο που χρειάζεται είναι μια απλή συσκευή με πρόσβαση στο διαδίκτυο. Έτσι ανοίγοντας έναν απλό περιηγητή, ή μια απλή και ελαφριά εφαρμογή έχει πρόσβαση σε υπολογιστικούς πόρους υπεραρκετούς για τη δουλειά του. Επίσης επειδή το λογισμικό που πραγματοποιεί την εργασία αλλά και τα δεδομένα πάνω στα οποία την πραγματοποιεί είναι αποθηκευμένα σε server, μπορεί να συνεχίσει τη δουλειά του από μια άλλη συσκευή χωρίς να χρειάζεται να κουβαλήσει κάτι μαζί του. Έχει πρόσβαση στα δεδομένα και τους πόρους που επιθυμεί οποτεδήποτε και από οπουδήποτε. 22

23 Επιπλέον πλεονεκτήματα που προσφέρει το cloud computing σε επιχειρήσεις που χρησιμοποιούν λογισμικό μέσω υπηρεσίας είναι η μείωση του κόστους για τη φροντίδα και διατήρηση του λογισμικού και του υλικού, καθώς ουσιαστικά περνά στην εταιρία πάροχο της υπηρεσίας. Επιπλέον ανανεώσεις και ενημερώσεις γίνονται χωρίς ο χρήστης να χρειάζεται να εγκαταστήσει κάτι στη συσκευή του. Συνοψίζοντας, το cloud messaging βασίζεται στο διαμοιρασμό των υπολογιστικών πόρων για να επιτύχει συνοχή, και επιτυγχάνει να δημιουργήσει στον κόσμο των υπολογιστών μια οικονομία κλίμακας παρόμοια με αυτές άλλων υπηρεσιών όπως για παράδειγμα της ΔΕΗ, στις υπηρεσίες της οποίας έχουμε πρόσβαση μέσω ενός δικτύου, του ηλεκτρικού δικτύου. Η Google λοιπόν δημιούργησε μια υπηρεσία βασισμένη στο cloud computing που χρησιμοποιεί δικούς της πόρους για να επιτρέψει στους προγραμματιστές να πραγματοποιούν πιο εύκολα και αποτελεσματικά την αποστολή δεδομένων μεταξύ εφαρμογών σε συσκευές Android και server. Τα δεδομένα αυτά μπορεί να είναι από απλά μηνύματα που ενημερώνουν ότι υπάρχουν δεδομένα προς μεταφορά στο server (για παράδειγμα μια ταινία που ανέβασε ένας φίλος), μέχρι και μηνύματα μέγιστου μεγέθους 4Kb ωφέλιμου φορτίου (ώστε εφαρμογές όπως η εφαρμογή μηνυμάτων να μπορούν να μεταφέρουν δεδομένα άμεσα). Η υπηρεσία GCM χειρίζεται ότι έχει να κάνει με την στοίβαξη των μηνυμάτων σε ουρά προτεραιότητας και την παράδοση τους στην εφαρμογή στόχο στην επιλεγμένη συσκευή. Ήδη αρχίζει και γίνεται εμφανές ότι η υπηρεσία αυτή της Google είναι ιδανική για χρήση στο παιχνίδι της εργασίας. Θα γίνει όμως βαθύτερη επεξήγηση των λειτουργιών της υπηρεσίας GCM και το πώς αυτές εξυπηρετούν στη συνέχεια το παιχνίδι. Τα βασικά χαρακτηριστικά της υπηρεσίας GCM είναι τα εξής: Επιτρέπει σε server εφαρμογών ανεξάρτητων προγραμματιστών να στέλνουν μηνύματα στις εφαρμογές τους για λογισμικό Android. Μια εφαρμογή Android δε χρειάζεται να τρέχει για να λάβει ένα μήνυμα. Το σύστημα θα θέσει την εφαρμογή σε λειτουργία όταν το μήνυμα φτάσει, υπό την προϋπόθεση ότι η εφαρμογή έχει προγραμματιστεί ώστε να μπορεί να αναγνωρίσει την αντίστοιχη κλήση του συστήματος. Απαιτεί συσκευή με λειτουργικό Android έκδοσης 2.2 ή νεότερη, ή αντίστοιχο emulator, με εγκατεστημένη την εφαρμογή Google Play Store. Χρησιμοποιεί το υπάρχον Google account για τη χρήση υπηρεσιών Google. Για εκδόσεις Android παλαιότερες του 3.0 απαιτείται ο χρήστης να δημιουργήσει και να συνδεθεί με ένα Google account. Για συσκευές με Android ή νεότερο δεν απαιτείται λογαριασμός Google. 23

24 Η λειτουργία και η συνεργασία μιας εφαρμογής με την υπηρεσία GCM αποτελείται από απλά βήματα. 3 είναι τα μέλη που συμμετέχουν σε αυτή τη συνεργασία. Η φορητή συσκευή όπου τρέχει η εφαρμογή, ο ανεξάρτητος server και οι server του GCM. Το πρώτο βήμα είναι η ενεργοποίηση της υπηρεσίας GCM. Την πρώτη φορά που η εφαρμογή θα συνδεθεί στην υπηρεσία στέλνει ένα Intent εγγραφής (registration intent). Αν η εγγραφή είναι επιτυχής, ο GCM server απαντά στέλνοντας στη συσκευή μήνυμα με την ταυτότητά της. Για να ολοκληρωθεί η εγγραφή η εφαρμογή στέλνει στον ανεξάρτητο server την ταυτότητα GCM (registration ID). Μετά την εγγραφή στην υπηρεσία GCM η εφαρμογή μπορεί να στείλει και να λάβει μηνύματα μέσω της υπηρεσίας. Για να πραγματοποιηθεί η αποστολή μηνύματος από έναν server εφαρμογής σε μια εφαρμογή Android πρέπει να πληρούνται οι εξής προϋποθέσεις: Η εφαρμογή Android έχει ένα registration ID που της επιτρέπει να λάβει μηνύματα σε μια συσκευή. Ο ανεξάρτητος server της εφαρμογής να έχει αποθηκεύσει αυτή την ID. Ένα API key. Είναι ένα στοιχείο που προμηθεύεται στον προγραμματιστή όταν ξεκινά να εργάζεται με την υπηρεσία GCM και πρέπει να έχει αποθηκευτεί στην εφαρμογή κατά τη δημιουργία της ώστε αυτή να μπορέσει να χρησιμοποιήσει την υπηρεσία GCM. Αν και εφόσον πληρούνται οι παραπάνω προϋποθέσεις ένα μήνυμα μπορεί να σταλεί. Παρακάτω φαίνεται η ακολουθία γεγονότων που συμβαίνει κατά την αποστολή ενός μηνύματος από το server στην εφαρμογή Android σε μια φορητή συσκευή: 1. Ο ανεξάρτητος server της εφαρμογής στέλνει ένα μήνυμα στους GCM servers. 2. H Google βάζει το μήνυμα σε σειρά παράδοσης και το αποθηκεύει για την περίπτωση που η συσκευή είναι offline. 3. Όταν η συσκευή είναι online, η Google στέλνει το μήνυμα στη συσκευή. 4. Στη συσκευή, το σύστημα μεταδίδει το μήνυμα στη συγκεκριμένη εφαρμογή για την οποία προορίζεται, με άδειες ώστε μόνο αυτή να παραλάβει το μήνυμα. Αν η εφαρμογή δεν είναι σε λειτουργία, τότε αυτή ξυπνά για να λάβει το μήνυμα καθώς δεν χρειάζεται να βρίσκεται σε λειτουργία για να το παραλάβει. 5. Η εφαρμογή επεξεργάζεται το μήνυμα. Το μοναδικό που βλέπει ο χρήστης είναι η άδεια που δίνει στην εφαρμογή να χρησιμοποιήσει την υπηρεσία GCM όταν εγκαθιστά μια εφαρμογή που τη χρησιμοποιεί. 24

25 2.7 GOOGLE MAPS Το Πανεπιστήμιο Πατρών στην ιστοσελίδα Google Maps Οι χάρτες Google(Google Maps, προηγουμένως γνωστοί ως Google Local) είναι μια διαδικτυακή υπηρεσία χαρτογράφησης που παρέχεται από τη Google και χρησιμοποιείται σε διάφορες εφαρμογές όπως την ιστοσελίδα Google Maps, το Google Ride Finder, αλλά και χάρτες ενσωματωμένους σε άλλες εφαρμογές, μέσω του προγραμματιστικού πακέτου της υπηρεσίας. Παρέχει διάφορες δυνατότητες, όπως χάρτες δρόμων, δυνατότητα εύρεσης πορείας και εντοπισμό επιχειρήσεων και τοποθεσιών ανά τον κόσμο. Στην περίπτωσή της παρούσας εργασίας, οι χάρτες της Google θα μπορούσαν να ενσωματωθούν στο παιχνίδι και να χρησιμοποιηθούν από τους παίκτες για την ευκολότερη πλοήγηση στην πόλη της Πάτρας, και τον εύκολο εντοπισμό τον τοποθεσιών που καλούνται να εξερευνήσουν. 25

26 ΚΕΦΑΛΑΙΟ 3 Η ΑΡΧΙΚΗ ΕΦΑΡΜΟΓΗ Στο κεφάλαιο αυτό παρουσιάζεται η εφαρμογή στην αρχική της μορφή, όπως αυτή σχεδιάστηκε και υλοποιήθηκε από το συνάδελφο Σωτήρη Δημητρίου. Αρχικά περιγράφεται η γενική ιδέα του παιχνιδιού κι έπειτα η εξέλιξή της για να φτάσει να δημιουργηθεί το παιχνίδι Αόρατη Πόλη, με το οποίο ασχολείται η παρούσα εργασία. 3.1 ΠΑΛΕΡΜΟ ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ Το παιχνίδι αυτό δημιουργήθηκε την άνοιξη του 1986 από τον Dimma Davidoff που του έδωσε την ονομασία Mafia. Ο Davidoff ήταν φοιτητής στο Τμήμα Ψυχολογίας του Πανεπιστημίου της Μόσχας, ενώ ταυτόχρονα παρέδιδε μαθήματα ψυχολογίας σε μαθητές Λυκείου. Η διπλωματική του αφορούσε τον χρόνο ως το κύριο προϊόν της ανθρώπινης ψυχοσύνθεσης. Προσπαθούσε να βρει μια δραστηριότητα για τους μαθητές του που θα διαρκούσε όσο το δυνατόν περισσότερο χρόνο, με την μικρότερη δυνατή προσπάθεια ή προετοιμασία. Οπότε επικεντρώθηκε στην προσπάθεια εύρεσης ψυχολογικών παιχνιδιών, ώστε να γίνεται το μάθημα χωρίς κάποια προετοιμασία. Για παράδειγμα ζήτησε από 2 από τους μαθητές του να κάνουν μια συμφωνία μυστική, για κάποιο θέμα που θα ήθελαν αυτοί να συζητήσουν. Ακολούθως, αυτοί ζητούσαν από τους υπόλοιπους να το μαντέψουν. Κατά την διάρκεια αυτών των παιχνιδιών, συνειδητοποίησε ότι το ΠΟΙΟΣ, είναι ο σημαντικότερος παράγοντας σε αυτές τις συμφωνίες. Με αυτό τον τρόπο οι μαθητές του έγιναν οι πρώτοι παίχτες σε αυτή την πρώτη έκδοση. Το παιχνίδι διαδόθηκε ραγδαία ενώ πήρε και διάφορες άλλες εκδοχές κατά την διάρκεια των χρόνων. Σημαντικό το γεγονός ότι θεωρείται ένα από τα 50 ιστορικά και πολιτιστικά πιο σπουδαία παιχνίδια από το ΤΟ ΠΑΙΧΝΙΔΙ Το Παλέρμο ή Mafia ή Assasin είναι ένα party game δηλαδή παιχνίδι κατάλληλο για διασκέδαση σε κοινωνικές συγκεντρώσεις οπότε παίζεται από ομάδες ανθρώπων. Σε αυτό το παιχνίδι η μάχη είναι μεταξύ μιας πληροφορημένης μειονότητας και μιας απληροφόρητης πλειοψηφίας. Στους παίχτες αποδίδονται ρόλοι μυστικά, είτε σαν μαφιόζοι ή δολοφόνοι που ξέρουν ο ένας τον άλλον, είτε σαν πολίτες που το μόνο που ξέρουν είναι τον αριθμό των μαφιόζων. Παίζεται σε γύρους και κάθε γύρος έχει 2 φάσεις, την ημέρα και την νύχτα. Κατά την διάρκεια της νύχτας, οι μαφιόζοι επιλέγουν έναν αθώο για να σκοτώσουν. Κατά την διάρκεια της ημέρας, όλοι οι παίχτες μετά από συζήτηση προσπαθούν να αναγνωρίσουν τους μαφιόζους και ακολούθως ψηφίζουν ποιος από τους παίχτες πρέπει να πεθάνει. Αυτός με τους περισσότερους ψήφους βγαίνει από το παιχνίδι. Το παιχνίδι τελειώνει όταν πεθάνουν όλοι οι μαφιόζοι, οπότε 26

27 οι πολίτες κερδίζουν, ή όταν οι μαφιόζοι που παραμένουν στο παιχνίδι είναι περισσότεροι από τους αθώους, οπότε οι μαφιόζοι κερδίζουν. Το παιχνίδι παίζεται συνήθως σε ομάδες που αριθμούν περισσότερους από 5 ανθρώπους ενώ οι ρόλοι ανατίθενται, έτσι ώστε να υπάρχουν περισσότεροι αθώοι παρά μαφιόζοι κατά την έναρξη του παιχνιδιού ΡΟΛΟΙ Υπάρχουν 2 ομάδες οι Ειλικρινείς και η Μαφία. Οι ειλικρινείς πρέπει να εξουδετερώσουν τους Μαφιόζους πριν γίνει το αντίθετο. Οι Μαφιόζοι πρέπει να κρύψουν την ταυτότητα τους και να δείχνουν οτι ανήκουν στην ομάδα με τους Ειλικρινείς για να μπερδέψουν τους παίχτες της άλλης ομάδας. Ο κάθε παίχτης με δική του πρωτοβουλία και ανάλογα με το τι τον βολεύει, προσπαθεί να αποδείξει την αθωότητά του (ή να κρύψει την ενοχή του αν είναι μαφιόζος), με το να κατηγορεί τους άλλους υπόπτους. Αυτό συνεχίζεται μέχρι να εξαλειφθούν οι παίχτες της αντίπαλης ομάδας ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΕΚΚΙΝΗΣΗ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ Οι ρόλοι ανατίθενται τυχαία στους παίχτες δίνοντας σε αυτούς χαρτιά (τράπουλας) που υποδηλώνουν την ομάδα στην οποία ανήκουν. Τα μαύρα αντιστοιχούν στους μαφιόζους και τα κόκκινα στους Ειλικρινείς. Η λίστα όπως δίνεται από τον Davidoff (τον εφευρέτη του Παλέρμο): 6-7 παίκτες = 2 μαύρες κάρτες + εναπομείναντες red 8-10 παίκτες = 3 μαύρες κάρτες + εναπομείναντες red παίκτες = 4 μαύρες κάρτες + εναπομείναντες red παίκτες = 5 μαύρες κάρτες + εναπομείναντες red Οι παίχτες ενημερώνονται μόνο για το πόσα μαύρα χαρτιά (μαφιόζοι) υπάρχουν στο παιχνίδι ΤΡΟΠΟΣ ΠΑΙΧΝΙΔΙΟΥ Το παιχνίδι παίζεται σε γύρους και κάθε γύρος χωρίζεται σε 2 φάσεις την ημέρα και την νύχτα Έναρξη Οι παίχτες παίρνουν από ένα χαρτί από την τράπουλα και κρυφά το βλέπουν για να δουν σε ποιά ομάδα ανήκουν. Μετά επιστρέφουν το χαρτί στην τράπουλα. Ακολούθως όλοι κλείνουν τα μάτια και χαμηλώνουν τα κεφάλια. Ένας (ορίζεται στην αρχή του παιχνιδιού) αρχίζει να μετράει δυνατά μέχρι το 5 και ακολούθως από μέσα του μέχρι το 20. Κατά την διάρκεια που αυτός μετράει, οι μαφιόζοι ανοίγουν τα μάτια,βλέπονται μεταξύ τους και μετά τα ξανακλείνουν. Όταν τελειώσει το μέτρημα (στο 20 δηλαδή), οι παίχτες πρέπει να ανοίξουν τα μάτια. Οπότε τώρα οι μαφιόζοι γνωρίζονται μεταξύ τους ενώ οι άλλοι δεν ξέρουν τίποτα, διατηρούν όμως το πλεονέκτημα της πλειοψηφίας. 27

28 Κατά τη διάρκεια της ημέρας Εδώ οι παίχτες πρέπει να συζητήσουν μεταξύ τους, κατηγορώντας αυτούς που υποψιάζονται ή υπερασπίζοντας τον εαυτό τους. Η συζήτηση σταματά όταν ένας από τους κατήγορους ζητήσει να αρχίσει η ψηφοφορία. Οπότε οι παίχτες ψηφίζουν για αυτόν που κατηγορείται. Αυτοί που τον θεωρούν ως μέλος της μαφίας σηκώνουν τα χέρια ψηλά. Αν η πλειοψηφία συμφωνήσει για την ενοχή του συγκεκριμένου τότε αυτός καταδικάζεται και βγαίνει από το παιχνίδι μέχρι το τέλος του γύρου. Αν ο κατήγορος δεν καταφέρει να φέρει με το μέρος του την πλειοψηφία, το παιχνίδι συνεχίζεται με τον ίδιο αριθμό παιχτών. Οι κατηγορίες μπορούν να συμβούν οποιαδήποτε στιγμή της ημέρας. Αυτός που καταδικάζεται δεν αποκαλύπτει την ταυτότητα του και δεν λαμβάνει μέρος στο παιχνίδι Κατά τη διάρκεια της νύχτας Σε αυτή την φάση και μόνο μπορεί να ανακαλυφθεί αν όλοι οι μαφιόζοι έχουν εξολοθρευτεί. Η νύχτα αρχίζει όταν κάποιος το προτείνει και η πλειοψηφία συμφωνήσει. Τότε όλοι γράφουν σε ένα κομμάτι χαρτί. Οι μεν Ειλικρινείς πρέπει να γράψουν ειλικρινής στο χαρτί. Οι δε μαφιόζοι πρέπει να γράψουν το όνομα κάποιου αθώου στο χαρτί πράγμα που αντιστοιχεί σε πυροβολισμό του. Τα χαρτιά τοποθετούνται στο κέντρο και ανοίγονται από τον Ένα. Αν τα χαρτιά των μαφιόζων έχουν το ίδιο όνομα πάνω, (δηλαδή όλα τα χαρτιά που περιέχουν όνομα, περιέχουν το ίδιο όνομα ) τότε σκοτώνεται ο εν λόγω ειλικρινής. Αν υπάρχουν στο τραπέζι διαφορετικά ονόματα, τότε θεωρείται ότι η επίθεση δεν ήταν αρκετή για να σκοτώσει τους εν λόγω ειλικρινείς. Το παιχνίδι σταματά όταν κατά την διάρκεια της νύχτας δεν γίνει επίθεση, οπότε δεν απέμειναν μαφιόζοι. Αν οι μαφιόζοι κερδίσουν τότε παίρνουν τόσους πόντους όσος και ο αρχικός αριθμός των Ειλικρινών. Αν κερδίσουν οι άλλοι τότε παίρνουν τόσους πόντους όσος και ο αριθμός των επιζώντων ειλικρινών. Γενικά Παίζεται από 4 παίκτες και πάνω. Ηλικίες από 9 χρονών και άνω. Απαιτεί κοινωνικές δεξιότητες, στρατηγική σκέψη, ομαδικότητα και ταύτιση με τον ρόλο. Μπορεί να παιχτεί online σε forums ή και στον χώρο, όμως πρέπει κατά την διάρκεια της νύχτας τα φώτα να είναι κλειστά για να διατηρείται η μυστικότητα της ταυτότητας των μαφιόζων. Την μέρα πρέπει οι παίχτες να συγκεντρωθούν για να συζητήσουν. 28

29 3.2 ΑΝΤΙΣΤΑΣΗ (RESISTANCE) Το Resistance είναι μια παραλλαγή του Παλέρμο, που είχε ως στόχο τον μη αποκλεισμό παικτών κατά τη διάρκεια του παιχνιδιού. Σε αυτό το παιχνίδι οι παίκτες χωρίζονται πάλι σε 2 ομάδες. Η μία περιλαμβάνει την πληροφορημένη μειονότητα, τους Imperial Spies, οι οποίοι γνωρίζονται μεταξύ τους και την απληροφόρητη μειοψηφία, τους Rebels, οι οποίοι δεν γνωρίζουν τίποτα. Οι ρόλοι ανατίθενται μυστικά στην αρχή του παιχνιδιού. Κατά την διάρκεια ενός γύρου, ορίζεται ένας, αρχηγός για τους Rebels, ο οποίος μπορεί να ανήκει σε οποιαδήποτε από τις δύο ομάδες. Αυτός επιλέγει κάποιους παίχτες έναν ή δύο λιγότερους από τον αριθμό των παιχτών (Σχήμα Γ3) και τους δίνει μια κάρτα που προσομοιώνει το σχέδιο δράσης. Τότε όλοι οι παίκτες καλούνται να ψηφίσουν αν αποδέχονται την μοιρασιά αυτή. Αν η πλειοψηφία καταψηφίσει την μοιρασιά, ο αρχηγός αλλάζει και ξαναμοιράζει τα σχέδια δράσης. Αν η μοιρασιά καταψηφιστεί από την πλειοψηφία πέντε (5) συνεχόμενες φορές κατά την διάρκεια του ιδίου γύρου, οι Επαναστάτες κερδίζουν το παιχνίδι. Τώρα, αν μια μοιρασιά σχεδίων περάσει από την πλειοψηφία, οι παίκτες στους οποίους ανατέθηκε σχέδιο, καλούνται να ψηφίσουν υπέρ ή κατά. Την ψήφο τους την καταθέτουν, με μια κάρτα, για παράδειγμα μαύρη αν δεν αποδέχονται το σχέδιο ή κόκκινη αν το αποδέχονται. Αυτές οι κάρτες πριν αποκαλυφθούν, ανακατώνονται. Ακολούθως αποκαλύπτονται οι κάρτες -ψήφοι. Αν μέσα σε αυτές υπάρχει έστω και μια μαύρη κάρτα, το σχέδιο αποτυγχάνει και οι Rebels χάνουν μια βάση. Αν όλοι ψήφισαν υπέρ, το σχέδιο πετυχαίνει και οι Imperials χάνουν μια βάση. Υπάρχουν πέντε (5) διαθέσιμες βάσεις και το παιχνίδι τελειώνει με νίκη της ομάδας που έφτασε πρώτη στην κατάκτηση τριών (3) βάσεων. Σχήμα Γ3: Η ανάθεση σχεδίων δράσης στο παιχνίδι Resistance (The Resistance V Team Don) 29

30 Στην περίπτωση που ένα σχέδιο απέτυχε και οι Rebels έχασαν μια βάση, ορίζεται ως αρχηγός ο επόμενος παίχτης κοκ. Με αυτό τον τρόπο οι Rebels σε κάθε γύρο συγκεντρώνουν σιγά - σιγά πληροφορίες για το ποιον πρέπει να εμπιστεύονται, οπότε και οι Imperial spies θα πρέπει να είναι προσεκτικοί για το πότε θα σαμποτάρουν το σχέδιο και πότε όχι. Για παράδειγμα αν δόθηκαν 4 κάρτες σχέδια δράσης και παρουσιαστεί μια κόκκινη κάρτα, τότε οι παίχτες γνωρίζουν ότι κάποιος από αυτούς τους τέσσερις, είναι Imperial spy. Ο αριθμός των καρτών σχεδίων που διατίθενται (πάντα μικρότερος από τον αριθμό των παιχτών), είναι ένας τρόπος να κοντρολάρεται η διάρκεια του παιχνιδιού. Για παράδειγμα όσο μικρότερος αυτός είναι, τόσο πιο εύκολα οι Rebels μπορούν να αντιληφθούν τους κατασκόπους που βρίσκονται ανάμεσα τους και να μην τους συμπεριλαμβάνουν στα σχέδια. Το παιχνίδι σχεδιάστηκε από τον Don Eskridge σαν μια παραλλαγή του Mafia ή Palermo. Πλεονεκτεί στο γεγονός ότι δεν υπάρχει αποκλεισμός παιχτών και στο ότι με τα σχέδια, παρέχονται λίγο περισσότερες πληροφορίες στην απληροφόρητη μειονότητα από ότι στο Mafia, γεγονός που παρέχει ένα μηχανισμό διαμόρφωσης αντιλήψεων και αξιοπιστίας μεταξύ των παιχτών. Έχει σχεδιαστεί για 5 ως 12 παίχτες και διαρκεί περίπου 30 λεπτά. Το μόνο που απαιτεί είναι μια οποιαδήποτε τράπουλα. Πίνακας Γ1: Ρυθμίσεις Αντίστασης 3.3 ΜΕΤΑΦΟΡΑ ΣΤΟΝ ΧΩΡΟ ΤΩΝ PERVASIVE GAMES Τα δύο πιο πάνω επιτραπέζια παιχνίδια, εμπεριέχουν δυνατά στοιχεία που μπορούν να χρησιμοποιηθούν για ισχυρή εμπειρία στο παιχνίδι, για χαρά και διάθεση από τους παίκτες να παίξουν. Είναι παιχνίδια που απαιτούν στρατηγική σκέψη, κοινωνικές 30

31 ικανότητες, ομαδικό παίξιμο και παίξιμο ρόλων. Επίσης βασίζεται στο ψυχολογικό μοντέλο της πληροφορημένης μειονότητας έναντι στην απληροφόρητη πλειοψηφία. Το μεγάλο στοίχημα εδώ ήταν να μεταφέρουμε τις βασικές έννοιες και στοιχεία αυτών των παιχνιδιών στον πραγματικό χώρο σαν μια ανάμιξη του πραγματικού με το εικονικό. Αυτό απαιτούσε την επέκταση του παιχνιδιού κυρίως χωρικά αλλά και αναγκαστικά κοινωνικά, αφού οι παίκτες αναπόφευκτα κάποια στιγμή θα έρθουν αντιμέτωποι με τους παρευρισκόμενους στον ίδιο χώρο. Κρίθηκε αναγκαίο να κρατηθεί το στοιχείο της πληροφορημένης μειονότητας έναντι της απληροφόρητης πλειοψηφίας. Η μεταφορά αυτού του είδους παιχνιδιού όμως στον πραγματικό χώρο, επιτεύχθηκε με το να δοθεί ουσία στα σχέδια δράσης, όπως αυτά αναφέρονται στην Αντίσταση. Στο παιχνίδι της εργασίας τα σχέδια δράσης θα συνίστανται από πραγματικές αποστολές στον χώρο του παιχνιδιού, που είναι και ταυτόχρονα ο πραγματικός, συνηθισμένος χώρος. Με αυτό τον τρόπο επιτυγχάνεται η χωρική επέκταση, γεγονός που κάνει το προτεινόμενο παιχνίδι να διαφέρει ουσιαστικά από το αυθεντικό επιτραπέζιο παιχνίδι. Επίσης μια σκέψη ήταν να κρατηθεί η έννοια των βάσεων (επίσης από το παιχνίδι Αντίσταση ), σαν την παράμετρο για επιβράβευση των παικτών. Ακολούθως φαίνονται οι αρχικές παράμετροι που ορίστηκαν για το παιχνίδι της εργασίας, το οποίο είχε αρχικά το όνομα Επανάσταση. 3.4 ΑΡΧΙΚΗ ΙΔΕΑ ΠΑΙΧΝΙΔΙΟΥ ΡΥΘΜΙΣΕΙΣ ΠΑΙΧΝΙΔΙΟΥ Η Επανάσταση είναι ένα κοινωνικό παιχνίδι μπλόφας, παραπλάνησης και μυστικότητας. Η Επανάσταση έχει αρχίσει στη χώρα και οι Επαναστάτες καλούνται να ολοκληρώσουν τα σχέδια τους με τελικό σκοπό την ανατροπή της κυβέρνησης. Φυσικά η κυβέρνηση δεν θα μπορούσε ποτέ να μείνει απαθής σε αυτά τα γεγονότα. Για αυτό το λόγο αναθέτει σε δικούς της πράκτορες να εισχωρήσουν στην επαναστατική οργάνωση και να τους ανατρέψουν τα σχέδια. Οι παίκτες αναλαμβάνουν ρόλους επαναστατών και κατασκόπων της κυβέρνησης αντίστοιχα. Οι επαναστάτες αποτελούν την πλειοψηφία των μελών της οργάνωσης, ενώ οι κατάσκοποι την μειοψηφία, που προσπαθούν να τους ανατρέψουν τα σχέδια χωρίς να αποκαλύψουν την ταυτότητά τους ΠΕΡΙΟΧΗ ΠΑΙΧΝΙΔΙΟΥ Τα γεγονότα συμβαίνουν στο κέντρο της Πάτρας. Οι παίκτες σύμφωνα με τις οδηγίες που λαμβάνουν, κινούνται στους δρόμους της πόλης για να βρουν τις απαραίτητες πληροφορίες για την επιτυχή ή ανεπιτυχή εκπλήρωση της αποστολής τους. Το πόσο μακριά θα ωθούνται οι παίκτες, εξαρτάται από τον χρόνο του παιχνιδιού. 31

32 3.4.3 ΕΡΓΑΛΕΙΑ ΥΠΟΔΟΜΗΣ Η τεχνολογία που θα χρησιμοποιείται από τους παίκτες είναι συσκευές με το λειτουργικό σύστημα της Google, το Android για αλληλεπίδραση με το παιχνίδι ΕΙΔΟΣ Σύμφωνα με τον διαχωρισμό του Montola (Montola et al. 2009), το παιχνίδι αυτό μοιράζεται αρκετά χαρακτηριστικά και ιδιότητες με το γένος Αστικά Παιχνίδια Περιπέτειας (Urban Adventure Games), λόγω της τοποθεσίας του παιχνιδιού, που παίζεται στα όρια μιας πόλης και συνδυάζει την γνωριμία του παίκτη με περιοχές ιστορικού και πολιτιστικού ενδιαφέροντος. Επίσης παρουσιάζει και κάποια κοινά στοιχεία με τα Θεατρικά Παιχνίδια ( Pervasive Larps), αφού η Αόρατη Πόλη, μπορεί να βασιστεί σε κάποια ιστορία (storyline), την οποία οι παίκτες καλούνται να ακολουθήσουν ΣΕ ΠΟΙΟΥΣ ΑΠΕΥΘΥΝΕΤΑΙ Η Επανάσταση απευθύνεται σε έφηβους, νέους και μεσήλικες, εξοικειωμένους με την τεχνολογία, με πολύ ελεύθερο χρόνο και που τους αρέσει η αλληλεπίδραση με άλλα άτομα. Μπορεί να συμπεριλάβουμε και άτομα με λίγο ελεύθερο χρόνο, με βασική εξοικίωση με την τεχνολογία ενώ θα αποκλείσουμε από την σχεδίαση άτομα τρίτης ηλικίας, μη εξοικειωμένα με την τεχνολογία και προβλήματα κίνησης, ακοής ή όρασης GAMEPLAY 4 Αλληλεπίδραση παικτών Οι παίκτες αλληλεπιδρούν παίζοντας ο καθένας τον ρόλο του χαρακτήρα τους. Οι παίκτες μπορούν να επικοινωνούν μεταξύ τους ανά πάσα στιγμή είτε φυσικά είτε με χρήση του κινητού τους τηλεφώνου. 5 Σύνοδος παιχνιδιού Οι παίκτες δηλώνουν συμμετοχή στην ιστοσελίδα του παιχνιδιού, όπου τους δίνονται πληροφορίες για την ώρα και τοποθεσία έναρξής του. Το παιχνίδι διαρκεί γύρω στα 45 λεπτά και είναι συνεχόμενο. (Η διάρκεια του παιχνιδιού εξαρτάται από την διάρκεια του κάθε γύρου, και τον αριθμό των βάσεων που θα έχει η κάθε ομάδα, όπως επίσης και από τον αριθμό των βάσεων που κερδίζονται ή χάνονται με την επιτυχία ή αποτυχία μιας αποστολής.) 6 Συμμετοχή από ξένους Το παιχνίδι θα μπορεί να ευνοεί την συμμετοχή ξένων, αφού είναι ένας καλός τρόπος να παρέχονται οι απαραίτητες πληροφορίες στους παίκτες, πληροφορίες που χρειάζονται για την εκπλήρωση ή μη της αποστολής τους. Αυτό σε περίπτωση που η αποστολή είναι η απάντηση μιας ερώτησης. Τότε ο παίκτης θα μπορεί να μεταβεί στο προτεινόμενο σημείο συνάντησης, όπου θα τον περιμένει ο ξένος, για να του δώσει τις πληροφορίες. 32

33 3.4.7 ΒΑΣΙΚΑ ΣΤΟΙΧΕΙΑ Η προσέγγιση του πραγματικού κόσμου σαν τον χώρο του παιχνιδιού Το μοντέλο της ανάθεσης ρόλων (role play) Τεχνολογική υποστήριξη για έλεγχο της ροής του παιχνιδιού ΔΙΑΧΥΤΑ ΣΤΟΙΧΕΙΑ Το παιχνίδι είναι χωρικά επεκτάσιμο, αφού μπορεί να παιχτεί στα όρια μιας ολόκληρης πόλης. Η χρονική επέκταση μπορεί να γίνει από την στιγμή που το παιχνίδι αποκτήσει ιστορία (storyline), η οποία θα συνεχίζεται μέχρι οι παίκτες να βρουν άκρη. Περιορίζεται όμως αν κρατηθεί η ιδέα με τις βάσεις. Η κοινωνική επέκταση επίσης υπάρχει, αφού οι παίκτες θα μπορούν να έρθουν σε επαφή με τους ανθρώπους που βρίσκονται στον χώρο του παιχνιδιού, από την στιγμή που οι κανόνες του παιχνιδιού δεν τους το απαγορεύουν ΣΤΟΧΟΙ ΠΑΙΧΝΙΔΙΟΥ Η Επανάσταση είναι ένα ανταγωνιστικό παιχνίδι, όπου οι επαναστάτες έρχονται αντιμέτωποι με τους κατασκόπους. Στόχος για τους επαναστάτες είναι να καταστρέψουν όλες τις βάσεις της κυβέρνησης, ενώ στόχος των κατασκόπων είναι να καταστρέψουν όλες τις βάσεις των επαναστατών σαμποτάροντάς τους τις αποστολές Ο ΚΟΣΜΟΣ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ Ο χώρος του παιχνιδιού είναι ο ίδιος με τον χώρο της πόλης στην οποία παίζεται το παιχνίδι. Επίσης αναμιγνύεται με τον ψηφιακό κόσμο της συσκευής που θα διαθέτουν είτε έντονα ( στην περίπτωση χρήσης ιστορίας storyline ), είτε ασθενέστερα ( αν η συσκευή χρησιμοποιηθεί μόνο για να δίνει κατευθυντήριες γραμμές) ΙΣΤΟΡΙΑ - STORYLINE Η εφαρμογή όπως είχε παρουσιαστεί από το συνάδελφο Δημητρίου Σωτήρη δεν περιελάμβανε κάποια ιστορία που να εξελίσσεται κατά τη διάρκεια του παιχνιδιού και να δίνει σε αυτό κάποιο επιπλέον νόημα. Εδώ είναι που ξεκινά η παρούσα διπλωματική εργασία καθώς ένα σημαντικό μέρος της είναι η ενσωμάτωση μιας ιστορίας στο παιχνίδι που είχε ήδη παρουσιαστεί ΣΧΕΔΙΑΣΜΟΣ Για ευνόητους λόγους η αναλυτική διαδικασία του σχεδιασμού της εφαρμογής δε θα περιγραφεί στο παρόν σύγγραμμα. Θα περιγραφεί μόνο η εφαρμογή που παραδόθηκε από το συνάδελφο Δημητρίου Σωτήρη, και η οποία αποτελεί τη βάση για αυτή τη διπλωματική εργασία. 33

34 ΚΑΝΟΝΕΣ Οι κανόνες που διέπουν τη λειτουργία του παιχνιδιού και οδηγούν την εξέλιξή του αλλά και καθορίζουν το τέλος του είναι οι εξής: Στην αρχή του παιχνιδιού κάθε παίκτης αναλαμβάνει ένα ρόλο, είτε του επαναστάτη, είτε του κατασκόπου. Οι κατάσκοποι είναι μειοψηφία αλλά γνωρίζονται μεταξύ τους, ενώ τα μέλη της επανάστασης είναι πλειοψηφία αλλά γνωρίζουν μόνο πόσοι είναι οι κατάσκοποι. Στην αρχή κάθε γύρου οι παίκτες συναντιούνται στο προκαθορισμένο για κάθε γύρο μέρος, και ψηφίζουν μέσα από τις συσκευές τους έναν αρχηγό. Ο αρχηγός αυτός αναθέτει σε κάθε παίκτη, συμπεριλαμβανομένου και του εαυτού του, μια αποστολή, γνωρίζοντας ποιες αποστολές είναι σημαντικές για την επιτυχή ολοκλήρωση του γύρου και ποιες όχι. Ο παίκτης, είτε κατάσκοπος είτε μέλος της επανάστασης, λαμβάνει μια αποστολή, χωρίς να γνωρίζει τη βαρύτητά της και καλείται να επισκεφτεί το μέρος που αφορά ώστε να μπορέσει να την ολοκληρώσει. Ανάλογα με το ρόλο του ο κάθε παίκτης πράττει ανάλογα. Μετά την ολοκλήρωση ή μη των αποστολών, έρχεται το τέλος του γύρου. Σε αυτό το σημείο, οι παίκτες αν θέλουν μπορούν να καλέσουν ψηφοφορία για την αποκάλυψη των κατασκόπων. Αν όμως δεν καταφέρουν επιτυχώς να τους αποκαλύψουν οι κατάσκοποι κερδίζουν μια βάση. Αν οι κατάσκοποι αποκαλυφθούν, το παιχνίδι τελειώνει με θετική έκβαση για την επανάσταση. Αυτό μπορεί να συμβεί επίσης αν η επανάσταση στο τέλος όλων των γύρων έχει τις περισσότερες βάσεις. Αντίθετα κερδίζουν οι κατάσκοποι αν στο τέλος του παιχνιδιού έχουν τις περισσότερες βάσεις. Βάσεις κερδίζουν τα μέλη της επανάστασης για την επιτυχή ολοκλήρωση ενός γύρου. Οι κατάσκοποι κερδίζουν βάσεις για την μη επιτυχή ολοκλήρωση ενός γύρου από την επανάσταση, αλλά και αν οδηγήσουν την επανάσταση σε λανθασμένη ψηφοφορία για την αποκάλυψή τους. Οι παραπάνω κανόνες αντικατοπτρίζουν εκτός από τη συνολική εξέλιξη του παιχνιδιού, και την επανάληψη των διαδικασιών που συμβαίνει σε κάθε γύρο. Η επανάληψη αυτή φαίνεται στο παρακάτω διάγραμμα μέσα από την ακολουθία των οθονών που συμβαίνει σε κάθε γύρο, μέχρι να πληρούνται οι συνθήκες τέλους και να καταλήξουν σε αυτό. 34

35 ΥΛΟΠΟΙΗΣΗ Ακολουθία οθονών Περίληψη Μετά τον σχεδιασμό του παιχνιδιού, σειρά στην ολοκλήρωση του παίρνει, τι άλλο, η υλοποίηση. Στην υλοποίηση αυτή, συμπεριλήφθηκαν οι αποστολές του τύπου ερωτήσεων πολλαπλής επιλογής μόνο, αλλά με τέτοιο τρόπο ώστε να μπορεί να υποστηρίξει και πολλούς άλλους τύπους αποστολών. Συγκεκριμένα η υλοποίηση αυτή χρησιμοποιεί την εκφώνηση της ερώτησης, επιπρόσθετες πληροφορίες για την εκπλήρωση της αποστολής, 4 πιθανές απαντήσεις και τις συντεταγμένες του σημείου στο οποίο ο παίκτης πρέπει να πάει για να βρει την απάντηση στην ερώτηση που του έγινε. Οι 35

36 συντεταγμένες χρησιμοποιούνται στον χάρτη, όπου εκτός από την θέση στην οποία βρίσκεται ο παίκτης σημειώνεται και το σημείο όπου θα εντοπίσει την απάντηση στην ερώτηση που του έγινε. Επίσης μπορεί να υποστηρίξει όλο το εύρος του αριθμού των παικτών σύμφωνα με την σχεδίαση, αλλά και ακόμα περισσότερους. Επιπρόσθετα υποστηρίζει πέντε γύρους, άρα 5 διαθέσιμες, υπολογίζοντας αλγοριθμικά τον αριθμό των μελών της κάθε ομάδας. Συν τοις άλλοις, υποστηρίζει δύο γλώσσες, τα ελληνικά και τα αγγλικά με δυνατότητα επέκτασης πολύ εύκολα και σε άλλες γλώσσες. Παράλληλα μπορεί να παιχτεί από κινητά με χαμηλή, μέση και υψηλή ανάλυση. Ταυτόχρονα αποφασίστηκε η παρούσα υλοποίηση να παρέχει στους παίκτες τα ακόλουθα εργαλεία: Σημειωματάριο Χάρτη Σαρωτή κωδικών QR Για το σκοπό των αποστολών δημιουργήθηκαν οι αντίστοιχοι κωδικοί QR, όπου θεωρήθηκε απαραίτητο. Ένας από αυτούς τους κωδικούς φαίνεται παρακάτω: Η εφαρμογή παίρνει όλα τα δεδομένα από ένα εξυπηρετητή, ο οποίος είναι προγραμματισμένος σε PHP. Ο εξυπηρετητής υποστηρίζει επίσης δύο γλώσσες τα ελληνικά και αγγλικά με δυνατότητα επέκτασης και σε άλλες γλώσσες. Επιπρόσθετα ο εξυπηρετητής μπορεί να υποστηρίξει ταυτόχρονα πολλά διαφορετικά στιγμιότυπα του παιχνιδιού διαχωρίζοντας τα με έναν αναγνωριστή (Id). Επίσης ο εξυπηρετητής επικοινωνεί με μια SQL βάση δεδομένων όπου καταχωρεί και λαμβάνει δεδομένα Μηχανή Καταστάσεων Η εφαρμογή υλοποιήθηκε σαν μια απλοποιημένη μορφή μιας μηχανής καταστάσεων. Δηλαδή χρησιμοποιήθηκε μια κεντρική κλάση «RSgameApplication», η οποία είναι υπεύθυνη για την ροή των οθονών και κατέχει την γνώση της εκάστοτε κατάστασης στην οποία βρίσκεται το παιχνίδι. Οι δε καταστάσεις του παιχνιδιού ενεργοποιούνται μέσω «Events». Με την κλάση αυτή των καταστάσεων επικοινωνούν όλες οι κλάσεις οι οποίες αποτελούν τις οθόνες 36

37 του παιχνιδιού, καθώς και η κύρια υπηρεσία «GameUpdateService», η οποία είναι υπεύθυνη για την επικοινωνία με τον εξυπηρετητή του συστήματός μας και την ανταλλαγή δεδομένων με αυτόν. Οι κλάσεις Activities (που περιέχουν την γνώση για την λειτουργία και εμφάνιση των οθονών του παιχνιδιού), όταν τελειώσουν την λειτουργία τους, στέλνουν το event στην RSgameApplication. Αυτή τότε, ανάλογα με το event το οποίο έλαβε, αποφασίζει ποια οθόνη πρέπει να κλείσει, και ποια να ενεργοποιηθεί. Ακολούθως αλλάζει την κατάσταση του συστήματος, με την καινούργια κατάσταση στην οποία βρίσκεται και στέλνει τα δεδομένα που πρέπει αν υπάρχουν, στον εξυπηρετητή μέσω μιας μεθόδου-υπηρεσίας που προσφέρει η GameUpdateService. Επιπρόσθετα η υπηρεσία του παιχνιδιού, η GameUpdateService, όταν αλλάξει η κατάσταση του παιχνιδιού, κάνει τις απαραίτητες ενέργειες για την ανάληψη των απαραίτητων δεδομένων από τον εξυπηρετητή Επικοινωνία Όπως έχει προαναφερθεί, ο εξυπηρετητής προγραμματίστηκε σε γλώσσα PHP. Επικοινωνεί με μια βάση δεδομένων, όπου καταχωρεί και λαμβάνει τα απαραίτητα για τη συνέχεια του παιχνιδιού δεδομένα, τα οποία ανταλλάσσει με τον πελάτη(client) εφαρμογή που βρίσκεται στο κινητό τηλέφωνο του κάθε παίχτη. Ενδεικτικά παρουσιάζεται η επικοινωνία μεταξύ εξυπηρετητή, συσκευών και βάσης δεδομένων στο ακόλουθο σχήμα: Σχεδιάγραμμα που απεικονίζει αφηρημένα την επικοινωνία συσκευών, server και βάσης δεδομένων ΔΙΕΠΙΦΑΝΕΙΕΣ ΧΡΗΣΤΗ Η εφαρμογή για να φτάσει στην τελική της μορφή και εμφάνιση πέρασε από αρκετά πρώιμα στάδια. Θεωρείται σκόπιμο να μην παρουσιαστεί αυτή τη διαδικασία εξέλιξης καθώς δεν αποτελεί ουσιαστικά μέρος αυτής της διπλωματικής εργασίας. Θα παρουσιαστεί στη συνέχεια μόνο η τελική μορφή των οθονών, που αποτελούν 37

38 ουσιαστικά την αφετηρία της διπλωματικής εργασίας που παρουσιάζεται σε αυτό το κείμενο. ΑΡΧΙΚΗ ΟΘΟΝΗ ΟΘΟΝΗ ΠΛΗΡΟΦΟΡΙΩΝ 38

39 ΟΘΟΝΗ ΕΠΙΛΟΓΗΣ ΑΡΧΗΓΟΥ ΟΘΟΝΗ ΑΝΑΜΟΝΗΣ ΓΙΑ ΟΛΟΚΛΗΡΩΣΗ ΨΗΦΟΦΟΡΙΑΣ ΑΡΧΗΓΟΥ 39

40 ΟΘΟΝΗ ΑΝΑΘΕΣΗΣ ΑΠΟΣΤΟΛΩΝ ΟΘΟΝΗ ΕΠΙΒΕΒΑΙΩΣΗΣ ΑΝΑΘΕΣΕΩΝ 40

41 ΟΘΟΝΗ ΑΝΑΜΟΝΗΣ ΑΝΑΘΕΣΗΣ ΑΠΟΣΤΟΛΩΝ ΟΘΟΝΗ ΑΠΟΣΤΟΛΗΣ 41

42 ΟΘΟΝΗ ΣΗΜΕΙΩΜΑΤΑΡΙΟΥ ΟΘΟΝΗ ΣΑΡΩΣΗΣ ΚΩΔΙΚΩΝ QR 42

43 ΟΘΟΝΗ ΧΑΡΤΗ ΟΘΟΝΗ ΑΝΑΜΟΝΗΣ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΑΠΟΣΤΟΛΩΝ 43

44 ΟΘΟΝΗ ΑΠΟΚΑΛΥΨΗΣ ΚΑΤΑΣΚΟΠΩΝ ΟΘΟΝΗ ΑΝΑΜΟΝΗΣ ΑΠΟΚΑΛΥΨΗΣ ΚΑΤΑΣΚΟΠΩΝ 44

45 ΕΙΔΟΠΟΙΗΣΗ ΓΙΑ ΠΛΗΡΟΦΟΡΙΕΣ ΕΙΔΟΠΟΙΗΣΗ ΓΙΑ ΑΠΟΤΕΛΕΣΜΑΤΑ ΚΑΙ ΑΛΛΕΣ ΛΕΙΤΟΥΡΓΙΕΣ ΑΛΛΗΛΕΠΙΔΡΑΣΗΣ ΧΡΗΣΤΗ ΣΥΣΤΗΜΑΤΟΣ 45

46 ΟΘΟΝΗ ΠΙΘΑΝΩΝ ΑΠΑΝΤΗΣΕΩΝ ΟΘΟΝΗ ΤΕΛΟΥΣ ΠΑΙΧΝΙΔΙΟΥ 46

47 Οι βασικές αρχές στις οποίες επικεντρώθηκε η παραπάνω εμφάνιση των οθονών είναι οι εξής: Να δίνεται έμφαση στα σημαντικά σημεία της οθόνης. Έτσι τα φόντα έγιναν θαμπά και αόριστα, με σκοπό να μην τραβούν την προσοχή του χρήστη ώστε αυτός να κατευθύνει την προσοχή του στα σημεία της οθόνης που έχουν να κάνουν με τη λειτουργικότητα του παιχνιδιού. Η βοήθεια που πιθανόν να χρησιμοποιηθεί από άπειρους χρήστες του παιχνιδιού, και μπορεί να τους κατευθύνει ώστε να ανακαλύψουν την πλήρη λειτουργικότητα της εφαρμογής. Η πρόσβαση σε αυτή γίνεται από το αντίστοιχο πλήκτρο σε κάθε οθόνη. Υπάρχει επιλογή διόρθωσης μιας απόφασης του χρήστη καθώς πριν τελειοποιήσει κάθε απόφασή του υπάρχει η δυνατότητα να κάνει πίσω και να ξανασκεφτεί τις επιλογές του. Υπάρχει μια συνέχεια σχετικά με το layout των οθονών, με αποτέλεσμα τα πλήκτρα με την ίδια λειτουργικότητα να μένουν πάντα στην ίδια θέση και η μπάρα προόδου για την ολοκλήρωση κάθε διαδικασίας πάντα βρίσκεται στο πάνω μέρος της οθόνης. Σαν συμπέρασμα βγαίνει ότι ήδη από την αρχική της μορφή η εφαρμογή έχει σχεδιαστεί ακλουθώντας σε μεγάλο βαθμό τους κανόνες ευχρηστίας, και με γνώμονα το χρήστη και την εμπειρία που θα αποκομίσει από αυτή την εφαρμογή. Η εφαρμογή όμως θα μπορούσε σίγουρα να είναι πιο καλαίσθητη αν άλλαζε η εμφάνισή της. Πιο συγκεκριμένα, και αφού ένας από τους κύριους σκοπούς αυτής της διπλωματικής εργασίας είναι η προσθήκη μιας ιστορίας που θα συνδέει μεταξύ τους τις τυχαίες αποστολές του παιχνιδιού, η εμφάνιση θα μπορούσε να αλλάξει ώστε να είναι μέσα σε αυτό το κλίμα, με απώτερο σκοπό να βάζει τον χρήστη παίκτη στην ατμόσφαιρα του παιχνιδιού, παρά απλά να περνά απαρατήρητη ώστε να μην του αποσπάσει την προσοχή. 47

48 ΚΕΦΑΛΑΙΟ 4 ΣΚΕΨΕΙΣ ΓΙΑ ΒΕΛΤΙΩΣΗ 4.1 ΑΡΧΙΚΕΣ ΣΚΕΨΕΙΣ Όπως αναφέρθηκε στο προηγούμενο κεφάλαιο, η εφαρμογή Invisible City επελέγη για την παρούσα διπλωματική για διάφορους λόγους. Αρχικά γιατί κίνησε το ενδιαφέρον, τόσο σαν μια πολύ καλή ιδέα για ένα πολύ ενδιαφέρον pervasive game, όσο και ως ένας καλός λόγος για να γίνουν γνωστά περισσότερα πράγματα για την Πάτρα, όχι μόνο στους πρώτους παίκτες, αλλά ίσως και σε άλλους ανθρώπους που ίσως το παίξουν στο μέλλον. Επιπλέον ο τρόπος με τον οποίο μετασχηματίστηκε το αρχικό παιχνίδι («Νύχτα στο Παλέρμο») για να ταιριάξει σαν βασική ιδέα ενός pervasive game, άφησε πολλά περιθώρια για την ενσωμάτωση μιας πολύ καλής και βαθύτερης υπόθεσης, η οποία θα κρατά σε ενδιαφέρον το χρήστη, πάντα χωρίς να του αποσπά την προσοχή από το ίδιο το παιχνίδι. Έτσι λοιπόν το πρώτο σημείο το οποίο αποφασίστηκε να βελτιωθεί ήταν αυτό: η προσθήκη υπόθεσης στο παιχνίδι καθώς και η βελτίωση του layout ώστε να γίνει λίγο καλύτερο και να ταιριάξει σε αυτή την υπόθεση. Ακόμη η προσθήκη νέων ειδών αποστολών και ενός τελικού στόχου ταίριαζαν με το στόχο της εργασίας. Επίσης, κρίθηκαν σκόπιμες η ενσωμάτωση κάποιων επιπλέον δυνατοτήτων και η καλύτερη αξιοποίηση κάποιων δυνατοτήτων που ήδη υπήρχαν. Πιο συγκεκριμένα επιδιώχθηκε να χρησιμοποιηθούν σε μεγαλύτερο βαθμό οι λειτουργίες του χάρτη και της σάρωσης κωδικών QR. Για την επιπλέον χωρική επέκταση του παιχνιδιού, η εκτενής χρήση της λειτουργίας του χάρτη, δηλαδή η συνεργασία της εφαρμογής με τους χάρτες της Google (Google Maps), είναι τουλάχιστον απαραίτητη. Επιπλέον, μέσω της λειτουργίας GPS θα μπορούσαν να ολοκληρωθούν ορισμένες αποστολές, με στόχο την άφιξη σε κάποιο σημείο. Ακόμη, η σάρωση κωδικών QR, θα μπορούσε να χρησιμοποιηθεί ως στόχος μιας αποστολής (εύρεση ενός αντικειμένου, πάνω στο οποίο βρίσκεται ο κωδικός), ή ως τρόπος για συλλογή στοιχείων για την απάντηση μιας δύσκολης και όχι προφανούς ερώτησης. Τέλος, η εφαρμογή με την οποία ξεκίνησε αυτή η διπλωματική εργασία, αν και πολύ καλή, είχε κάποιες ατέλειες, τόσο στη λειτουργία της, όπου υπήρχαν κάποια bugs, όσο και στην επικοινωνία της με το server η οποία δεν ήταν ιδανική. Έτσι κρίθηκε σκόπιμο να επικεντρωθεί η παρούσα εργασία και στη βελτίωση αυτών των ατελειών. Επίσης για τη βελτίωση του server, επεξεργάστηκε η ιδέα της χρήσης του νέου εργαλείου της Google, του Google Cloud Messaging, το οποίο ουσιαστικά ήταν τέλειο για μια εφαρμογή σαν την προτεινόμενη, που χρειάζεται συνεχή ενημέρωση των πελατών (clients), από το server. 48

49 Κάπως έτσι λοιπόν ξεκίνησε το ταξίδι αυτής της διπλωματικής εργασίας. Στη συνέχεια παρουσιάζονται λεπτομερώς οι σκέψεις καθώς και η εργασία πίσω από την τελική εφαρμογή που αποτελεί τον καρπό αυτής της διπλωματικής εργασίας. 4.2 ΒΕΛΤΙΩΣΗ ΤΟΥ SERVER Το παιχνίδι που επιδιώχθηκε να βελτιωθεί είναι ένα παιχνίδι με πολλούς παίχτες και οι συσκευές πρέπει με κάποιον τρόπο να μένουν συγχρονισμένες με την τρέχουσα κατάσταση του παιχνιδιού. Έτσι κάθε συσκευή τρέχει το δικό της στιγμιότυπο του client και ο server αναλαμβάνει την αποθήκευση των πληροφοριών και της εξέλιξης του παιχνιδιού στη βάση δεδομένων καθώς και το συγχρονισμό όλων των clients στο τέλος κάθε γύρου. Παρατηρείται λοιπόν ότι η αφανής, στα μάτια του χρήστη της εφαρμογής, δουλειά του server είναι εξαιρετικά σημαντική. Για να γίνει όμως κατανοητή αυτή η επιλογή της εργασίας να δοθεί βάρος στη βελτίωση του server θα πρέπει να γίνει αναφορά στον αρχικό τρόπο λειτουργίας του και στο λόγο που αποφασίστηκε η αλλαγή του. Αρχικά θα γίνει μια μικρή αναφορά στο πώς λειτουργεί γενικά ένα σύστημα που στηρίζει την λειτουργία του σε server. Ένα σύστημα που λειτουργεί με clients και server, είναι ένα σύστημα το οποίο ενώνει μέσα από ένα δίκτυο διάφορους υπολογιστικούς πόρους, ώστε οι clients (ή αλλιώς front end) να μπορούν να ζητούν πληροφορίες ή επιπρόσθετη υπολογιστική ισχύ από το server. Στη περίπτωση της εργασίας ισχύουν και τα δύο, καθώς στο server αποστέλλονται τα δεδομένα απαντήσεων, ψηφοφοριών κλπ και εκεί γίνονται όλοι οι υπολογισμοί που καθορίζουν την τρέχουσα κατάσταση του παιχνιδιού. Στη συνέχεια λαμβάνεται μέριμνα ώστε όλες οι συσκευές να βρίσκονται στην ίδια κατάσταση του παιχνιδιού. Επίσης ο server είναι η διεπαφή επικοινωνίας του client με τη βάση δεδομένων του παιχνιδιού. 49

50 Με άλλα λόγια, στο μοντέλο client server, ο client θέτει μια αίτηση και ο server επιστρέφει μια ανταπόκριση ή κάνει μια σειρά από ενέργειες. Για παράδειγμα, δουλειά του server είναι να μεταβιβάσει μετά από αίτηση του client τα στοιχεία ενός παίκτη που πραγματοποίησε εγγραφή στη βάση δεδομένων. Επίσης δουλειά του server είναι να υπολογίσει το νικητή της ψηφοφορίας για τον αρχηγό του γύρου, αφού έχει λάβει από το κάθε στιγμιότυπο του client την ψήφο του κάθε παίχτη. Επίσης στη συνέχεια ο server αποθηκεύει αυτή την πληροφορία στη βάση δεδομένων κι επιστρέφει το αποτέλεσμα στους clients. Συγκεκριμένα στην εφαρμογή της εργασίας, η δουλειά του server είναι γενικά η διατήρηση όλων των clients ενημερωμένων στην τελευταία ισχύουσα κατάσταση του παιχνιδιού. Αυτό γίνεται μέσα από διάφορες ενέργειες που θα αναφερθούν στη συνέχεια. O server είχε διάφορες συγκεκριμένες απλές λειτουργίες που ο συνδυασμός τους επέτρεπε τον κύριο σκοπό του, που αναφέρθηκε πολλές φορές προηγουμένως, την ενημέρωση, δηλαδή, των clients. Διέθετε λειτουργίες για την επιστροφή ενός πίνακα με τα στοιχεία των παικτών, ώστε αυτός να γίνει διαθέσιμος για διάφορους σκοπούς (ψηφοφορία αρχηγού, ψηφοφορία αποχώρησης, ανάθεση αποστολών από τον αρχηγό) στον client. Επίσης είχε τη δυνατότητα με παρόμοιες λειτουργίες να επιστρέψει, μετά από αίτημα, τον αριθμό των παικτών καθώς και τους αριθμούς των επαναστατών (πλειονότητα χωρίς γνώση) και των κατασκόπων (ενημερωμένη μειονότητα). Επίσης διέθετε διάφορες λειτουργίες για την ανάκτηση των αποστολών, των ειδών αποστολών, την αποθήκευση της ανάθεσης αποστολών από τον αρχηγό στη βάση δεδομένων, την εισαγωγή των δεδομένων των ψηφοφοριών στη βάση δεδομένων, τον υπολογισμό της εξέλιξης ψηφοφοριών, είτε αυτές ήταν για την εκλογή αρχηγού, είτε για αίτημα αποχώρησης παίκτη. Επιπρόσθετα οι πιο σημαντικές λειτουργίες που διαθέτει είναι αυτές που υπολογίζουν το αποτέλεσμα του γύρου, και δίνουν βάσεις στους επαναστάτες ή στους κατασκόπους, αποθηκεύουν αυτή την κατάσταση στη βάση δεδομένων, και ενημερώνουν τους clients γι αυτή την κατάσταση, η οποία θα αποτελέσει την αρχική κατάσταση για το ξεκίνημα ενός νέου γύρου. Υπολογίζει δε, πότε έχει απαντηθεί σωστά μια ερώτηση, συγκρίνοντας την απάντηση του παίκτη με τη σωστή απάντηση που είναι καταχωρημένη στη βάση δεδομένων και καταχωρεί την απάντηση ως σωστή ή λανθασμένη. Τέλος, όταν τελειώσει το παιχνίδι, καλύπτοντας μια από τις συνθήκες τέλους, υπολογίζει το νικητή και στέλνει προς εμφάνιση τα δεδομένα των δύο ομάδων. Παρατηρούμε ότι οι clients, ο server και η βάση δεδομένων ανταλλάσουν συνεχώς δεδομένα. Τα δεδομένα που αποστέλλονται από το server στους clients είναι οργανωμένα με βάση αρχεία xml που περιέχονται στο server, ώστε οι πληροφορίες να 50

51 μπορούν να διαβαστούν από τους clients. Η επικοινωνία, από την άλλη, με τη βάση δεδομένων γίνεται μέσω ερωτoαπαντήσεων σε sql. Όλες οι λειτουργίες που περιγράφηκαν παραπάνω μπορούν να πραγματοποιηθούν πολύ πιο απλά με τη χρήση μιας νέας υπηρεσίας της Google, το Google Cloud Messaging (GCM). Στην αναλυτική περιγραφή της υπηρεσίας αυτής στο κεφάλαιο 2, γίνεται εμφανές το γιατί. Μετά από αυτές τις εισαγωγικές σκέψεις ήρθε η ώρα για την αξιολόγηση της εφαρμογής και την αλλαγή όσων λεπτομερειών κρίθηκε απαραίτητο. Στο επόμενο κεφάλαιο ξεκινά η περιγραφή της δουλειάς που έγινε για τη βελτίωση της εφαρμογής αλλά και της αλλαγής προς την επιθυμητή κατεύθυνση. 51

52 ΚΕΦΑΛΑΙΟ 5 ΕΛΕΓΧΟΣ ΚΑΙ ΒΕΛΤΙΩΣΗ Στη συνέχεια του κεφαλαίου θα περιγραφεί ένα μεγάλο μέρος αυτής της διπλωματικής εργασίας, που ουσιαστικά σκοπό είχε να κάνει μια καλή εφαρμογή ακόμη καλύτερη, χρησιμοποιώντας νέες τεχνολογίες (GCM) αλλά και διορθώνοντας τυχόν λάθη. Η βελτίωση πέρασε από 3 βασικά στάδια. Τον εντοπισμό και τη διόρθωση τυχόν λαθών που επηρέαζαν την απόδοση ή και πιθανόν την ομαλή λειτουργία της εφαρμογής, τη διόρθωση του server και το πέρασμα στην υπηρεσία GCM αλλά και την ενσωμάτωση λειτουργίας GPS, και τέλος την προσθήκη ιστορίας στο παιχνίδι και την τελική απαλλαγή από σφάλματα πριν την τελική δοκιμή στην πόλη της Πάτρας. 5.1 ΠΡΟΒΛΗΜΑ 1 ο Μετά από αναφορές χρήστη που είχαν να κάνουν με την ομαλή λειτουργία της εφαρμογής κατά τη διάρκεια της εκκίνησης, αλλά και της χρήσης της, αποφασίστηκε να ερευνηθούν και να διορθωθούν κάποια τυχόν λάθη στον κώδικα που προκαλούσαν τέτοια φαινόμενα. Πιο συγκεκριμένα οι αναφορές περιλαμβάνουν κρέμασμα της εφαρμογής καθώς και αδυναμία ορθής εκκίνησης. Έχοντας υπόψιν τις παραπάνω παρατηρήσεις έπρεπε να βρεθούν τα αίτια αυτών των φαινομένων και να επαλειφθούν Έρευνα προβλήματος: Αρχικά, η έρευνα ξεκίνησε με τη συλλογή στατιστικών στοιχείων. Δεν διαπιστώθηκαν τέτοια σφάλματα κατά την δοκιμή της εφαρμογής κι έτσι δημιουργήθηκε η εξής μεθοδολογία ώστε να παραχθεί ένα Test Case που να αναδεικνύει το πρόβλημα, με στόχο αυτό να μπορέσει να αντιμετωπιστεί. Η εργασία προχώρησε με τη δημιουργία ερωτηματολογίων με ερωτήσεις στοχευμένες στις συνθήκες κάτω από τις οποίες παρουσιάστηκε το κάθε πρόβλημα. Πιο συγκεκριμένα οι ερωτήσεις στους παίκτες ήταν: 1. Σε ποιο σημείο της εφαρμογής εμφανίστηκε το πρόβλημα; (εκκίνηση, διάρκεια, κλείσιμο) 2. Ήταν δυνατόν να επαναλάβουν το ίδιο σφάλμα; Αν ναι ήταν δυνατό να γίνει αυτό πάνω από 3 φορές; 3. Σε τι συσκευή έτρεξε το παιχνίδι; Τι έκδοση του λογισμικού Android είχε η συσκευή; Ποια είναι τα χαρακτηριστικά της συσκευής; Έχει κάποιες ιδιαιτερότητες; 4. Με ποιο τρόπο εγκατέστησαν την εφαρμογή; 52

53 5. Ποια μηνύματα σφάλματος είδαν και πως τα διαχειρίστηκαν; 6. Μπορούν να υποδείξουν το σφάλμα ώστε να γίνει παρατήρηση από τον συντάκτη της εργασίας; Μετά από μελέτη των απαντήσεων των χρηστών και την αποδοχή ότι η εφαρμογή είναι σε προχωρημένο στάδιο εξέλιξης, η εργασία προχώρησε στην αξιολόγηση του ήδη υπάρχοντος προγράμματος για προγραμματιστικά λάθη. Παραδείγματα λαθών είναι τα ακόλουθα: Μη αρχικοποίηση μεταβλητών Λάθος αρχικοποίηση μεταβλητών Υλοποίηση υποθέτοντας πως υπάρχουν όλα τα resources σε όλα τα σημεία του κώδικα Δικαιώματα πρόσβασης σε αρχεία, μεθόδους, services, listeners, provides. Λάθη υλοποίησης και work-flow προγράμματος Επίλυση προβλήματος: Δύο ήταν τα πράγματα που έπρεπε να γίνουν προκειμένου να λυθούν τα φαινόμενα αστάθειας της εφαρμογής. Πρώτον να στηθούν πολλαπλά Android VM ώστε να δοκιμαστεί η εφαρμογή υπό διάφορες συνθήκες και σε διαφορετικές συσκευές με τις αντίστοιχες εκδόσεις του λειτουργικού. Δεύτερον ο κώδικας να αλλάξει σε μια πιο modular λογική, που θα βοηθήσει και στην ενσωμάτωση της χρήσης GCM. Τα Android VM δημιουργήθηκαν ώστε να δοκιμαστεί η εφαρμογή σε διάφορα συστήματα και με διαφορετικούς τρόπους. Ακόμη και σαν VM και όχι πραγματικές συσκευές απέδωσαν αρκετές πληροφορίες σαν feedback με τις οποίες δόθηκε η δυνατότητα στοχευμένα να γίνει έλεγχος του κώδικα γραμμής, και να γίνουν παρατηρήσεις σε ποια σημεία εμφανίζονται τα προβλήματα που αναφέρθηκαν προηγουμένως. Το σίγουρο είναι πως η εφαρμογή έχει γίνει πολύ πιο προσεκτική σε τέτοιες περιπτώσεις, και τέτοιου είδους αστάθειες μπορούν πιο εύκολα να αντιμετωπιστούν. Επίσης πρέπει να σημειωθεί ότι με την ευκαιρία διορθώθηκαν και ορισμένα bugs που παρατηρήθηκαν κατά τη χρήση της εφαρμογής. Στη συνέχεια περιγράφονται με λεπτομέρεια οι αλλαγές που πραγματοποιήθηκαν στον κώδικα με σκοπό την εξάλειψη των φαινομένων που έχουν περιγραφεί προηγουμένως, καθώς και την προσθήκη ορισμένων λειτουργιών στην εφαρμογή. 53

54 5.1.3 Αλλαγή 1 η : Γενικές αλλαγές Κατά την έναρξη του προγράμματος πρέπει να γίνει αρχικοποίηση της διασύνδεσης με τον GPS provider, έτσι ώστε να μπορέσει να πραγματοποιήσει ερωτήματα για τη θέση του χρήστη της εφαρμογής. Αυτό που έπρεπε να διορθωθεί στο σημείο αυτό, είναι να γίνεται έλεγχος πριν τη διασύνδεση για το αν η συσκευή έχει απενεργοποιημένη τη λειτουργία GPS, καθώς αν δεν την έχει, πριν την αρχή της διασύνδεσης μπορεί να παρουσιαστούν φαινόμενα αστάθειας. Το κυριότερο πρόβλημα που επιλύεται όμως, είναι πως αφού δεν προλαμβάνονται τέτοια γεγονότα, η ροή του προγράμματος έχει ασυνέχειες, κάτι που δεν είναι αποδεκτό. Ο κώδικας που ήταν στο : // Register the listener with the Location Manager to receive location // updates locationmanager.requestlocationupdates(locationmanager.gps_provider, 0, 15, locationlistener); άλλαξε σε: // Register the listener with the Location Manager to receive location // updates LocationManager service = (LocationManager) getsystemservice(location_service); boolean enabled = service.isproviderenabled(locationmanager.gps_provider); if (!enabled) { //Here we show the use the settings to enable it Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startactivity(intent); locationmanager.requestlocationupdates(locationmanager.gps_provider, 0, 15, locationlistener); 54

55 // Continue with the flow Για τη σωστή υλοποίηση έπρεπε να γίνουν διάφορα imports σε κλάσεις της Java στον κώδικα, όποτε κρίθηκε αυτό απαραίτητο. Σαν παράδειγμα αναφέρονται εδώ ως αλλαγή τα παρακάτω: import java.text.collator; import java.util.collections; import java.util.comparator; import java.util.map; Αλλαγή 2 η : Προετοιμασία για πέρασμα σε GCM Οι αλλαγές που περιγράφονται στη συνέχεια αναφέρονται κυρίως στην επικοινωνία μεταξύ του server και της εφαρμογής. Ο σκοπός των αλλαγών που αναφέρονται είναι η αύξηση της σταθερότητας αλλά και η διαμόρφωση του προγράμματος ώστε να γίνει η μετατροπή του server σε GCM χωρίς προβλήματα. Οι αλλαγές περιγράφονται παρακάτω ξεχωριστά η κάθε μία, με περιγραφή για το λόγο της αλλαγής αλλά και την αλλαγή της λειτουργικότητας. 1.Πρέπει πριν γίνει διακοπή του counter, να υπάρχει βεβαιότητα ότι αυτός στην πραγματικότητα υπάρχει, διαφορετικά ίσως προκληθεί πρόβλημα στην κανονική ροή του προγράμματος. Πριν public void ondestroy() { super.ondestroy(); // Log.d("TIMER", "Timer ondestroy called"); counter.cancel(); public void ondestroy() { super.ondestroy(); // Log.d("TIMER", "Timer ondestroy called"); if(counter!=null) counter.cancel(); else Log.d("TIMER", "Timer was not set while destroy"); 2. Εδώ δεν ορίζεται η default περίπτωση στη switch, δηλαδή τι θα συμβεί σε περίπτωση που κάποιο αντικείμενο επιστρέψει κενό. Μια τέτοια περίπτωση είναι πάντα πιθανή και μπορεί να προκαλέσει μια αλυσιδωτή αντίδραση που στο τέλος θα κάνει το 55

56 πρόγραμμα να καταρρεύσει. Τέτοιες περιπτώσεις λοιπόν καλό είναι να προληφθούν. Στη συγκεκριμένη περίπτωση φαίνεται πως το να σταματήσει το PeriodicTask λύνει το πρόβλημα σε αυτή την περίπτωση. Πριν private class CommandForServerReceiver extends BroadcastReceiver public void onreceive(context context, Intent intent) { int commandordinal = intent.getintextra("command", -1); if (commandordinal >= 0) { switch (ServiceControl.intValue(commandOrdinal)) { case RESUME: startperiodicupdatetask(); break; case PAUSE: stopperiodicupdatetask(); break; Μετά private class CommandForServerReceiver extends BroadcastReceiver public void onreceive(context context, Intent intent) { int commandordinal = intent.getintextra("command", -1); if (commandordinal >= 0) { switch (ServiceControl.intValue(commandOrdinal)) { case RESUME: startperiodicupdatetask(); break; case PAUSE: stopperiodicupdatetask(); break; default : stopperiodicupdatetask(); break; 3. Γενικά τα Exception πρέπει να πιάνονται κατά τη διάρκεια λειτουργίας του προγράμματος. Για τον εντοπισμό προβλημάτων που πιθανόν να συμβούν χρησιμοποιήθηκαν γενικού τύπου Exception, με στόχο να γίνει διαπίστωση τι είδη θα πεταχτούν, ώστε να υπάρχει δυνατότητα να διορθωθούν. 56

57 Πριν // Get initial configuration and start periodic update public int onstartcommand(intent intent, int flags, int startid) { if ((flags & START_FLAG_RETRY) == 0) { try { username = intent.getstringextra("username"); startperiodicupdatetask(); catch (Exception e) { logger.error(tag + "exception while starting gameupdateservice " + Μετά else { startperiodicupdatetask(); return Service.START_STICKY; e.tostring()); // Get initial configuration and start periodic update public int onstartcommand(intent intent, int flags, int startid) { if ((flags & START_FLAG_RETRY) == 0) { try { username = intent.getstringextra("username"); startperiodicupdatetask(); catch (Exception e) { logger.error(tag + "exception while starting gameupdateservice " + e.tostring()); return null; else { startperiodicupdatetask(); return Service.START_STICKY; 4. Στη συγκεκριμένη περίπτωση υπάρχει η δυνατότητα να γίνει και rewrite κάποια στιγμή, με σκοπό να δημιουργηθεί ένα timer loop λιγότερο τρωτό από προβλήματα που μπορεί να παρουσιαστούν κατά τη διάρκεια του κώδικα. Πριν private void stopperiodicupdatetask() { if (timertaskrunning) { timertaskrunning = false; logger.info(tag + " stopperiodicupdatetask() "); if (timer!= null) { gameupdatetask.cancel(); timer.purge(); logger.debug(tag + "period task canceled " + Integer.toString(timerCounter++)); 57

58 Μετά private void stopperiodicupdatetask() { while(timertaskrunning) { timertaskrunning = false; logger.info(tag + " stopperiodicupdatetask() "); if (timer!= null) { gameupdatetask.cancel(); timer.purge(); logger.debug(tag + "period task canceled " + Integer.toString(timerCounter++)); 5. Υπάρχουν στοιχεία στον κώδικα που θα μπορούσαν να μετατραπούν τα ίδια σε ξεχωριστά αντικείμενα. Με αυτό τον τρόπο ο κώδικας θα γίνει πιο σταθερός αλλά και θα βοηθηθεί η ταχύτητα του προγράμματος καθώς δε θα χρειάζεται να αναδημιουργούνται τα ίδια συνεχώς. Πριν // String urlofplayerlist = getstring(r.string.server_url) + // getstring(r.string.server_roundinfo); URLConnection connection;// change configurationurl = new URL(lookupUrl); connection = configurationurl.openconnection(); logger.debug(tag + "Getting initial configuration from " + lookupurl.tostring()); Μετά //Global vars connection conncection = null;. // String urlofplayerlist = getstring(r.string.server_url) + // getstring(r.string.server_roundinfo); URLConnection connection;// change configurationurl = new URL(lookupUrl); connection = configurationurl.openconnection(); logger.debug(tag + "Getting initial configuration from " + lookupurl.tostring()); 6. Σε ορισμένες περιπτώσεις πρέπει να αποφασιστεί η ροή που θα ακολουθήσει το πρόγραμμα σε σημεία όπου η συνθήκη που ενδιαφέρει το παιχνίδι, δεν παίρνει μόνο τις δύο λογικές τιμές true/false. Σε αυτές τις περιπτώσεις δόκιμο είναι να χρησιμοποιείται η switch, με την οποία πολύ εύκολα μπορεί να επιλεγεί μια 58

59 περίπτωση. Το κακό με τις switch είναι, ότι αν ένα ενδεχόμενο εμφανίζεται πολύ πιο συχνά από τα υπόλοιπα, τότε ο έλεγχος όλων των περιπτώσεων προσθέτει επιπλέον φόρτο στο πρόγραμμα που στην πραγματικότητα μπορεί να αποφευχθεί. Η λύση εδώ είναι, να εξεταστεί αν υπάρχει κάποια περίπτωση που να συμβαίνει πολύ πιο συχνά από τις υπόλοιπες και να ελέγχεται ξεχωριστά πριν τη switch. Πριν SWITCH(RSgameApplication.currentState) case STATUS_WAITING_FOR_LEADER_VOTE_RESULT Μετά if(status_waiting_for_leader_vote_result) {... SWITCH(RSgameApplication.currentState) case STATUS_STARTED: 7. Παρόμοια περίπτωση με το σημείο 3, αλλά εδώ υπάρχει μια ιδιαίτερη περίπτωση όπου απλά η ακύρωση του γεγονότος δεν αρκεί. Εδώ θα πρέπει να δοθεί μια τιμή με την οποία το πρόγραμμα θα εξακολουθήσει να λειτουργεί χωρίς πρόβλημα. Πριν case STATUS_ENDED: try { unregisterreceiver(dataforserverreceiver); catch (IllegalArgumentException e) { logger.debug(tag + "Illegal Argument exception:" + e); Μετά GameUpdateService.this.stopSelf(); break; case STATUS_ENDED: boolean unregistered = false; try { unregisterreceiver(dataforserverreceiver); unregistered = true; catch (IllegalArgumentException e) { logger.debug(tag + "Illegal Argument exception:" + e.tostring()); if(unregistered) GameUpdateService.this.stopSelf(); break; 59

60 8. Τελευταία αλλαγή, που προς το παρόν είναι σε εξέλιξη, είναι το ίδιο το life cycle να αλλάξει με σκοπό να γίνει πιο αποδοτικό και να μπορέσει να μην χρησιμοποιεί άσκοπα πόρους του συστήματος. Στη συνέχεια παρουσιάζεται ενδεικτικά μια αλλαγή καθώς το σύνολο των αλλαγών στα πλαίσια της βελτίωσης του life cycle δεν μπορούν να αποτυπωθούν σε ένα κείμενο. Πριν // lifecycle methods public void oncreate() { super.oncreate(); app = ((RSgameApplication) getapplication()); PropertyConfigurator.getConfigurator(this).configure(); Logger rootlogger = DefaultLoggerRepository.INSTANCE.getRootLogger(); FileAppender fileappender = new FileAppender(); fileappender.setfilename("rsgame.txt"); fileappender.setappend(true); rootlogger.addappender(fileappender); rootlogger.addappender(new LogCatAppender()); PatternFormatter formatter = new PatternFormatter(); formatter.setpattern("%d: %m %T"); int numberofappenders = rootlogger.getnumberofappenders(); for (int appenderno = 0; appenderno < numberofappenders; appenderno++) { Appender appender = rootlogger.getappender(appenderno); appender.setformatter(formatter); dataforserverreceiver = new DataForServerReceiver(); registerreceiver(dataforserverreceiver, dataforserverreceiverfilter); commandforserverreceiver = new CommandForServerReceiver(); registerreceiver(commandforserverreceiver, commandforserverreceiverfilter); Μετά // lifecycle methods public void oncreate() { super.oncreate(); app = ((RSgameApplication) getapplication()); PropertyConfigurator.getConfigurator(this).configure(); Logger rootlogger = DefaultLoggerRepository.INSTANCE.getRootLogger(); FileAppender fileappender = new FileAppender(); fileappender.setfilename("rsgame.txt"); fileappender.setappend(true); 60

61 rootlogger.addappender(fileappender); rootlogger.addappender(new LogCatAppender()); PatternFormatter formatter = new PatternFormatter(); formatter.setpattern("%d: %m %T"); int numberofappenders = rootlogger.getnumberofappenders(); for (int appenderno = 0; appenderno < numberofappenders; appenderno++) { Appender appender = rootlogger.getappender(appenderno); appender.setformatter(formatter); setservice(); private boolean setservice() { dataforserverreceiver = new DataForServerReceiver(); registerreceiver(dataforserverreceiver, dataforserverreceiverfilter); commandforserverreceiver = new CommandForServerReceiver(); registerreceiver(commandforserverreceiver, commandforserverreceiverfilter); return true; Μέσα από τις προηγούμενες αλλαγές, σκοπός ήταν να ακολουθηθεί η ροή του ήδη υπάρχοντος προγράμματος και μέσα από μικρές αλλαγές και διορθώσεις να διορθωθούν τυχόν αστάθειες. Ο στόχος τελικά είναι να μην παρουσιαστούν προβλήματα που θα ενοχλήσουν κατά το πέρασμα σε GCM. 5.2 ΠΡΟΒΛΗΜΑ 2 ο Επικοινωνία με το server Η εφαρμογή αυτή τη στιγμή συνδέεται με έναν συγκεκριμένο server για τη χρήση της. Η επικοινωνία όμως δεν είναι τέλεια με αποτέλεσμα να επηρεάζει την εμπειρία του χρήστη. Έτσι αποφασίστηκε να γίνει χρήση της υπηρεσίας Google Cloud Messaging, και άρα αντίστοιχη μετατροπή του server και αποσφαλμάτωσή του. Με αυτό τον τρόπο ο χρήστης δε θα αντιλαμβάνεται τι συμβαίνει πίσω από την επιφάνεια του παιχνιδιού αφού δε θα βιώνει καθυστερήσεις, καθώς η επικοινωνία θα γίνεται πιο εύκολα και αβίαστα. 61

62 5.2.2 Επίλυση του προβλήματος: Αυτή τη φορά το πρόβλημα ήταν πιο εύκολο τόσο στην παρατήρησή του, όσο και στην αντιμετώπισή του, συγκρινόμενο με το προηγούμενο, καθώς ήταν πολύ πιο συγκεκριμένο και εύκολο να εντοπιστεί. Έπρεπε να παρατηρηθεί η αμεσότητα απάντησης του server καθώς και η διαθεσιμότητά του κάτω από συνθήκες εργασίας. Αυτό έπρεπε να γίνει υπό πραγματικές συνθήκες λειτουργίας, που σημαίνει ότι πρέπει να συνυπολογιστούν η χρήση της βάσης δεδομένων καθώς και η επεξεργασία στην οποία υποβάλλονται τα δεδομένα από το server. Η συλλογή των παραπάνω δεδομένων μας βοήθησαν να απαντήσουμε στο ερώτημα: Θα κερδίσουμε από τη χρήση της υπηρεσίας Google Cloud Messaging; Μετά τη μέτρηση της απόδοσης του server ερευνήθηκαν οι αποσυνδέσεις της εφαρμογής από το server και χρησιμοποιήθηκαν τα στατιστικά στοιχεία που αποκομίστηκαν (συχνότητα αποσυνδέσεων και επιπτώσεις στο server και την απόδοση της εφαρμογής). Η εφαρμογή ιδανικά θα έπρεπε να συνεχίζει κανονικά το flow των εργασιών της ανεπηρέαστη από τυχόν αποσύνδεσή της με το server Μεθοδολογία επίλυσης: Για τον εντοπισμό και την επίλυση των προβλημάτων του server δημιουργήθηκε ένα απλό πρόγραμμα σε PHP που σκοπό είχε να βομβαρδίσει το server με πολλαπλά αιτήματα, προσομοιώνοντας πραγματική λειτουργία με πολλούς χρήστες να συμμετέχουν σε πολλά στιγμιότυπα του παιχνιδιού. Τα αποτελέσματα ήταν ενθαρρυντικά καθώς ο ήδη υπάρχων server δεν αντιμετώπισε ιδιαίτερες δυσκολίες στο να εξυπηρετήσει τις αιτήσεις με τις οποίες βομβαρδίστηκε. Αυτό σημαίνει πως ανεξάρτητα από μικρές καθυστερήσεις ο server κατάφερε να φέρει σε πέρας όλες τις εργασίες που του ζητήθηκε να πραγματοποιήσει. Αυτό οδήγησε στο συμπέρασμα πως η υπηρεσία Google Cloud Messaging θα μείωνε το φόρτο του server και σε συνδυασμό με μικροβελτιώσεις θα είχε αποτέλεσμα την απρόσκοπτη λειτουργία του, με απώτερο σκοπό τη βελτιωμένη εμπειρία του χρήστη. Επιπλέον η διαδικασία που περιγράφηκε προηγουμένως δεν επέφερε επιπλέον διορθώσεις στην εφαρμογή, καθώς η εργασία του προηγούμενου σκέλους ήταν αρκετά λεπτομερής και δεν αναδύθηκε κάποιο νέο πρόβλημα στην επιφάνεια Κώδικας Ως βάση για τον κώδικα στο server μας για την επικοινωνία του με την υπηρεσία GCM και κατ επέκταση με τις φορητές μας συσκευές, χρησιμοποιήθηκε ένα πολύ καλό tutorial από μια πολύ γνωστή σελίδα του διαδικτύου για προγραμματιστές android, το androidhive.com. 62

63 Το πρώτο βήμα για την αρχή της εργασίας με GCM ήταν η δημιουργία ενός account για χρήση της υπηρεσίας. Στη συνέχεια έπρεπε να δημιουργηθεί ένα Project ώστε να υπάρχει δυνατότητα λήψης του API key. Στη συνέχεια έπρεπε να κατεβεί ο χρήστης στο εργαλείο προγραμματισμού όπου γράφεται ο κώδικα με τις κατάλληλες βιβλιοθήκες. 63

64 Έπειτα μπορεί ο χρήστης να γράψει το project σε PHP. Για να τρέξει ο server που επιλέχθηκε, χρησιμοποιήθηκε το πρόγραμμα WAMP. Τα βασικά αρχεία που χρησιμοποιήθηκαν φαίνονται στην ακόλουθη εικόνα. Οι λειτουργίες του κάθε κομματιού κώδικα θα εξηγηθούν παρακάτω που παρουσιάζεται ο κώδικας του server της επιλεγμένης εφαρμογής. Οι λειτουργίες αν και πιο πολύπλοκες στην πραγματικότητα είναι σχεδόν ίδιες. Παρακάτω φαίνονται τα αρχεία που χρησιμοποιούνται για τη σύνδεση του server της εφαρμογής με την υπηρεσία GCM, και την πραγματοποίηση των επιθυμητών λειτουργιών μέσω αυτής. Η βάση λοιπόν για τη δημιουργία της σύνδεσης της προτεινόμενης εφαρμογής με την υπηρεσία GCM δόθηκε από το παραπάνω tutorial. Στη συνέχεια όμως παρουσιάζεται αναλυτικά ο κώδικας που περιέχεται σε κάθε αρχείο μαζί με περιγραφή της λειτουργίας του. Το πρώτο αρχείο, το gcm_config.php περιέχει την αρχικοποίηση χρήσιμων μεταβλητών για τη σύνδεση με τη βάση δεδομένων και την υπηρεσία GCM. 64

65 gcm_config.php <?php /** * Database config variables */ define("db_host", " "); define("db_user", "rsgame"); define("db_password", "rsgame"); define("db_database", "rsgame"); /* * Google API Key */ define("google_api_key", "AIzaSyAw5mkT2KwP-7BXtYiIWJQiHYkg2HvtIdk"); // Place your Google API Key?> Το επόμενο αρχείο, το gcm_db_connect.php, χρησιμοποιεί τις μεταβλητές του παραπάνω αρχείου για να πραγματοποιήσει τη σύνδεση με τη βάση δεδομένων. gcm_db_connect.php <?php class DB_Connect { // constructor function construct() { // destructor function destruct() { // $this->close(); // Connecting to database public function connect() { require_once 'gcm_config.php'; // connecting to mysql $con = mysql_connect(db_host, DB_USER, DB_PASSWORD); // selecting database mysql_select_db(db_database); // return database handler 65

66 return $con; // Closing database connection public function close() { mysql_close();?> Το αρχείο gcm_register.php πραγματοποιεί εγγραφή της συσκευής του χρήστη στην υπηρεσία GCM και λαμβάνει το gcm key μετά την επιτυχή πραγματοποίηση της εγγραφής. Το κλειδί αυτό είναι μοναδικό για κάθε συσκευή και χρησιμοποιείται για την αναγνώριση του προορισμού των μηνυμάτων της υπηρεσίας. gcm_register.php <?php // response json $json = array(); /** * Registering a user device * Store reg id in users table */ if (isset($_post["name"]) && isset($_post[" "]) && isset($_post["regid"])) { $name = $_POST["name"]; $ = $_POST[" "]; $gcm_regid = $_POST["regId"]; // GCM Registration ID // Store user details in db include_once './gcm_db_functions.php'; include_once './gcm_gcm.php'; $db = new DB_Functions(); $gcm = new GCM(); $res = $db->storeuser($name, $ , $gcm_regid); $registatoin_ids = array($gcm_regid); $message = array("product" => "shirt"); $result = $gcm->send_notification($registatoin_ids, $message); echo $result; else { // user details missing 66

67 ?> Το αρχείο gcm_gcm.php πραγματοποιεί την αποστολή και λήψη μηνυμάτων από και προς τις φορητές συσκευές. Όπως παρατηρήθηκε και παραπάνω χρησιμοποιείται και στην εγγραφή του κινητού στην υπηρεσία GCM. gcm_gcm.php <?php class GCM { //put your code here // constructor function construct() { /** * Sending Push Notification */ public function send_notification($registatoin_ids, $message) { // include config include_once './gcm_config.php'; // Set POST variables $url = ' $fields = array( 'registration_ids' => $registatoin_ids, 'data' => $message, ); $headers = array( 'Authorization: key='. GOOGLE_API_KEY, 'Content-Type: application/json' ); // Open connection $ch = curl_init(); // Set the url, number of POST vars, POST data curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 67

68 // Disabling SSL Certificate support temporarly curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); // Execute post $result = curl_exec($ch); if ($result === FALSE) { die('curl failed: '. curl_error($ch)); // Close connection curl_close($ch); echo $result;?> Το αρχείο gcm_db_functions.php πραγματοποιεί τις λειτουργίες που σχετίζονται με τη βάση δεδομένων. Αυτές περιλαμβάνουν εγγραφή και διάβασμα δεδομένων. Πιο συγκεκριμένα χρησιμοποιείται για την αποθήκευση των χρηστών της εφαρμογής μαζί με τα απαραίτητα στοιχεία τους στη βάση δεδομένων. gcm_db_functions.php <?php class DB_Functions { private $db; //put your code here // constructor function construct() { include_once './gcm_db_connect.php'; // connecting to database $this->db = new DB_Connect(); $this->db->connect(); // destructor function destruct() { /** 68

69 * Storing new user * returns user details */ public function storeuser($name, $ , $gcm_regid) { // insert user into database $result = mysql_query("insert INTO gcm_users(name, , gcm_regid, created_at) VALUES('$name', '$ ', '$gcm_regid', NOW())"); // check for successful store if ($result) { // get user details $id = mysql_insert_id(); // last inserted id $result = mysql_query("select * FROM gcm_users WHERE id = $id") or die(mysql_error()); // return user details if (mysql_num_rows($result) > 0) { return mysql_fetch_array($result); else { return false; else { return false;?> /** * Getting all users */ public function getallusers() { $result = mysql_query("select * FROM gcm_users"); return $result; Για την αποθήκευση των χρηστών μαζί με τις κατάλληλες πληροφορίες δημιουργήθηκε ένας νέος πίνακας στη βάση δεδομένων του παιχνιδιού. 69

70 Τέλος το αρχείο gcm_send_message.php συνεργάζεται με το αρχείο gcm_gcm.php για την αποστολή μηνυμάτων και ειδοποιήσεων στις φορητές συσκευές. gcm_send_message.php <?php if (isset($_get["regid"]) && isset($_get["message"])) { $regid = $_GET["regId"]; $message = $_GET["message"]; include_once './gcm_gcm.php'; $gcm = new GCM(); $registatoin_ids = array($regid); $message = array("price" => $message); $result = $gcm->send_notification($registatoin_ids, $message);?> echo $result; Έτσι επιτεύχθηκε τελικά το παιχνίδι να συνδέεται με την υπηρεσία GCM και να εγγράφει τους χρήστες στην υπηρεσία και στη συνέχεια στη βάση δεδομένων. Επίσης προστέθηκαν τα κατάλληλα κομμάτια κώδικα στην εφαρμογή, ώστε να μπορεί όχι μόνο να δεχτεί μηνύματα από την υπηρεσία GCM αλλά και να τα διαβάσει. 70

71 Στην εικόνα φαίνονται τα κομμάτια κώδικα που προστέθηκαν στο project με σκοπό τη χρήση της υπηρεσίας GCM. Η λειτουργία του κάθε κομματιού περιγράφεται στον τίτλο του. Στη συνέχεια παρουσιάζεται αναλυτικά το κάθε κομμάτι κώδικα συνοδευόμενο από μια μικρή περιγραφή της λειτουργικότητάς του. To AlertDialogManager.java είναι υπεύθυνο για την ειδοποίηση του χρήστη με παράθυρο διαλόγου για τη λήψη κάποιου μηνύματος από την υπηρεσία. AlertDialogManager.java package sdem.rsgame.gcm; import sdem.rsgame.r; import android.app.alertdialog; import android.content.context; import android.content.dialoginterface; public class AlertDialogManager { /** * Function to display simple Alert Dialog context - application context title - alert dialog title message - alert message status - success/failure (used to set icon) * - pass null if you don't want icon * */ public void showalertdialog(context context, String title, String message, Boolean status) { AlertDialog alertdialog = new AlertDialog.Builder(context).create(); 71

72 // Setting Dialog Title alertdialog.settitle(title); // Setting Dialog Message alertdialog.setmessage(message); if(status!= null) // Setting alert dialog icon alertdialog.seticon((status)? R.drawable.yes : R.drawable.no); // Setting OK Button alertdialog.setbutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int which) { ); // Showing Alert Message alertdialog.show(); To CommonUtilities.java περιέχει τις μεταβλητές που είναι απαραίτητες για την σύνδεση με το server αλλά και την υπηρεσία GCM. Επίσης περιέχει το toast για την εμφάνιση μικρών μηνυμάτων ειδοποιήσεων στο χρήστη. CommonUtilities.java package sdem.rsgame.gcm; import android.content.context; import android.content.intent; public final class CommonUtilities { // give your server registration url here static final String SERVER_URL = " // Google project id static final String SENDER_ID = " "; /** * Tag used on log messages. */ static final String TAG = "AndroidHive GCM"; 72

73 static final String DISPLAY_MESSAGE_ACTION = "com.androidhive.pushnotifications.display_message"; static final String EXTRA_MESSAGE = "message"; /** * Notifies UI to display a message. * <p> * This method is defined in the common helper because it's used both by * the UI and the background service. * context application's context. message message to be displayed. */ static void displaymessage(context context, String message) { Intent intent = new Intent(DISPLAY_MESSAGE_ACTION); intent.putextra(extra_message, message); context.sendbroadcast(intent); Το ConnectionDetector.java ανιχνεύει για το αν υπάρχουν διαθέσιμες συνδέσεις στο διαδίκτυο. ConnectionDetector.java package sdem.rsgame.gcm; import android.content.context; import android.net.connectivitymanager; import android.net.networkinfo; public class ConnectionDetector { private Context _context; public ConnectionDetector(Context context){ this._context = context; /** * Checking for all possible internet providers * **/ public boolean isconnectingtointernet(){ ConnectivityManager connectivity = (ConnectivityManager) _context.getsystemservice(context.connectivity_service); 73

74 if (connectivity!= null) { NetworkInfo[] info = connectivity.getallnetworkinfo(); if (info!= null) for (int i = 0; i < info.length; i++) if (info[i].getstate() == NetworkInfo.State.CONNECTED) { return true; return false; To GCMIntentService.java είναι το κύριο κομμάτι κώδικα που σχετίζεται με την υπηρεσία GCM. Χρησιμοποιώντας τα άλλα κομμάτια κώδικα πραγματοποιεί όλες τις λειτουργίες που σχετίζονται με την υπηρεσία. Εγγραφή, απεγγραφή αλλά και λήψη μηνυμάτων. Προφανώς έχει ληφθεί μέριμνα για περιπτώσεις λαθών. GCMIntentService.java package sdem.rsgame.gcm; import sdem.rsgame.r; import sdem.rsgame.mainscreen; import android.app.notification; import android.app.notificationmanager; import android.app.pendingintent; import android.content.context; import android.content.intent; import android.util.log; import com.google.android.gcm.gcmbaseintentservice; import static sdem.rsgame.gcm.commonutilities.sender_id; import static sdem.rsgame.gcm.commonutilities.displaymessage; public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; public GCMIntentService() { super(sender_id); 74

75 /** * Method called on device registered protected void onregistered(context context, String registrationid) { Log.i(TAG, "Device registered: regid = " + registrationid); displaymessage(context, "Your device registred with GCM"); //Log.d("NAME", MainActivity.name); //ServerUtilities.register(context, MainActivity.name, MainActivity. , registrationid); /** * Method called on device un registred * protected void onunregistered(context context, String registrationid) { Log.i(TAG, "Device unregistered"); displaymessage(context, getstring(r.string.gcm_unregistered)); ServerUtilities.unregister(context, registrationid); /** * Method called on Receiving a new message * protected void onmessage(context context, Intent intent) { Log.i(TAG, "Received message"); String message = intent.getextras().getstring("price"); displaymessage(context, message); // notifies user generatenotification(context, message); /** * Method called on receiving a deleted message * protected void ondeletedmessages(context context, int total) { Log.i(TAG, "Received deleted messages notification"); String message = getstring(r.string.gcm_deleted, total); displaymessage(context, message); // notifies user generatenotification(context, message); /** 75

76 * Method called on Error * public void onerror(context context, String errorid) { Log.i(TAG, "Received error: " + errorid); displaymessage(context, getstring(r.string.gcm_error, protected boolean onrecoverableerror(context context, String errorid) { // log message Log.i(TAG, "Received recoverable error: " + errorid); displaymessage(context, getstring(r.string.gcm_recoverable_error, errorid)); return super.onrecoverableerror(context, errorid); /** * Issues a notification to inform the user that server has sent a message. */ private static void generatenotification(context context, String message) { int icon = R.drawable.icon2; long when = System.currentTimeMillis(); NotificationManager notificationmanager = (NotificationManager) context.getsystemservice(context.notification_service); Notification notification = new Notification(icon, message, when); String title = context.getstring(r.string.app_name); Intent notificationintent = new Intent(context, mainscreen.class); // set intent so it does not start a new activity notificationintent.setflags(intent.flag_activity_clear_top Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationintent, 0); notification.setlatesteventinfo(context, title, message, intent); notification.flags = Notification.FLAG_AUTO_CANCEL; // Play default notification sound notification.defaults = Notification.DEFAULT_SOUND; 76

77 // Vibrate if vibrate is enabled notification.defaults = Notification.DEFAULT_VIBRATE; notificationmanager.notify(0, notification); Τέλος στο ServerUtilities.java περιλαμβάνονται οι μέθοδοι που έχουν να κάνουν με την επικοινωνία με το server, όπως η register και η unregister. ServerUtilities.java package sdem.rsgame.gcm; import static sdem.rsgame.gcm.commonutilities.server_url; import static sdem.rsgame.gcm.commonutilities.tag; import static sdem.rsgame.gcm.commonutilities.displaymessage; import java.io.ioexception; import java.io.outputstream; import java.net.httpurlconnection; import java.net.malformedurlexception; import java.net.url; import java.util.hashmap; import java.util.iterator; import java.util.map; import java.util.map.entry; import java.util.random; import sdem.rsgame.r; import android.content.context; import android.util.log; import com.google.android.gcm.gcmregistrar; public final class ServerUtilities { private static final int MAX_ATTEMPTS = 5; private static final int BACKOFF_MILLI_SECONDS = 2000; private static final Random random = new Random(); /** 77

78 * Register this account/device pair within the server. * */ static void register(final Context context, String name, String , final String regid) { Log.i(TAG, "registering device (regid = " + regid + ")"); String serverurl = SERVER_URL; Map<String, String> params = new HashMap<String, String>(); params.put("regid", regid); params.put("name", name); params.put(" ", ); long backoff = BACKOFF_MILLI_SECONDS + random.nextint(1000); // Once GCM returns a registration id, we need to register on our server // As the server might be down, we will retry it a couple // times. for (int i = 1; i <= MAX_ATTEMPTS; i++) { Log.d(TAG, "Attempt #" + i + " to register"); try { displaymessage(context, context.getstring( R.string.server_registering, i, MAX_ATTEMPTS)); post(serverurl, params); GCMRegistrar.setRegisteredOnServer(context, true); String message = context.getstring(r.string.server_registered); CommonUtilities.displayMessage(context, message); return; catch (IOException e) { // Here we are simplifying and retrying on any error; in a real // application, it should retry only on unrecoverable errors // (like HTTP error code 503). Log.e(TAG, "Failed to register on attempt " + i + ":" + e); if (i == MAX_ATTEMPTS) { break; try { Log.d(TAG, "Sleeping for " + backoff + " ms before retry"); Thread.sleep(backoff); catch (InterruptedException e1) { // Activity finished before we complete - exit. Log.d(TAG, "Thread interrupted: abort remaining retries!"); Thread.currentThread().interrupt(); return; 78

79 // increase backoff exponentially backoff *= 2; String message = context.getstring(r.string.server_register_error, MAX_ATTEMPTS); CommonUtilities.displayMessage(context, message); /** * Unregister this account/device pair within the server. */ static void unregister(final Context context, final String regid) { Log.i(TAG, "unregistering device (regid = " + regid + ")"); String serverurl = SERVER_URL + "/unregister"; Map<String, String> params = new HashMap<String, String>(); params.put("regid", regid); try { post(serverurl, params); GCMRegistrar.setRegisteredOnServer(context, false); String message = context.getstring(r.string.server_unregistered); CommonUtilities.displayMessage(context, message); catch (IOException e) { // At this point the device is unregistered from GCM, but still // registered in the server. // We could try to unregister again, but it is not necessary: // if the server tries to send a message to the device, it will get // a "NotRegistered" error message and should unregister the device. String message = context.getstring(r.string.server_unregister_error, e.getmessage()); CommonUtilities.displayMessage(context, message); /** * Issue a POST request to the server. * endpoint POST address. params request parameters. * IOException propagated from POST. */ 79

80 private static void post(string endpoint, Map<String, String> params) throws IOException { URL url; try { url = new URL(endpoint); catch (MalformedURLException e) { throw new IllegalArgumentException("invalid url: " + endpoint); StringBuilder bodybuilder = new StringBuilder(); Iterator<Entry<String, String>> iterator = params.entryset().iterator(); // constructs the POST body using the parameters while (iterator.hasnext()) { Entry<String, String> param = iterator.next(); bodybuilder.append(param.getkey()).append('=').append(param.getvalue()); if (iterator.hasnext()) { bodybuilder.append('&'); String body = bodybuilder.tostring(); Log.v(TAG, "Posting '" + body + "' to " + url); byte[] bytes = body.getbytes(); HttpURLConnection conn = null; try { Log.e("URL", "> " + url); conn = (HttpURLConnection) url.openconnection(); conn.setdooutput(true); conn.setusecaches(false); conn.setfixedlengthstreamingmode(bytes.length); conn.setrequestmethod("post"); conn.setrequestproperty("content-type", "application/x-www-form-urlencoded;charset=utf- 8"); // post the request OutputStream out = conn.getoutputstream(); out.write(bytes); out.close(); // handle the response int status = conn.getresponsecode(); if (status!= 200) { throw new IOException("Post failed with error code " + status); finally { if (conn!= null) { conn.disconnect(); 80

81 Τελικά με τις παραπάνω αλλαγές και προσθήκες επιτεύχθηκαν τα εξής: Η εφαρμογή, όταν ο χρήστης πατήσει το πλήκτρο για την εκκίνηση του παιχνιδιού, εγγράφει τον παίκτη στη βάση δεδομένων μαζί με τα απαραίτητα στοιχεία για να μπορέσει αργότερα να επικοινωνήσει με τη συσκευή του. Οι πληροφορίες που στέλνει ο server σε κάθε συσκευή αποστέλλονται μέσω της υπηρεσίας GCM. Με αυτό τον τρόπο η λειτουργία της εφαρμογής μετατρέπεται από σύγχρονη σε ασύγχρονη κάνοντας τη λειτουργία της αρτιότερη. Ο σύγχρονος βρόχος της εφαρμογής εξακολουθεί να υφίσταται. Ο λόγος γι αυτό είναι για την αποστολή δεδομένων από το κινητό προς το server, εργασία η οποία δεν μπορεί να γίνει μέσω της υπηρεσίας GCM. Σίγουρα δεν είναι ο βέλτιστος τρόπος αλλά η εφαρμογή έχει σχεδιαστεί να λειτουργεί έτσι και για να αλλάξει έπειτα δε θα γινόταν αναφορά για αλλαγή της εφαρμογής αλλά για υλοποίησή της εκ νέου. 5.3 ΔΟΚΙΜΕΣ Μετά την ολοκλήρωση των εργασιών που περιγράφονται παραπάνω, η εφαρμογή έφτασε πλέον σε ένα ώριμο στάδιο και ήταν έτοιμη για κάποιες δοκιμές. Φυσικά δεν ήταν λίγα τα μικρολαθάκια που προέκυψαν από τη μεγάλη αλλαγή, που είχε σχέση με την αλλαγή της επικοινωνίας της εφαρμογής με το server και τη χρήση της υπηρεσίας GCM. Για την παρακολούθηση λοιπόν της δραστηριότητας της εφαρμογής και του server προστέθηκε ένα πολύ μικρό αλλά χρήσιμο κομμάτι κώδικα στο server που επέτρεπε να παρακολουθείται τι στέλνει και τι δέχεται η κάθε συσκευή που παίζει το παιχνίδι. Παρακάτω φαίνεται ο κώδικας αυτός: $file = 'log.txt'; // Open the file to get existing content $current = file_get_contents($file); // Append a new person to the file $current.= "\nget : ". print_r($_get,true); $current.= "\npost : ". print_r($_post,true); // Write the contents back to the file file_put_contents($file, $current); 81

82 Με τον απλό αυτό κώδικα γράφονται οι αλληλεπιδράσεις του server με τις συσκευές σε ένα αρχείο txt στο οποίο υπάρχει πρόσβαση μέσα από το browser. Το αρχείο έχει την εξής μορφή: Στο αρχείο log.txt καταγράφονται όλες οι πληροφορίες που στέλνουν και δέχονται οι συσκευές, όπως ο γύρος, η ταυτότητα του παίκτη αλλά και η φάση στην οποία βρίσκεται το παιχνίδι. Άλλο ένα μικρό εργαλείο στον κώδικα, πάρθηκε από το tutorial στο οποίο βασίστηκε όλος ο κώδικας για την υπηρεσία gcm. Είναι το gcm_index.php το οποίο δείχνει ποιοι χρήστες είναι συνδεδεμένοι στο project gcm που χρησιμοποιεί η εφαρμογή της εργασίας. Αυτό γίνεται με πρόσβαση στο script μέσω browser. Από εκεί μπορούν να σταλούν μηνύματα στην εφαρμογή για να επιβεβαιωθεί η σύνδεσή της με την 82

83 υπηρεσία gcm. Ο κώδικας έχει παρατεθεί παραπάνω. Στην επόμενη εικόνα φαίνεται πώς εμφανίζονται η συνδεδεμένοι παίκτες όταν τρέχουμε το script από περιηγητή: Τελικά το παιχνίδι παίχτηκε και με τη χρήση των παραπάνω εργαλείων εντοπίστηκαν μερικά ακόμη μικροπροβλήματα, άλλα ασήμαντα κι άλλα πιο σημαντικά. 1. Δεν λειτουργούσε η ψηφοφορία αποκάλυψης και η εφαρμογή έμενε στάσιμη 2. Μερικές φορές κολλούσε η εφαρμογή στο log in και register. 3. Τα google maps δεν λειτουργούσαν όπως έπρεπε 4. Η εφαρμογή δεν ανακοινώνει το ρόλο του κάθε παίχτη και συνεπώς κανείς δεν ήξερε το ρόλο του. 5. Η εφαρμογή κολλούσε στο τέλος του παιχνιδιού. Τα παραπάνω μικροπροβλήματα δεν είναι ασήμαντα, αλλά δεν εμπόδισαν την ολοκλήρωση του πρώτου παιχνιδιού με τη βελτιωμένη έκδοση της αόρατης πόλης, όταν απεφεύχθη η ψηφοφορία για αποκάλυψη κατασκόπων. Η εφαρμογή έτρεξε από την πρώτη μέχρι την τελευταία οθόνη, γεγονός ιδιαίτερα ενθαρυντικό. Μετά από αρκετή δουλειά με το server και την εφαρμογή, διορθώθηκαν και άλλα μικροπροβλήματα που, αν και όχι ιδιαίτερα σημαντικά, ήταν ενοχλητικά προς το χρήστη. Τελικά μετά το τελικό debugging επετεύχθησαν οι παρακάτω στόχοι: 1. Το log in τελειοποιήθηκε. Μπορούσαν να εγγραφούν χρήστες με οποιοδήποτε λογαριασμό google χωρίς αυτός να πρέπει να έχει εισαχθεί χειροκίνητα στη βάση δεδομένων. Επίσης όταν κάποιος παίκτης έφευγε ή τελείωνε το παιχνίδι η βάση άδειαζε, και όλοι οι παίκτες απεγγράφονταν από την υπηρεσία gcm με αποτέλεσμα να μην γεμίζει χωρίς λόγο η βάση δεδομένων. 2. Η εφαρμογή ανακοινώνει μέσα από απλές και καλαίσθητες οθόνες το ρόλο του κάθε παίκτη στο παιχνίδι γεγονός που συμβάλει τόσο στη λειτουργικότητα όσο και στην αισθητική του παιχνιδιού. Πριν έπρεπε να είναι γνωστή η ομάδα στην 83

84 οποία συμμετείχε ο κάθε παίκτης διαβάζοντας χειροκίνητα την πληροφορία στη βάση δεδομένων. 3. Η εφαρμογή καλεί τους χάρτες google (google maps) δείχνοντας πλέον το χάρτη και το σημείο ενδιαφέροντος, ενώ χάρη στη λειτουργικότητα που ενσωματώνει η εφαρμογή της google υπάρχει άμεση πρόσβαση και στην πλοήγηση προς το σημείο που θέλει ο παίκτης να πάει. 4. Η εφαρμογή πλέον δεν κολλάει όταν το παιχνίδι τελειώνει. Κάνει reset στη βάση δεδομένων και γυρίζει στην αρχή, όντας έτσι έτοιμη να εκκινήσει αμέσως νέο γύρο παιχνιδιού. Τα προβλήματα αυτά λύθηκαν με αρκετό κόπο, δεδομένου ότι πολλές φορές λύνοντας το ένα εμφανίζονταν περισσότερα. Τελικά όμως η εφαρμογή έφτασε σε ένα σημείο που τα bugs είχαν δευτερεύον λόγο και δεν ήταν παρά μικρές λεπτομέριες. Όμως για να επιτευχθή αυτό λύθηκαν κάποια επιπλέον αρκετά σημαντικά προβλήματα που δεν είχαν εμφανιστεί πριν. Χαρακτηριστικά περιγράφονται τα πιο σημαντικά: 1. Λύνοντας το πρόβλημα με το register, το unregister και το σβήσιμο από τη βάση των παικτών όταν κλείνει το παιχνίδι, δημιουργήθηκε ένα νέο πολύ σημαντικό για την εξέλιξη του παιχνιδιού πρόβλημα. Στην οθόνη της πρώτης ψηφοφορίας για αρχηγό αν οι παίκτες δεν έκαναν log in ταυτόχρονα, πράγμα εξαιρετικά πιθανό, ο κάθε παίκτης δεν έβλεπε τους παίκτες που είχαν κάνει log in πριν από αυτόν. Το πρόβλημα αυτό λύθηκε καλώντας το σύνολο των παικτών κάθε 5 δευτερόλεπτα, με αποτέλεσμα αν κάποιος παίκτης μπει πριν από κάποιον άλλον, κατά την είσοδο του δεύτερου, αυτός θα γίνει ορατός στον πρώτο. 2. Στο log in αφαιρέθηκαν ορισμένα toasts που θεωρήθηκαν ενοχλητικά. Έμειναν μόνο τα toasts που επιβεβαιώνουν τη λειτουργικότητα του gcm για πρακτικούς λόγους. 3. Ένα άλλο αρκετά σημαντικό, αν και σπάνιο, πρόβλημα που παρουσιάστηκε, ήταν ο αποσυγχρονισμός της εφαρμογής. Πιο αναλυτικά, ενώ όλες οι συσκευές ήταν στην ίδια φάση του παιχνιδιού και ενώ το παιχνίδι εξελισσόταν κανονικά, στη φάση ανάθεσης αποστολής κάποια συσκευή δε θα λάμβανε αποστολή και θα έμενε πίσω. Όπως διαπιστώθηκε από προσπάθειες διόρθωσης του προβλήματος, τα αίτια ήταν κάπως βαθύτερα καθώς όταν επιχειρήθηκε η επανεκκίνηση της εφαρμογής, και ενώ κανονικά θα έπρεπε αυτή να επανέλθει στην κανονική κατάσταση του παιχνιδιού, αυτό δε συνέβαινε με αποτέλεσμα το παιχνίδι να πρέπει να διακοπεί και να ξεκινήσει από την αρχή. Αυτό μόνο ασήμαντο δε θα μπορούσε να χαρακτηριστεί, αφού αν για οποιοδήποτε λόγο η εφαρμογή έκλεινε, πολύ πιθανό ενδεχόμενο προκαλούμενο είτε από λάθος χειρισμό, είτε και ηθελημένο, το παιχνίδι δε μπορούσε να συνεχιστεί. Τελικά το πρόβλημα λύθηκε ως εξής: ο server στο τέλος κάθε γύρου περιμένει ώστε 84

85 καμμιά συσκευή να μην μείνει πίσω. Επίσης γίνεται πλέον σωστή διατήρηση της κατάστασης του παιχνιδιού στη βάση δεδομένων, ώστε αν η εφαρμογή κλείσει για οποιοδήποτε λόγο, αυτή να μπορεί να επανέλθει και να συγχρονιστεί στην ισχύουσα κατάσταση του παιχνιδιού, ώστε η εξέλιξη αυτού να συνεχιστεί απρόσκοπτα. Μελετώντας προσεκτικά τα παραπάνω προβλήματα, το συμπέρασμα για τα αίτια που τα προκαλούσαν δεν άργησε να έρθει. Το πρόβλημα φαινόταν να είναι ο σύγχρονος χαρακτήρας που είχε προηγουμένως η λειτουργία του παιχνιδιού. Έτσι αποφασίστηκε για την τελειοποίηση της εφαρμογής να επιχειρηθεί πλήρης αλλαγή της σύγχρονης λειτουργίας του σε ασύγχρονη, ώστε να επέλθει εναρμόνιση με την ασύγχρονη λειτουργία της υπηρεσίας GCM και να επιλυθούν όλα τα προβλήματα συγχρονισμού που περιγράφησαν παραπάνω. Το πρώτο κομμάτι που άλλαξε δε θα μπορούσε να είναι άλλο απ αυτό του register. Η λύση του polling δε φαινόταν ικανοποιητική, και δεν ήταν και αρκετά λειτουργική. Επιπλέον το polling, θα είχε επιπτώσεις στους χρήστες που θα διάλεγαν να χρησιμοποιήσουν την εφαρμογή με σύνδεση στο διαδίκτυο μέσω κάποιου προγράμματος δεδομένων από των πάροχο κινητής τηλεφωνίας. Τα συνεχή ερωτήματα αν και μικρού μεγέθους, λόγω της μεγάλης συχνότητάς τους, θα κατανάλωναν πολλά δεδομένα από το πρόγραμμα του χρήστη. Έτσι για λειτουργικούς αλλά και πρακτικούς λόγους αποφασίστηκε η αλλαγή πρώτα του register στην εφαρμογή δοκιμαστικά, ώστε έπειτα να ακολουθήσουν και τα υπόλοιπα κομμάτια επικοινωνίας server και συσκευών. Πώς λοιπόν γίνεται ασύγχρονα, δηλαδή χωρίς polling αλλά οδηγούμενη από γεγονότα, η εγγραφή ενός παίκτη; Στη συνέχεια περιγράφονται αναλυτικά τα γεγονότα που συμβαίνουν και ο τρόπος με τον οποίο ενεργοποιούνται. Σε περίπτωση που ένας νέος παίκτης προσπαθήσει να εγγραφεί, ελέγχεται αν αυτός ο παίκτης είναι ήδη εγγεγραμμένος στη βάση δεδομένων. Αν δεν είναι, εγγράφεται και ο server στέλνει ένα broadcast. Το broadcast αυτό μπορεί να παραληφθεί από όποιον είναι ικανός να το ακούσει. Δεν είναι λοιπόν στοχευμένο. Πρέπει λοιπόν η εφαρμογή μας να είναι αυτή που θα μπορέσει να το ακούσει και να διαβάσει τα δεδομένα που περιέχονται σε αυτό. Αυτό συμβαίνει ως εξής: το broadcast παραλαμβάνεται από τη GCMIntentService στη συσκευή. Εκεί προωθείται στην onmessage η οποία σκοπό έχει να διαβάζει τα μηνύματα που γίνονται push από την υπηρεσία GCM. Εκεί τα δεδομένα ελέγχονται για 85

86 κάποιο μήνυμα που πιθανό θα περιέχουν. Όταν εντοπιστεί αυτό το μήνυμα, που ουσιασικά περιέχει το σύνολο των παικτών μαζί με το νέο παίκτη μου μόλις πραγματοποίησε την εγγραφή του, το μήνυμα προωθείτα στον custom receiver που έγινε ειδικά γι αυτό το σκοπό στην κλάση LeaderSelection. O receiver είναι ο mhandlemessagereceiver. Έπειτα καλούνται οι getplayers που διαβάζουν τους παίκτες, και η setleaderselection, η οποία είναι μια νέα function που περιέχει τον κώδικα για να εμφανίζει τους παίκτες και τα πλήκτρα στην οθόνη ψηφοφορίας αρχηγού. Στη συνέχεια παρουσιάζονται τα δύο νέα κομμάτια κώδικα που χρησιμοποιήθηκαν σε αυτή τη φάση. Πρώτα φαίνεται ο νέος receiver που χρησιμοποιείται στην LeaderSelection, o mhandlemessagereceiver. mhandlemessagereceiver /** * Receiving push messages * */ private final BroadcastReceiver mhandlemessagereceiver = new BroadcastReceiver() public void onreceive(context context, Intent intent) { String newmessage = intent.getextras().getstring(extra_message); getplayers(); setleaderselection(); ; Στη συνέχεια φαίνεται η function setleaderselection, η οποία είναι υπεύθυνη για την εμφάνιση των στοιχείων στην οθόνη επιλογής αρχηγού. setleaderselection private void setleaderselection() { ctx = this; setcontentview(r.layout.leaderselection); LselectTitle = (TextView) findviewbyid(r.id.lselecttitle); LselectTitle.setText(ctx.getString(R.string.leader_selection_ti tle)); // radio radiogroup = (RadioGroup) findviewbyid(r.id.leaderselectionradiogroup); selectedplayerimage = (ImageSwitcher) findviewbyid(r.id.leaderselectionselectedplayerimage); selectedplayerimage.setfactory(this); 86

87 selectedplayerimage.setinanimation(animationutils.loadanimation (this, android.r.anim.fade_in)); selectedplayerimage.setoutanimation(animationutils.loadanimatio n(this, android.r.anim.fade_out)); for (Player player : otherplayers) { RadioButton radiobutton = new RadioButton(ctx); radiobutton.settext(player.getplayername()); radiobutton.setid(player.getplayerid()); radiogroup.addview(radiobutton); radiogroup.setoncheckedchangelistener(new OnCheckedChangeListener() public void oncheckedchanged(radiogroup group, int checkedid) { logger.info(tag + " selected player is now " + Integer.toString(checkedId)); selected_player = checkedid; selectedplayer = otherplayers.getplayerbyplayerid(checkedid); selectedplayerimage.setimagedrawable(selectedplayer.getplayerim age()); if (sendvotebutton.getvisibility()!= View.VISIBLE) { sendvotebutton.setvisibility(view.visible); ); sendvotebutton = (Button) findviewbyid(r.id.vote4leader_button); infobutton = (Button) findviewbyid(r.id.info_button); // "LeaderSelection:onCreate, selectedplayerid" + selectedplayerid); if(selected_player!= -1) { selectedplayer = otherplayers.getplayerbyplayerid(selected_player); selectedplayerimage.setimagedrawable(selectedplayer.getplayerim age()); if (sendvotebutton.getvisibility()!= View.VISIBLE) { sendvotebutton.setvisibility(view.visible); setbutton(); setinfobutton(); 87

88 5.4 Επιπλέον Διορθώσεις Κατά τη διάρκεια των τελικών δοκιμών προέκυψαν θέματα που προκαλούσαν σημαντικά προβλήματα. Τα προβλήματα αυτά περιγράφονται διεξοδικά στη συνέχεια ακολουθούμενα από τη λύση η οποία δόθηκε. Αδυναμία υπολογισμού score με σωστό τρόπο Οι αρχικοί έλεγχοι της εφαρμογής επικεντρώθηκαν στη διόρθωση λαθών που είχαν να κάνουν με τη λειτουργία της εφαρμογής, και όχι τόσο με το παιχνίδι και τους κανόνες του. Στη συνέχεια όμως παρατηρήθηκαν λάθη στα οποία αρχικά δεν είχε δοθεί σημασία. Ένα από αυτά είναι ο τρόπος με τον οποίο προσμετρούνται οι πόντοι. Σύμφωνα με τους κανόνες του παιχνιδιού υπάρχουν κάποιες αποστολές αυξημένης σημασίας των οποίων η επιτυχής πραγματοποίηση είναι απαραίτητη συνθήκη για να κερδίσουν μια βάση (να πάρουν δηλαδή ένα πόντο) οι επαναστάτες. Σε κάθε άλλη περίπτωση, δηλαδή σε περίπτωση που μία από τις σημαντικές αποστολές απαντηθεί λάθος ή δεν απαντηθεί, κερδίζουν μία βάση οι κατάσκοποι. Στην πραγματικότητα όμως δε συνέβαινε αυτό. Λόγω μικρών παραλείψεων στον κώδικα η διαδικασία έπαιρνε εντελώς λάθος τροπή. Πιο συγκεκριμένα ο κώδικας ο οποίος ελέγχει το τελικό αποτέλεσμα ενός γύρου είναι ο εξής: function getroundresult($gameid, $roundno) { global $dbconn; //check if all assignments have been completed $query = "SELECT count(*) FROM playerassignments WHERE assignmentresult!='undefined' AND gameid=$gameid AND roundno=$roundno"; $result = mysql_query($query); $row = mysql_fetch_row($result); if ($row[0]<getplayersno($gameid)) die(); //if one critical mission has failed then roundresult is failure, else success $query = 'SELECT count(pa.assignmentid) FROM playerassignments as pa LEFT JOIN assignments a ON pa.assignmentid=a.assignmentid WHERE roundno='.$roundno.' and assignmentresult!="success" and assignmenttype="critical" AND pa.gameid='.$gameid; 88

89 $result = mysql_query($query); $row = mysql_fetch_row($result); //if number of failed critical missions is more than 0, return failure, else return success if ($row[0]>0) $roundresult = 0; //failure else $roundresult = 1; //success updategamescoreforroundresult($gameid, $roundno, $roundresult); return $roundresult; Από αυτό τον κώδικα βλέπουμε ότι πολύ σωστά προσμετρούνται οι σημαντικές αποστολές, και αν έστω μία δεν έχει απαντηθεί σωστά, άρα έχει απαντηθεί λάθος ή δεν έχει απαντηθεί καθόλου, ο γύρος θεωρείται αποτυχημένος. Το λάθος στα αποτελέσματα που παρατηρήθηκε προερχόταν από τη διαλογή ανάμεσα στο ποιες αποστολές είναι οι σημαντικές και ποιες όχι. Παρακάτω φαίνεται ο κώδικας που ευθύνεται για την ανάθεση των διαφόρων ειδών αποστολών. // $query = "SELECT assignmentid FROM assignments WHERE overallmissionid=".$roundnumber." AND lang='".$lang."'"; // $result // if (mysql_num_rows($result)>=$playersno) { // while ($row = mysql_fetch_assoc($result)) { // $assignments[$row['assignmentid']] = $row['assignmentid']; // // // else {//IF THERE ARE NOT ENOUGH ASSIGNMENTS FOR THIS ROUND CHOOSE SOME RANDOM ONES // $query = "SELECT assignmentid FROM assignments WHERE lang='".$lang."' ORDER BY RAND() LIMIT 0,$playersNo" ; // $result // while ($row = mysql_fetch_assoc($result)) { // $assignments[$row['assignmentid']] = $row['assignmentid']; // // // $_assignmenttypes = array_rand($assignments, $playersno); // $i=1; // foreach($_assignmenttypes as $id => $assignmentid) { // $assignmenttypes[$assignmentid]['assignmentdescription'] = $mission_word[$lang].' '.($i); // if ($i<=$informedminorityno) // $assignmenttypes[$assignmentid]['critical'] = '0'; 89

90 // else // $assignmenttypes[$assignmentid]['critical'] = '1'; // $i++; // Από τον παραπάνω κώδικα φαίνεται ότι ο server δεν πληροφορούσε ορθά την εφαρμογή για το αν μια αποστολή ήταν σημαντική ή όχι. Τελικά το λάθος διορθώθηκε αντικαθιστώντας τον παραπάνω κώδικα με τον ακόλουθο: function getmissiontypes($playersno, $informedminorityno, $roundnumber,$lang) { global $dbconn; $mission_word['en'] = 'Assignment'; $mission_word['el'] = 'Αποστολή'; //prwta vlepoume an exoume arketes erwthseis gia auton ton guro $query = "SELECT count(assignmentid) FROM assignments WHERE overallmissionid=".$roundnumber." AND lang='".$lang."'"; $result $row = mysql_fetch_row($result); if ($row[0]>=$playersno) { //an nai tote xwrizoume tis erwthseis se critical kai non critical vash tou ti leei h vash $query = "SELECT assignmentid FROM assignments WHERE overallmissionid=".$roundnumber." AND lang='".$lang."' AND assignmenttype = 'critical'"; $result while ($row = mysql_fetch_assoc($result)) { $critical_assignments[] = $row['assignmentid']; //aples apostoles $query = "SELECT assignmentid FROM assignments WHERE overallmissionid=".$roundnumber." AND lang='".$lang."' and assignmenttype!= 'critical'"; $result while ($row = mysql_fetch_assoc($result)) { $plain_assignments[] = $row['assignmentid']; else{ //an oxi tote prepei na paroume apo pantou kai na kanoume ton idio xwrismo opws kai parapanw //an nai tote xwrizoume tis erwthseis se critical kai non critical vash tou ti leei h vash $query = "SELECT assignmentid FROM assignments WHERE lang='".$lang."' AND assignmenttype = 'critical' LIMIT 0,$playersNo"; $result while ($row = mysql_fetch_assoc($result)) { $critical_assignments[] = $row['assignmentid']; 90

91 //aples apostoles $query = "SELECT assignmentid FROM assignments WHERE lang='".$lang."' and assignmenttype!= 'critical' LIMIT 0,$playersNo"; $result while ($row = mysql_fetch_assoc($result)) { $plain_assignments[] = $row['assignmentid']; $j=1; for($i=0;$i<$playersno;$i++) { if ($j<=$informedminorityno){ shuffle($plain_assignments); $assignmentid = array_shift($plain_assignments); $assignmenttypes[$assignmentid]['assignmentdescription'] = $mission_word[$lang].' '.($j); $assignmenttypes[$assignmentid]['critical'] = '0'; else{ shuffle($critical_assignments); $assignmentid = array_shift($critical_assignments); $assignmenttypes[$assignmentid]['assignmentdescription'] = $mission_word[$lang].' '.($j); $assignmenttypes[$assignmentid]['critical'] = '1'; $j++; Επιπλέον για την πιο ομαλή λειτουργία της εφαρμογής, αλλά και για να προβλεφθεί η πιθανότητα που πολλοί παίκτες θελήσουν να παίξουν το παιχνίδι, δημιουργήθηκαν δύο functions, τα οποία σε περίπτωση που οι ερωτήσεις που αντιστοιχούν σε ένα γύρο δεν είναι αρκετές για να καλύψουν το πλήθος των παικτών, φέρνουν τόσες απλές ή κρίσιμες ερωτήσεις ώστε αυτές να είναι αρκετές. Παρακάτω φαίνονται οι functions. function getnewplainassignment($lang) { $query = "SELECT assignmentid FROM assignments WHERE lang='".$lang."' AND assignmenttype!= 'critical' ORDER BY RAND() LIMIT 1"; $result $row = mysql_fetch_row($result); return $row[0]; 91

92 function getnewcriticalassignment($lang) { $query = "SELECT assignmentid FROM assignments WHERE lang='".$lang."' AND assignmenttype = 'critical' ORDER BY RAND() LIMIT 1"; $result $row = mysql_fetch_row($result); return $row[0]; Αδυναμία της εφαρμογής να προχωρήσει σε συγκεκριμένα σημεία Κατά τη διάρκεια των δοκιμών εντοπίστηκαν κολλήματα της εφαρμογής τα οποία συνέβαιναν με ένα συγκεκριμένο μοτίβο σε συγκεκριμένη φάση του παιχνιδιού. Από ένα σημείο και μετά ήταν αδύνατο να συνεχίσουν να θεωρούνται τυχαία. Αρχικά θεωρήθηκε πιθανό να αποτελούν φαινόμενα αποσυγχρονισμού κάποιας συσκευής με το server. Αφού ερευνήθηκε και αποκλείστηκε το ενδεχόμενο αυτό, τελικά το σφάλμα ήταν κάτι πολύ πιο απλό. Τα κολλήματα συνέβαιναν πάντα σε κάποια φάση του τρίτου γύρου του παιχνιδιού, όπου είτε ο αρχηγός παρουσίαζε αδυναμία να ολοκληρώσει την ανάθεση αποστολών, είτε κάποιος παίκτης παρουσίαζε αδυναμία να λάβει την αποστολή του. Ο λόγος για τα παραπάνω σφάλματα περιγράφεται στη συνέχεια. Οι αποστολές που ανατίθενται σε κάθε παίκτη είναι αποθηκευμένες στη βάση δεδομένων. Σε κάθε καταχώρηση κάποια πεδία έπρεπε να είναι υποχρεωτικά συμπληρωμένα. Στη βάση δεδομένων όμως υπήρχαν αρκετά κενά. Πολλές αποστολές δεν είχαν δηλωμένο το είδος της αποστολής, που στην συγκεκριμένη περίπτωσή βέβαια είναι μόνο ερωτήσεις πολλαπλής επιλογής, που προκαλούσε σφάλμα στο σύστημα. Επίσης κάποιες αποστολές δεν είχαν αντίστοιχη αποστολή στην αγγλική γλώσσα ενώ βρέθηκαν και αποστολές χωρίς καταχωρημένες σωστές απαντήσεις. Με τη διόρθωση των παραπάνω ελλείψεων τα κολλήματα που παρουσιάζονταν κατά τη διάρκεια της λειτουργίας της εφαρμογής ελαχιστοποιήθηκαν. Παρατηρήθηκε όμως ένα άλλο φαινόμενο που αν και δεν είχε να κάνει με τη σταθερότητα της εφαρμογής, δεν θα έπρεπε να συμβαίνει. Όπως περιγράφεται προηγουμένως χρησιμοποιήθηκαν δύο functions που φέρνουν τυχαία ερωτήσεις όταν οι ερωτήσεις που προορίζονται για ένα γύρο δεν είναι αρκετές. Αυτό είχε ως αποτέλεσμα στις δοκιμές με παραπάνω από τρεις παίκτες να εμφανίζεται σε κάποιες περιπτώσεις η ίδια ερώτηση στο ίδιο άτομο σε διαφορετικούς γύρους, που για ευνόητους λόγους δεν είναι 92

93 σωστό. Η λύση σε αυτό το πρόβλημα στην πραγματικότητα ήταν πολύ απλή. Προστέθηκαν 16 νέες ερωτήσεις στη βάση δεδομένων. Με αυτό τον τρόπο σε κάθε γύρο αντιστοιχούν πάνω από πέντε ερωτήσεις με αποτέλεσμα να μην υπάρχει περίπτωση να χρειαστούν επιπλέον. Στην περίπτωση δε που χρειαστούν, μειώνεται η πιθανότητα η ίδια ερώτηση να εμφανιστεί πάνω από μία φορά στον ίδιο παίκτη. Οι ερωτήσεις δε, δεν θα μπορούσαν να είναι τυχαίες. Μετά από αρκετή σκέψη αποφασίστηκε να αφορούν τα μέρη συνάντησης κάθε γύρου, που δεν είναι άλλα από τις πλατείες της Πάτρας, οι οποίες έχουν κι αυτές πίσω τους μεγάλη ιστορία. 5.5 ΕΝΣΩΜΑΤΩΣΗ ΥΠΗΡΕΣΙΑΣ GCM Αφού διορθώθηκαν τα προβλήματα που παρουσιάστηκαν παραπάνω, έμειναν να διορθωθούν κάποια προβλήματα συγχρονισμού της εφαρμογής, τα οποία φαινομενικά δεν είχαν λύση. Τη λύση όμως προσέφερε η υπηρεσία GCM, με την ενσωμάτωση της οποίας στην εφαρμογή, αυτή παύει να λειτουργεί σύγχρονα, και λειτουργεί με event driven ροή, δηλαδή ασύγχρονα. Αυτή εν τέλει ήταν η λύση στα προβλήματα συγχρονισμού. Πιο συγκεκριμένα, με την ενσωμάτωση GCM στην εφαρμογή επετεύχθησαν οι εξής στόχοι: 1. Η ανανέωση των παικτών στους εσωτερικούς πίνακες του παιχνιδιού πλέον γίνεται με GCM. 2. Η ενημέρωση του σημείου στο παιχνίδι που βρίσκεται ο παίκτης, αν χαθεί η σύνδεση γίνεται μέσω GCM 3. Ο κώδικας γενικότερα πλέον λειτουργεί με event driven λογική ώστε να ενσωματώσει τέλεια τη λογική των GCM push events. Στη συνέχεια παρουσιάζονται οι αλλαγές στον κώδικα μαζί με μικρές σχετικές περιγραφές. 1. Οι παίκτες πρέπει να κάνουν login και να κάνουν populate τους πίνακες με GCM και όχι με το loop. Αρχικά στο leaderselection.java τοποθετήθηκε ένας νέος receiver που ακούει για νέα login. /** * Receiving push messages * */ private final BroadcastReceiver mhandlemessagereceiver = new BroadcastReceiver() public void onreceive(context context, Intent intent) { String newmessage = intent.getextras().getstring(extra_message); 93

94 //pare tous paiktes gia na gemiseis ton pinaka getplayers(); ksanazwgrafhse thn eikona pou clepei o xrhsths gia na dei kai tous kainourgious setleaderselection(); ; Αλλαγές έγιναν και στο lib.php στο server. //pairnoume olous tous paiktes apo thn vash $query = "SELECT gcm_regid from gcm_users"; $result = mysql_query($query); $registration_ids = Array(); while ($row=mysql_fetch_assoc($result)) { $registration_ids[] = $row['gcm_regid']; //dhmiourgoume neo gcm antikeimeno gia na mporesoume na steiloume to munhma stous paiktes $gcm = new GCM(); //pairnoume tous paiktes se format pou to kaixnidi katalavainei $message = LibprintPlayers($players); stelnoume to mhnuma se olous me thn lista twn paiktwn $gcm->send_notification($registration_ids, array("price"=>$message)); Έτσι σε κάθε νέο login ο παραπάνω receiver λαμβάνει λίστα xml με τους παίκτες, και γεμίζει τον εσωτερικό πίνακα παικτών του παιχνιδιού σε κάθε συσκευή καθώς το παρακάτω κομμάτι κώδικα στο 57 δίνει σήμα να παρθούν οι νέοι παίκτες. protected void onmessage(context context, Intent intent) { Log.i(TAG, "Received message"); //Grafoume to oti pragmatika phrame ena munhma sthn consola String message = intent.getextras().getstring("price"); //to intent periexei to munhma apo ton server Με τον ίδιο τρόπο έπρεπε να γεμίσουν αντίστοιχοι πίνακες σε διάφορα σημεία του παιχνιδιού, όπως στην ψηφοφορία αποχώρησης ή την ανάθεση αποστολών. Με τον παλιό 94

95 τρόπο ένας παίκτης δεν μπορούσε να δει τους παίκτες που είχαν κάνει login πριν απ αυτόν. Οπότε στο τέλος αφαιρέθηκαν τα σημεία στα οποία απλά γινόταν χρήση μιας μεταβλητής, και τώρα όταν υπάρχει ανάγκη χρήσης ενός πίνακα, χρησιμοποιούνται οι πίνακες με την ακόλουθη λογική πάντα στο RSGameApplication.java: public PlayersList getotherplayers() { //katharizoume ton pinaka me tous allouw paiktes otherplayers.clear(); for (Player p : players) { gia kathe paikth pou den eimai egw, touw vazoume se pinaka if (p.getplayerid()!= meplayer.getplayerid()) { otherplayers.add(p); gunrname otn pinaka me tous allous paiktes return otherplayers; 95

96 ΚΕΦΑΛΑΙΟ 6 ΠΡΟΣΘΗΚΗ ΥΠΟΘΕΣΗΣ ΚΑΙ ΑΛΛΑΓΗ LAYOUT Το υπάρχον παιχνίδι και πώς μπορεί να βελτιωθεί Αφού βελτιώθηκαν κάποιες ατέλειες στον κώδικα του παιχνιδιού, έγινε αλλαγή της λειτουργίας του server, χρησιμοποιώντας την υπηρεσία GCM, που οδήγησε στο τελευταίο στάδιο βελτίωσης της. Κρίθηκε πως μια πολύ σημαντική έλλειψη από την έκδοση της εφαρμογής με την οποία ξεκινάει αυτή η εργασία, ήταν η έλλειψη κάποιας υπόθεσης, που θα συνδέει τις αποστολές μεταξύ τους. Ο λόγος είναι ο εξής: κάθε σωστό και ολοκληρωμένο παιχνίδι χρειάζεται μια ιστορία να το υποστηρίξει. Ακόμη και σε απλά παιχνίδια, που η ιστορία τους δεν φαίνεται με την πρώτη ματιά, αν παρατηρηθούν καλύτερα, υπάρχει περισσότερη πλοκή απ ότι ήταν αναμενόμενο. Ας ληφθεί ως παράδειγμα ένα από τα παλαιότερα και πιο διάσημα επιτραπέζια παιχνίδια όλων των εποχών, το σκάκι. Το σκάκι δε φαίνεται να έχει κάποια ιστορία. Μοιάζει σαν ένα σύνολο πιονιών που κινούνται πάνω στη σκακιέρα. Αλλά αν παρατηρήσουμε πιο προσεκτικά, το σκάκι έχει χαρακτήρες, ένα κόσμο στον οποίο εκτυλίσσεται μία πλοκή. Υπάρχει μια αρχή, μια μέση κι ένα τέλος, όπως σε όλες τις ιστορίες. Ακόμη και τα μικρά πιόνια, που θεωρητικά είναι τα πιο ασήμαντα στο παιχνίδι, έχουν μια ιερή αποστολή. Να προστατέψουν το βασιλιά τους με τη ζωή τους. Αν δε καταφέρουν και διασχίσουν το πεδίο της μάχης με επιτυχία, η ανταμοιβή είναι μεγάλη καθώς γίνονται παντοδύναμοι πολεμιστές που μπορούν να κρίνουν τη μάχη. Στην πραγματικότητα πάνω στα ασπρόμαυρα τετραγωνάκια εκτυλίσσεται μια μεσαιωνική μάχη που δεν της λείπει τίποτα. Μια μάχη με βασίλισσες και βασιλιάδες, με πύργους, ιππείς και πεζικάριους. Ένα άλλο παράδειγμα, πιο κοντινό στη περίπτωση της εργασίας αυτή τη φορά, είναι το πολύ διάσημο και γνωστό σε όλους μας παιχνίδι για φορητές συσκευές, Angry Birds. Όποιος έχει παίξει angry birds εύλογα θα αναρωτηθεί για την αλήθεια του παραπάνω ισχυρισμού. Αλλά με μία πιο βαθιά ματιά φαίνεται πως τα angry birds έχουν κι αυτά μια ευγενή αποστολή. Να σώσουν τους ομοίους τους από τα κακά γουρούνια θυσιάζοντας ακόμη και τον ίδιο τους τον εαυτό. Είναι μια ιστορία με κλοπές, θυσίες και ένα μεγάλο σκοπό, τη σωτηρία των ομοίων τους και την εκδίκηση. Οι ιστορίες λοιπόν ακόμη και στο πιο απλό παιχνίδι είναι απαραίτητες. Μέσα σε ένα παιχνίδι υπάρχουν αντικρουόμενες δυνάμεις, που συνήθως αντιστοιχίζονται με το καλό και το κακό. Υπάρχει η σύγκρουση, η οποία συμβαίνει μέσα σε ένα φανταστικό κόσμο. Τον κόσμο αυτό και το υπόβαθρο της σύγκρουσης τα παρέχει στους παίκτες η ιστορία του παιχνιδιού, ώστε αυτοί να προχωρήσουν μέσα στο παιχνίδι. 96

97 Έτσι λοιπόν επιδιώχθηκε να δημιουργηθεί μια ιστορία που θα ενώσει τα γεγονότα που συμβαίνουν μέσα στο μαγικό κύκλο σε μια λογική συνέχεια, και να δώσει στον παίχτη το επιπλέον ενδιαφέρον που χρειάζεται για να ασχοληθεί με το παιχνίδι. Η ιστορία είναι που θα μετατρέψει την προτεινόμενη εφαρμογή από μια συνέχεια ασύνδετων αποστολών σε ένα πραγματικό παιχνίδι. Και τώρα προκύπτει η ερώτηση: Τι είδους ιστορία ταιριάζει στο παιχνίδι της εργασίας και πώς θα μπορέσει να δημιουργηθεί; Αυτή η ερώτηση απαντάται στο κεφάλαιο που ακολουθεί, καθώς περιγράφεται η διαδικασία σκέψης για τη δημιουργία και το ταίριασμα της ιστορίας με το ήδη υπάρχον παιχνίδι, αλλά και τη λογική του. Δεν πρέπει δηλαδή να ξεχαστεί ότι το παιχνίδι εν τέλει έχει εκπαιδευτικό σκοπό και η ιστορία πρέπει να είναι ενδιαφέρουσα, όχι όμως να επισκιάσει τον εκπαιδευτικό χαρακτήρα του παιχνιδιού, και ούτε να κάνει τους πιθανούς παίκτες να καταβάλουν επιπλέον άσκοπη σκέψη για να μπουν στο νόημα. Έχοντας υπόψη τα παραπάνω ξεκινά η σύνθεση της ιστορίας για το παιχνίδι της εργασίας, Αόρατη Πόλη. 6.1 ΒΗΜΑ 1 ο ΔΗΜΙΟΥΡΓΙΑ ΤΟΥ ΚΟΣΜΟΥ ΟΠΟΥ ΕΞΕΛΙΣΣΕΤΑΙ ΤΟ ΠΑΙΧΝΙΔΙ Πρέπει να προσδιοριστούν ο τόπος και ο χρόνος μέσα στον οποίο εξελίσσεται το παιχνίδι. Προφανώς εφόσον αναφέρεται σε pervasive game που εξελίσσεται στην πόλη της Πάτρας δεν υπάρχουν πολλές επιλογές για τον τόπο. Υπάρχει όμως η ελευθερία επιλογής της χρονικής στιγμής αλλά και των συνθηκών μέσα στις οποίες θα συγκρουστούν τα αντίπαλα στρατόπεδα, για να κερδίσουν τη νίκη. Το παιχνίδι λοιπόν εξελίσσεται μέσα σε μια υποθετικά υποδουλωμένη Ελλάδα εν έτη Η Επανάσταση σχεδιάζεται στα υπόγεια και στους σκοτεινούς δρόμους των πόλεων της Ελλάδας για να αποτινάξει τους ζυγούς του αδίστακτου κατακτητή. Η γερμανική κατοχή όμως δε σχεδιάζει να μείνει με σταυρωμένα χέρια και είναι έτοιμη να χρησιμοποιήσει θεμιτά και αθέμιτα μέσα για να κυριαρχήσει. 6.2 ΒΗΜΑ 2 ο ΔΗΜΙΟΥΡΓΙΑ ΧΑΡΑΚΤΗΡΩΝ ΚΑΙ ΥΠΟΒΑΘΡΟΥ Στο παιχνίδι όπως είναι ήδη γνωστό από περιγραφές σε παραπάνω κεφάλαια, υπάρχουν δύο πλευρές. Οι επαναστάτες, που παίζουν το ρόλο της απληροφόρητης πλειοψηφίας, και οι κατάσκοποι, που παίζουν το ρόλο της πληροφορημένης μειονότητας. Σε γενικές γραμμές αυτές είναι οι δύο αντίπαλες πλευρές του παιχνιδιού. Σε αυτό το βήμα όμως υπάρχει δυνατότητα να δοθεί λίγο περισσότερο βάθος και 97

98 ενδιαφέρον, ώστε οι παίχτες να μπορούν να ταυτιστούν με τη μία ή την άλλη πλευρά, και να μπουν στον κόσμο του παιχνιδιού. Εν συντομία περιγράφονται παρακάτω οι καταστάσεις που οδήγησαν στην πραγματικότητα του παιχνιδιού, και που ώθησαν τις δύο πλευρές να συγκρουστούν μεταξύ τους. Σε μια διαλυμένη οικονομικά Ευρώπη, η Ευρωπαϊκή Ένωση πλέον έχει μόνο ελάχιστα πλούσια μέλη, και με αρχηγό τη Γερμανία, μαζί τις άλλες πλούσιες χώρες, επέλεξαν να κάνουν τις φτωχές χώρες της Ευρώπης να πληρώσουν με ένα πιο αυστηρό τρόπο. Έφεραν λοιπόν με τη συμφωνία της ανίσχυρης και διορισμένης ελληνικής κυβέρνησης συμμαχικά ευρωπαϊκά στρατεύματα, τα οποία μπήκαν και εγκαταστάθηκαν στις πόλεις μας χωρίς καμιά αντίσταση, με σκοπό να επιβάλουν τον ευρωπαϊκό νόμο. Φυσικά η βία δεν είναι ποτέ η λύση, και τα πράγματα ξέφυγαν, και η αστυνόμευση του στρατού πέρασε σε βιαιότητες που δεν είχαν προηγούμενο. Όπως ήταν αναμενόμενο, το ελεύθερο πνεύμα του Έλληνα, δεν άργησε να αντιδράσει, με μεμονωμένες ενέργειες αρχικά και αργότερα δημιουργώντας μια υπόγεια κυβέρνηση που πήγαζε από τον ελεύθερο λαό. Τελικά η μεγάλη πλειοψηφία του λαού τάχθηκε με το μέρος της υπόγειας και ελεύθερης ελληνικής κυβέρνησης, η οποία πλέον έψαχνε τρόπο για να αντισταθεί ανοιχτά απέναντι στους κατακτητές. Τελικά η απόφαση πάρθηκε. Η επανάσταση έπρεπε να ξεκινήσει στην Πάτρα. Η μεγάλη της στρατηγική σημασία, αλλά και η ισχύς των επαναστατών στην Πάτρα την κατέστησαν ιδανική για την αρχή του αγώνα. Όμως ο κατακτητής, γνωρίζοντας τη σημασία της πόλης για τα συμφέροντά του αλλά και αναμένοντας κάποιου είδους ανοιχτή αντίδραση από την επανάσταση, για την οποία πολύ λίγα γνώριζε, αποφάσισε να διεισδύσει στις τάξης της. Πιάνοντας λοιπόν αιχμάλωτες οικογένειες πολιτών τους ανάγκασε να γίνουν δοσίλογοι και να την υπηρετήσουν ως κατάσκοποι. Ο μοναδικός σκοπός των κατασκόπων είναι να σαμποτάρουν τα σχέδια της επανάστασης, και να την κάνουν να αποτύχει εν τη γενέσει της. Οι κατάσκοποι του κατακτητή γνωρίζονται μεταξύ τους, ενώ η επανάσταση γνωρίζει την ύπαρξή τους, όχι όμως και τις ταυτότητές τους. 6.3 ΒΗΜΑ 3 ο ΙΣΤΟΡΙΑ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ Καταλήγοντας στην κατάσταση που περιγράφηκε παραπάνω, αμέσως μετά ξεκινά η δράση του παιχνιδιού. Η επανάσταση προσπαθεί να συλλέξει πληροφορίες για την αποφασιστική επίθεσή της και την απελευθέρωση της Πάτρας. 98

99 Σκοπός των επαναστατών είναι να φέρουν εις πέρας τα σημαντικά αντικείμενα κάθε αποστολής ώστε να ολοκληρωθεί η αποστολή. Για να ολοκληρωθεί η αποστολή πρέπει να εκτελεστούν επιτυχώς τα σημαντικά αντικείμενά της ένα προς ένα, διαφορετικά αποτυγχάνει. Η ολοκλήρωση κάθε αποστολής φέρνει τους επαναστάτες ένα βήμα πιο κοντά στο στόχο τους. Η αποτυχία στην ολοκλήρωση της από την άλλη δε σημαίνει ολοκληρωτική αποτυχία. Αν η πλειοψηφία των αποστολών ολοκληρωθεί επιτυχώς, οι επαναστάτες κερδίζουν και πετυχαίνουν το σκοπό τους, δηλαδή την απελευθέρωση της Πάτρας. Όμως η έκβαση της ιστορίας αλλάζει με βάση το ποσοστό των επιτυχώς ολοκληρωμένων αποστολών. Για παράδειγμα αν επιτύχουν σε όλες τους τις αποστολές, η Πάτρα απελευθερώνεται με ευκολία, και οι απώλειες του εχθρού είναι μεγάλες με αποτέλεσμα το πλήγμα αυτό να δώσει ώθηση και σε άλλες πόλεις να ακολουθήσουν. Αν όμως οι επαναστάτες κερδίσουν 3 αποστολές και αποτύχουν σε 2 τότε η επανάσταση ελευθερώνει την Πάτρα, η οποία όμως από τις μάχες καταστρέφεται σε μεγάλο βαθμό, ενώ τα στρατεύματα του κατακτητή καταφέρνουν να διαφύγουν. Ένας άλλος τρόπος για να κερδίσει η επανάσταση, είναι να καταφέρει να εξουδετερώσει τους κατασκόπους, μέσα από τις ψηφοφορίες αποκάλυψης, και να δράσει ανενόχλητη. Κάπου εδώ αρχίζει ο ρόλος των κατασκόπων. Οι κατάσκοποι, οι οποίοι γνωρίζονται μεταξύ τους, ως σκοπό έχουν την καταστολή της επανάστασης πριν αυτή προλάβει να εκδηλωθεί. Είναι πεπεισμένοι ότι αυτό είναι το σωστό για να σωθούν τόσο οι οικογένειές τους, όσο και οι υπόλοιποι που θα πέθαιναν στις συγκρούσεις κατά τη διάρκεια της επανάστασης, στης οποίας την επιτυχία αλλά και το μέλλον δεν έχουν πίστη. Οι τρόποι δράσης τους είναι διάφοροι. Μπορούν να λάβουν, αν τα καταφέρουν, μέσα από ψηφοφορία, ακόμη και τη θέση του αρχηγού, με αποτέλεσμα να μπορέσουν να ελέγξουν την ανάθεση αποστολών, αλλά και να κατευθύνουν τις υποψίες για τυχόν αποτυχία ενός αντικειμένου σε λάθος άτομα. Οι τρόποι να νικήσουν είναι αντίστοιχοι με αυτούς των επαναστατών. Ή θα κάνουν την πλειοψηφία των αποστολών των επαναστατών να αποτύχουν, ή θα εξουδετερώσουν μέσα από ψηφοφορίες τόσους επαναστάτες, ώστε να μείνουν περισσότεροι κατάσκοποι και να κάνουν την επανάσταση να σβήσει. 6.4 ΒΗΜΑ 4 ο ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΣΤΟΙΧΩΝ ΕΙΚΟΝΩΝ ΚΑΙ ΟΠΤΙΚΩΝ ΕΡΕΘΙΣΜΑΤΩΝ Σε αυτό το βήμα έπρεπε να αναζητηθούν, ή να δημιουργηθούν εικόνες που θα διηγούνταν μαζί με ένα μικρό κείμενο την ιστορία που περιγράφεται στο παραπάνω κείμενο. Οι εικόνες αυτές μαζί με τις μικρές τους λεζάντες θα λένε την ιστορία στους παίκτες όταν το παιχνίδι ξεκινά. Δεν είναι κάτι το ιδιαίτερο αλλά προσδίδουν μια σκοτεινή ατμόσφαιρα αλλά κι έναν αέρα επανάστασης και αγώνα, που θεωρείται ότι κάνει το παιχνίδι πιο ενδιαφέρον, σε συνδυασμό με την επίκαιρη ιστορία. 99

100 «Οι μισθοί πείνας και η ανεργία είχαν φτάσει τον κόσμο στο απροχώρητο.» «Οι μεγάλες εταιρίες έπαιρναν ανασφάλιστους εργάτες και η πείνα θέριζε ενώ η αστυνομία και ο στρατός πίεζαν ακόμη περισσότερο την κατάσταση.» 100

101 «Ο κόσμος φοβόταν τη βία του ευρωπαϊκού στρατού και οι αντιδράσεις ήταν λίγες.» «Η κατάσταση όμως έφτασε στο απροχώρητο και η απόφαση πάρθηκε. Η επανάσταση είχε αποφασιστεί.» Επιπλέον έπρεπε να βρεθούν εικόνες πιο παραστατικές για τις οθόνες του παιχνιδιού αλλά και για την εξέλιξη της ιστορίας μέσα στο παιχνίδι. Κάποιες από τις εικόνες που θα εμφανίζονται στην εξέλιξη του παιχνιδιού παρουσιάζονται ακολούθως. Η ενσωμάτωσή τους μέσα στις οθόνες του παιχνιδιού καθώς και η τελική εμφάνιση του παιχνιδιού εμφανίζονται στη συνέχεια, καθώς από το ένα στάδιο στο άλλο μεσολάβησε πολλή δουλειά. 101

102 Εικόνα για την ανακοίνωση στον παίκτη ότι είναι με τους επαναστάτες. Πιθανές εικόνες για την ανακοίνωση σε παίχτη ότι είναι κατάσκοπος. 102

103 Εικόνα για την ανακοίνωση σε παίχτη ότι είναι αρχηγός για την τρέχουσα αποστολή. Εικόνα για την ψηφοφορία για αναγνώριση κατασκόπου. Εικόνα για την εξουδετέρωση κατασκόπου 103

104 Εικόνα για την εξουδετέρωση μέλους της επανάστασης Εικόνα για νίκη των επαναστατών 104

105 Πιθανές εικόνες για νίκη των κατασκόπων 6.5 ΒΗΜΑ 5 ο ΕΝΣΩΜΑΤΩΣΗ ΤΗΣ ΙΣΤΟΡΙΑΣ ΣΤΟ ΠΑΙΧΝΙΔΙ ΚΑΙ ΔΙΗΓΗΣΗ Για τη διήγηση της ιστορίας μέσα στο παιχνίδι, πραγματοποιήθηκε αντικατάσταση της μιας εισαγωγικής οθόνης πληροφοριών που υπήρχε ήδη, με 4 καινούρια απλά layouts που συνδυάζουν τα κατάλληλα backgrounds, με λίγα λόγια που περιγράφουν περιληπτικά την ιστορία που παρουσιάστηκε παραπάνω. Η πρόσβαση σε αυτά γίνεται με το ίδιο πλήκτρο που υπήρχε πριν για τις πληροφορίες που όμως βρίσκεται σε ένα εμφανισιακά αλλαγμένο layout. Το αποτέλεσμα φαίνεται αισθητικά ομορφότερο από την απλή οθόνη πληροφοριών που αντικατέστησε, και βάζει με επιτυχία τον παίκτη στην ατμόσφαιρα του παιχνιδιού που η ιστορία του παιχνιδιού δημιουργεί. Επίσης με τα μικρά κομμάτια κειμένου αλλά και την αποφυγή χρήσης περισσότερων οθονών για την ολοκληρωμένη διήγηση, αποφεύγεται η αποσυγκέντρωση του χρήστη. Στη συνέχεια ακολουθούν τα νέα layouts από το ξεκίνημα της εφαρμογής αλλά και τη μικρή διήγηση της ιστορίας. Στις οθόνες της διήγησης έχουν τοποθετηθεί δύο πλήκτρα που με την εμφάνισή τους κάνουν εμφανή τη χρήση τους. Με το κουμπί έξοδος ο χρήστης επιστρέφει στην αρχική οθόνη ενώ με το επόμενο προχωρά στην επόμενη οθόνη. Στην τέταρτη οθόνη υπάρχει μόνο κουμπί επόμενο που τον οδηγεί και πάλι στην αρχική οθόνη, όπου μπορεί να πατήσει το κουμπί για να ξεκινήσει το παιχνίδι ή να δει πάλι την διήγηση της ιστορίας, αν το επιθυμεί. 105

106 Αρχική οθόνη της εφαρμογής. Δυστυχώς το δεύτερο κουμπί δε φαίνεται στο preview. Πρώτη οθόνη της διήγησης 106

107 Δεύτερη οθόνη της διήγησης Τρίτη οθόνη διήγησης 107

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

109 Οθόνη ανακοίνωσης για τους κατασκόπους Οθόνη ανακοίνωσης για τους επαναστάτες 109

ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ. Δημητρίου Σωτήρης 6417

ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ. Δημητρίου Σωτήρης 6417 ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Δημητρίου Σωτήρης 6417 Παιχνίδια διάχυτου υπολογισμού Τεχνολογίες Σχεδιασμός Υλοποίηση Αξιολόγηση Προοπτικές Ένα παιχνίδι διάχυτου υπολογισμού είναι ένα παιχνίδι που έχει ένα ή περισσότερα

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ ΕΡΕΥΝΗΤΙΚΗ ΟΜΑΔΑ ΑΛΛΗΛΕΠΙΔΡΑΣΗΣ ΑΝΘΡΩΠΟΥ-ΥΠΟΛΟΓΙΣΤΗ. Διπλωματική Εργασία

ΕΡΓΑΣΤΗΡΙΟ ΕΡΕΥΝΗΤΙΚΗ ΟΜΑΔΑ ΑΛΛΗΛΕΠΙΔΡΑΣΗΣ ΑΝΘΡΩΠΟΥ-ΥΠΟΛΟΓΙΣΤΗ. Διπλωματική Εργασία ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ: ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΕΡΕΥΝΗΤΙΚΗ ΟΜΑΔΑ ΑΛΛΗΛΕΠΙΔΡΑΣΗΣ ΑΝΘΡΩΠΟΥ-ΥΠΟΛΟΓΙΣΤΗ Διπλωματική Εργασία του

Διαβάστε περισσότερα

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

ΕΠΙΣΗΜΟΙ ΚΑΝΟΝΕΣ ΤΟΥ ΟΙ ΚΑΡΤΕΣ ΕΠΙΣΗΜΟΙ ΚΑΝΟΝΕΣ ΤΟΥ Το SLEUTH είναι ένα φανταστικό παιχνίδι έρευνας για 3 έως 7 παίκτες. Μέσα από έξυπνες ερωτήσεις προς τους αντιπάλους του, κάθε παίκτης συλλέγει στοιχεία και έπειτα, χρησιμοποιώντας

Διαβάστε περισσότερα

Σκοπός του παιχνιδιού. Περιεχόμενα

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

Διαβάστε περισσότερα

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Dr. Anthony Montgomery Επίκουρος Καθηγητής Εκπαιδευτικής & Κοινωνικής Πολιτικής antmont@uom.gr Ποιός είναι ο σκοπός του μαθήματος μας? Στο τέλος του σημερινού μαθήματος,

Διαβάστε περισσότερα

Πώς το λένε Computer game στο Scratch

Πώς το λένε Computer game στο Scratch Πώς το λένε Computer game στο Scratch Μιχαηλία Γκαλλέ¹, Χριστόδουλος Σατραζέμης², 1 Μαθήτρια Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου mixaelagalle@gmail.com 2 Μαθητής Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου linosatra@gmail.com

Διαβάστε περισσότερα

Περιεχόμενα. Σκοπός του παιχνιδιού. Πριν το πρώτο γύρο. Επισκόπηση παιχνιδιού. Κάρτα Κατάσκοπος. Ροή παιχνιδιού. Αρχή γύρου

Περιεχόμενα. Σκοπός του παιχνιδιού. Πριν το πρώτο γύρο. Επισκόπηση παιχνιδιού. Κάρτα Κατάσκοπος. Ροή παιχνιδιού. Αρχή γύρου Οδηγίες Το παιχνίδι «ΚΑΤΑΣΚΟΠΟΣ», ένα από τα πιο γνωστά επιτραπέζια παρέας σε όλο τον κόσμο, έχει και συνέχεια το «ΚΑΤΑΣΚΟΠΟΣ 2». Στο «ΚΑΤΑΣΚΟΠΟΣ 2» θα εξερευνήσετε 20 νέες τοποθεσίες όπου θα μπορείτε

Διαβάστε περισσότερα

Το Jungle Speed είναι ένα παιχνίδι για 2 έως 10 παίκτες (ή και ακόμη περισσότερους!) ηλικίας 7 και άνω.

Το Jungle Speed είναι ένα παιχνίδι για 2 έως 10 παίκτες (ή και ακόμη περισσότερους!) ηλικίας 7 και άνω. Το Jungle Speed είναι ένα παιχνίδι για 2 έως 10 παίκτες (ή και ακόμη περισσότερους!) ηλικίας 7 και άνω. Σκοπός σας είναι να είστε ο πρώτος παίκτης που θα ξεφωρτωθεί όλες του τις κάρτες. Το τοτέμ τοποθετείται

Διαβάστε περισσότερα

Δεν υπάρχει πολύς χρόνος για να τα καταφέρουν, παρά µόνο επτά ηµέρες...

Δεν υπάρχει πολύς χρόνος για να τα καταφέρουν, παρά µόνο επτά ηµέρες... To «Mysterium» είναι ένα συνεργατικό παιχνίδι για 2-7 παίκτες. Ένας παίκτης αναλαµβάνει το ρόλο του Φαντάσµατος που κατοικεί στην εγκαταλελειµµένη έπαυλη, ενώ οι υπόλοιποι είναι Μέντιουµ, που έχει προσκαλέσει

Διαβάστε περισσότερα

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

Ένα έξυπνο παιχνίδι τοποθέτησης πλακιδίων για 2-5 παίκτες, 8 ετών και άνω από τον Klaus-Jurgen Wrede Ένα έξυπνο παιχνίδι τοποθέτησης πλακιδίων για 2-5 παίκτες, 8 ετών και άνω από τον Klaus-Jurgen Wrede Η πόλη Καρκασόνε στα νότια της Γαλλίας, φημίζεται για τις ιδιαίτερες Ρωμαϊκές και Μεσαιωνικές της οχυρώσεις.

Διαβάστε περισσότερα

Slalom Race Computer Game on Scratch

Slalom Race Computer Game on Scratch Slalom Race Computer Game on Scratch Μπογιατζή Ελισάβετ ¹, Μεταξά Παυλίνα², Νεστοροπούλου Ευσεβεία³, Μαρόγλου Ευαγγελία 4 1 boelisabet@gmail.com 2 pavlinamet2@gmail.com 3 makis.nestoro@hotmail.com 4 euaggeliam2000@gmail.com

Διαβάστε περισσότερα

ΕΓΧΕΙΡΙΔΙΟ ΚΑΝΟΝΩΝ ΕΝΑ ΠΑΙΧΝΙΔΙ ΑΝΤΑΓΩΝΙΣΜΟΥ ΓΙΑ 2 ΩΣ 4 ΠΑΙΚΤΕΣ

ΕΓΧΕΙΡΙΔΙΟ ΚΑΝΟΝΩΝ ΕΝΑ ΠΑΙΧΝΙΔΙ ΑΝΤΑΓΩΝΙΣΜΟΥ ΓΙΑ 2 ΩΣ 4 ΠΑΙΚΤΕΣ ΕΓΧΕΙΡΙΔΙΟ ΚΑΝΟΝΩΝ ΕΝΑ ΠΑΙΧΝΙΔΙ ΕΞΕΡΕΥΝΗΣΗΣ ΑΝΤΑΓΩΝΙΣΜΟΥ & ΠΕΡΙΠΕΤΕΙΑΣ ΓΙΑ 2 ΩΣ 4 ΠΑΙΚΤΕΣ Credits 2012 Σχεδιαστές: Παραγωγή: Εικονογράφηση: Jose Pascual Εκτύπωση: Priority Soluciones Graficas - Eduardo

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Περιεχόμενα του Παιχνιδιού 1347 Ο Μαύρος Θάνατος ξεσπάει στην Ευρώπη. Ο άρχοντας της χώρας σας, μόλις υπέκυψε στην πανούκλα, και τώρα εσείς, οι πρίγκηπες της χώρας, ανταγωνίζεστε μεταξύ σας για να τον αντικαταστήσετε. Για να το

Διαβάστε περισσότερα

EMOJITO! 7 Δίσκοι Ψηφοφορίας. 100 Κάρτες Συναισθημάτων. 1 Ταμπλό. 7 Πιόνια παικτών. 2-7 Παίκτες

EMOJITO! 7 Δίσκοι Ψηφοφορίας. 100 Κάρτες Συναισθημάτων. 1 Ταμπλό. 7 Πιόνια παικτών. 2-7 Παίκτες o Emojito! είναι ένα παιχνίδι παρέας, για 2 έως 14 άτομα, όπου οι παίκτες προσπαθούν να εκφράσουν συναισθήματα που απεικονίζονται σε κάρτες, είτε χρησιμοποιώντας το πρόσωπό τους, είτε ήχους ή και τα 2.

Διαβάστε περισσότερα

Σχέδιο Μαθήματος Νο3 «SimSafety» Σενάριο Παιχνιδιού: «Κλοπή» (Theft)

Σχέδιο Μαθήματος Νο3 «SimSafety» Σενάριο Παιχνιδιού: «Κλοπή» (Theft) Σχέδιο Μαθήματος Νο3 «SimSafety» Σενάριο Παιχνιδιού: «Κλοπή» (Theft) 1. Μάθημα (κατά το οποίο μπορεί να διδαχτεί η συγκεκριμένη δραστηριότητα): Αγγλικά, Πληροφορική, Ευέλικτη ζώνη στην πρωτοβάθμια εκπαίδευση

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run Καλώς ήλθες. Στο προηγούμενο μάθημα είδαμε τις λειτουργίες του μενού File του Editor της Unity. Όπως είπαμε οι δύο επιλογές που διαφέρουν

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές Λαμπαδαρίδης Αντώνιος el04148@mail.ntua.gr Διπλωματική εργασία στο Εργαστήριο Συστημάτων Βάσεων Γνώσεων και Δεδομένων Επιβλέπων: Καθηγητής Τ. Σελλής Περίληψη

Διαβάστε περισσότερα

Πρόγραμμα Πιστοποίησης Γνώσεων και Δεξιοτήτων H/Y ΕΝΟΤΗΤΑ 1: «ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ»

Πρόγραμμα Πιστοποίησης Γνώσεων και Δεξιοτήτων H/Y ΕΝΟΤΗΤΑ 1: «ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ» Πρόγραμμα Πιστοποίησης Γνώσεων και Δεξιοτήτων H/Y ΕΝΟΤΗΤΑ 1: «ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ» Μάθημα 0.2: Το Λογισμικό (Software) Δίκτυα υπολογιστών Αντώνης Χατζηνούσκας 2 ΠΕΡΙΕΧΟΜΕΝΑ Α. Σκοπός του Μαθήματος

Διαβάστε περισσότερα

Εκπαιδευτική Τεχνολογία - Πολυμέσα. Ελένη Περιστέρη, Msc, PhD

Εκπαιδευτική Τεχνολογία - Πολυμέσα. Ελένη Περιστέρη, Msc, PhD Εκπαιδευτική Τεχνολογία - Πολυμέσα Ελένη Περιστέρη, Msc, PhD Τι είναι η «Εκπαιδευτική Τεχνολογία» (1) Εκπαιδευτική Τεχνολογία είναι «η εφαρμογή τεχνολογικών διαδικασιών και εργαλείων που μπορούν να χρησιμοποιηθούν

Διαβάστε περισσότερα

Ενότητα 1η. Εισαγωγή στην Πληροφορική

Ενότητα 1η. Εισαγωγή στην Πληροφορική Ενότητα 1η Εισαγωγή στην Πληροφορική 1.1 Τι είναι Πληροφορική Ένας σύντομος ορισμός για το τι είναι πληροφορική είναι ο παρακάτω: όλα εκείνα που χρειάζεται κανείς για να παράγει, να οργανώνει και να διαχειρίζεται

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Β ) Λειτουργικό Σύστημα Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

Το FUTURE Time Traveller έκλεισε ένα χρόνο!

Το FUTURE Time Traveller έκλεισε ένα χρόνο! Το FUTURE Time Traveller έκλεισε ένα χρόνο! Πριν από 12 μήνες, η πολυεθνική μας ομάδα ξεκίνησε μια μελλοντική πρωτοβουλία με στόχο να μετασχηματίσει τον προσανατολισμό της σταδιοδρομίας για την Γενιά Z

Διαβάστε περισσότερα

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Κεφάλαιο 1.6: Συσκευές αποθήκευσης Κεφάλαιο 1.6: Συσκευές αποθήκευσης 1.6.1 Συσκευές αποθήκευσης Μνήμη τυχαίας προσπέλασης - RAM Η μνήμη RAM (Random Access Memory Μνήμη Τυχαίας Προσπέλασης), κρατεί όλη την πληροφορία (δεδομένα και εντολές)

Διαβάστε περισσότερα

Τα γραφικά του παιχνιδιού ήταν στην ουσία χαρακτήρες ASCII, προσεκτικά προγραµµατισµένοι ώστε να σχηµατίζουν αντικείµενα και να ξεγελούν το ανθρώπινο

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

Διαβάστε περισσότερα

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΔΙΑΤΜΗΜΑΤΙΚΟ ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΤΑ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Διπλωματική Εργασία με θέμα: Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού Καραγιάννης Ιωάννης Α.Μ.

Διαβάστε περισσότερα

Η μπάλα στο σημείο Δεξιότητες: Ρίξιμο κάτω από τον ώμο σε ύψος. Πιάσιμο της μπάλας στον αέρα ή μετά από μια αναπήδηση.

Η μπάλα στο σημείο Δεξιότητες: Ρίξιμο κάτω από τον ώμο σε ύψος. Πιάσιμο της μπάλας στον αέρα ή μετά από μια αναπήδηση. Η μπάλα στο σημείο Ρίξιμο κάτω από τον ώμο σε ύψος. Πιάσιμο της μπάλας στον αέρα ή μετά από μια αναπήδηση. Στέλνω το αντικείμενο στον κενό χώρο. Ξεκινώ και επανατοποθετούμαι κάθε φορά στην Παίζω με διαφορετικό

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

Ενημέρωση σε Windows 8.1 από τα Windows 8

Ενημέρωση σε Windows 8.1 από τα Windows 8 Ενημέρωση σε Windows 8.1 από τα Windows 8 Τα Windows 8.1 και τα Windows RT 8.1 είναι βασισμένα στα Windows 8 και στα Windows RT, για να σας προσφέρουν βελτιώσεις στην εξατομίκευση, την αναζήτηση, τις εφαρμογές,

Διαβάστε περισσότερα

10 Νέα χαρακτηριστικά του Facebook που (πιθανόν) δεν γνωρίζεις

10 Νέα χαρακτηριστικά του Facebook που (πιθανόν) δεν γνωρίζεις 10 Νέα χαρακτηριστικά του Facebook που (πιθανόν) δεν γνωρίζεις 6 Μαρτίου 2016 Παναγιώτης Σακαλάκης Αν υπάρχει κάτι που γνωρίζει ο περισσότερος κόσμος για το Facebook, αυτό είναι πως κατέχει την πρώτη θέση

Διαβάστε περισσότερα

«Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr»

«Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr» Επεξήγηση web site με λογικό διάγραμμα «Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr» Web : www.e-base.gr E-mail : support@e-base.gr Facebook : Like Twitter : @ebasegr Πολλοί άνθρωποι

Διαβάστε περισσότερα

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

Το Κ2 είναι ένα παιχνίδι για 1 έως 5 παίκτες, ηλικίας 8 ετών και άνω, με διάρκεια περίπου 60 λεπτά. ΟΔΗΓΙΕΣ Το Κ2 είναι το δεύτερο ψηλότερο βουνό στον κόσμο (μετά το Έβερεστ) με ύψος 8.611 μέτρα από τη στάθμη της θάλασσας. Θεωρείται, επίσης, ένα από τα δυσκολότερα βουνά άνω των 8.000 μέτρων. Το Κ2 ποτέ

Διαβάστε περισσότερα

Νεογεωγραφία και Χαρτογραφική Διαδικτυακή Απεικόνιση. Η χρήση Ελεύθερων Γεωγραφικών Δεδομένων και Λογισμικού Ανοιχτού Κώδικα σε Φορητές Συσκευές.

Νεογεωγραφία και Χαρτογραφική Διαδικτυακή Απεικόνιση. Η χρήση Ελεύθερων Γεωγραφικών Δεδομένων και Λογισμικού Ανοιχτού Κώδικα σε Φορητές Συσκευές. Νεογεωγραφία και Χαρτογραφική Διαδικτυακή Απεικόνιση. Η χρήση Ελεύθερων Γεωγραφικών Δεδομένων και Λογισμικού Ανοιχτού Κώδικα σε Φορητές Συσκευές. 13ο ΕΘΝΙΚΟ ΣΥΝΕΔΡΙΟ ΧΑΡΤΟΓΡΑΦΙΑΣ Η ΧΑΡΤΟΓΡΑΦΙΑ ΣΤΟ ΔΙΑΔΙΚΤΥΟ

Διαβάστε περισσότερα

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Περιεχόμενα Εισαγωγή στην εφαρμογή... 2 Βασική Σελίδα (Activity)... 3 Ρυθμίσεις... 3 Πελάτες... 6 Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Αποθήκη... 11 Αναζήτηση προϊόντος...

Διαβάστε περισσότερα

Οδηγίες. Θα το παίξεις... και θα πεις κι ένα τραγούδι!

Οδηγίες. Θα το παίξεις... και θα πεις κι ένα τραγούδι! Οδηγίες To Sing It! είναι ένα νέο παιχνίδι παρέας που δοκιμάζει τις γνώσεις σας στο ελληνικό τραγούδι! Μέσα από λέξεις που σας δίνονται, καλείστε να βρείτε τραγούδια που τις περιέχουν. Θα πείτε εσείς τα

Διαβάστε περισσότερα

Εισαγωγή. Περιεχόμενα

Εισαγωγή. Περιεχόμενα Εισαγωγή Το 1878, το Βασιλικό Μουσείο του Βερολίνου ξεκίνησε την ανάθεση των ανασκαφών στην Πέργαμο, μια περιοχή της νυν Τουρκίας. Η πόλη έφτασε στην κορυφή της ανάπτυξής της γύρω στο 200 π.χ. (στα Λατινικά

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

Tank Rescue Computer Game σε Scratch

Tank Rescue Computer Game σε Scratch Tank Rescue Computer Game σε Scratch Μπέλτσος Νικόλαος 1, Παναγιωτόπουλος Ευάγγελος 2, Παπαδόπουλος Βασίλης 3, Παπουδάρης Κωνσταντίνος 4 1 sokin2@yahoo.gr 2 vaggelispan@yahoo.gr 3 papadopoulos_vasilis@yahoo.gr

Διαβάστε περισσότερα

ANDROID Προγραμματισμός Εφαρμογών

ANDROID Προγραμματισμός Εφαρμογών ANDROID Προγραμματισμός Εφαρμογών Παναγιώτης Κρητιώτης ΑΜ 1607 Περιεχόμενα Εισαγωγή Βασικά Στοιχεία Χαρακτηριστικά Αρχιτεκτονική Εργαλεία Προγραμματισμού Eclipse IDE Android SDK - ADT Plugin Προσομοιωτής

Διαβάστε περισσότερα

Έχεις ξαναπαίξει με παιχνίδια που χρησιμοποιούν ηλεκτρισμό στη λειτουργία τους;

Έχεις ξαναπαίξει με παιχνίδια που χρησιμοποιούν ηλεκτρισμό στη λειτουργία τους; ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ Έχεις ξαναπαίξει με παιχνίδια που χρησιμοποιούν ηλεκτρισμό στη λειτουργία τους; Μπορείς να μου αναφέρεις μερικά παραδείγματα; ΣΤΑΔΙΟ 1: ΚΑΤΑΣΤΑΣΗ: ΕΙΔΗΣΕΙΣ:Μια από τις μεγαλύτερες

Διαβάστε περισσότερα

Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι ερωτοαπαντήσεων

Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι ερωτοαπαντήσεων Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι Παρτώνας Αλέξανδρος Επιβλέπων: Δρ.

Διαβάστε περισσότερα

Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo;

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

Διαβάστε περισσότερα

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Δυναμική προσωποποιημένη ενημέρωση προσφορών Super Markets στη Θεσσαλονίκη

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Δυναμική προσωποποιημένη ενημέρωση προσφορών Super Markets στη Θεσσαλονίκη ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Δυναμική προσωποποιημένη ενημέρωση προσφορών Super Markets στη Θεσσαλονίκη Παπαδόπουλου Κυριάκου Αρ. Μητρώου: 093507 Επιβλέπων καθηγητής: Ηλιούδης Χρήστος Εισαγωγή - Σκοπός Εργασίας Καινοτόμες

Διαβάστε περισσότερα

Θεμελιώδεις Αρχές Επιστήμης και Μέθοδοι Έρευνας

Θεμελιώδεις Αρχές Επιστήμης και Μέθοδοι Έρευνας Θεμελιώδεις Αρχές Επιστήμης και Μέθοδοι Έρευνας Dr. Anthony Montgomery Επίκουρος Καθηγητής Εκπαιδευτικής & Κοινωνικής Πολιτικής antmont@uom.gr Θεμελιώδεις Αρχές Επιστήμης και Μέθοδοι Έρευνας Αυτό το μάθημα

Διαβάστε περισσότερα

Ολοκληρωμένο σύστημα διαχείρισης παρουσιών στο Τ.Ε.Ι. Σερρών

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

Διαβάστε περισσότερα

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

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

Διαβάστε περισσότερα

Οι γνώμες είναι πολλές

Οι γνώμες είναι πολλές Η Ψυχολογία στη Φυσική Αγωγή στο πλαίσιο του σχολικού περιβάλλοντος ΚασταμονίτηςΚωνσταντίνος Ψυχολόγος Οι γνώμες είναι πολλές Πολλές είναι οι γνώμες στο τι προσφέρει τελικά ο αθλητισμός στην παιδική ηλικία

Διαβάστε περισσότερα

Ενσωματωμένα controls τα οποία προσαρμόζονται και χρησιμοποιούνται σε οποιαδήποτε ιστοσελίδα επιλέγει ο φορέας.

Ενσωματωμένα controls τα οποία προσαρμόζονται και χρησιμοποιούνται σε οποιαδήποτε ιστοσελίδα επιλέγει ο φορέας. Η Πυξίδα Απασχόλησης είναι ένα πλήρως παραμετροποιήσιμο portal που απευθύνεται σε Κέντρα Επαγγελματικής Κατάρτισης, Δήμους, Εκπαιδευτικούς Οργανισμούς και Εταιρίες Εύρεσης Εργασίας, με στόχο τόσο την μηχανογράφηση

Διαβάστε περισσότερα

Περιεχόμενα 1 Scriptorium (Ταμπλό Αξίας Κατηγορίας) 5 εξάπλευρα ζάρια 87 κάρτες

Περιεχόμενα 1 Scriptorium (Ταμπλό Αξίας Κατηγορίας) 5 εξάπλευρα ζάρια 87 κάρτες Εισαγωγή Στο Biblios, αναλαμβάνετε το ρόλο ενός ηγούμενου, επικεφαλής ενός μοναστηριού την εποχή του Μεσαίωνα. Προσπαθώντας να δημιουργήσετε την εντυπωσιακότερη βιβλιοθήκη, συναγωνίζεστε με άλλους ηγούμενους

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Τοκπασίδης Παναγιώτης Προπονητής Ποδοσφαίρου UEFA A ΠΩΣ ΝΑ ΑΝΑΠΤΥΞΕΤΕ ΔΗΜΙΟΥΡΓΙΚΟΥΣ ΠΟΔΟΣΦΑΙΡΙΣΤΕΣ

Τοκπασίδης Παναγιώτης Προπονητής Ποδοσφαίρου UEFA A ΠΩΣ ΝΑ ΑΝΑΠΤΥΞΕΤΕ ΔΗΜΙΟΥΡΓΙΚΟΥΣ ΠΟΔΟΣΦΑΙΡΙΣΤΕΣ Τοκπασίδης Παναγιώτης Προπονητής Ποδοσφαίρου UEFA A ΠΩΣ ΝΑ ΑΝΑΠΤΥΞΕΤΕ ΔΗΜΙΟΥΡΓΙΚΟΥΣ ΠΟΔΟΣΦΑΙΡΙΣΤΕΣ Χαλκίδα, 2019 "Σταματήστε να σκέφτεστε τον Ρονάλντο και τον Μέσσι και προσπαθήστε να κάνετε το απλό",

Διαβάστε περισσότερα

Ενότητα 2: Ενθάρρυνση προς ηλικιωμένους για μάθηση της τεχνολογίας

Ενότητα 2: Ενθάρρυνση προς ηλικιωμένους για μάθηση της τεχνολογίας Ενότητα 2: Ενθάρρυνση προς ηλικιωμένους για μάθηση της τεχνολογίας Καθορίζοντας το Πλαίσιο Ο πληθυσμός των ηλικιωμένων (οι δημογραφικές αλλαγές)) Η οικονομική κρίση που επηρέασε την Ευρώπη και η προσπάθειά

Διαβάστε περισσότερα

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

Μαθηματικά και Πληροφορική. Διδακτική Αξιοποίηση του Διαδικτύου για τη Μελέτη και την Αυτο-αξιολόγηση των Μαθητών. Μαθηματικά και Πληροφορική. Διδακτική Αξιοποίηση του Διαδικτύου για τη Μελέτη και την Αυτο-αξιολόγηση των Μαθητών. Α. Πέρδος 1, I. Σαράφης, Χ. Τίκβα 3 1 Ελληνογαλλική Σχολή Καλαμαρί perdos@kalamari.gr

Διαβάστε περισσότερα

«Γκρρρ,» αναφωνεί η Ζέτα «δεν το πιστεύω ότι οι άνθρωποι μπορούν να συμπεριφέρονται έτσι μεταξύ τους!»

«Γκρρρ,» αναφωνεί η Ζέτα «δεν το πιστεύω ότι οι άνθρωποι μπορούν να συμπεριφέρονται έτσι μεταξύ τους!» 26 σχεδιασε μια ΦωτογρΑΦιΑ τήσ προσκλήσήσ που ελαβεσ Απο τον ΔΑσκΑλο σου. παρουσιασε το λογοτυπο και το σλογκαν που χρήσιμοποιει το σχολειο σου για τήν εβδομαδα κατα τήσ παρενοχλήσήσ. ΗΛΕΚΤΡΟΝΙΚΗ ΠΑΡΕΝΟΧΛΗΣΗ

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Αναπαραγωγή με αρχεία ήχου

Αναπαραγωγή με αρχεία ήχου Αναπαραγωγή με αρχεία ήχου Ανοίγει η παρουσίαση και εμφανίζεται η διαφάνεια τίτλου, "Πειράματα με αρχεία ήχου". Άσκηση 1: Εισαγωγή ήχου για συνεχή αναπαραγωγή Βήμα 1: Εισαγωγή ήχου Στη διαφάνεια 1, με

Διαβάστε περισσότερα

Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape

Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape Επιμέλεια: Γκέκα Ασπασία Ιωάννου Ελένη Κούνουπα Άννα Τμήμα Εφαρμογών Πληροφορικής Α 1 Εξάμηνο Δ.ΙΕΚ Αιγάλεω 1 ΠΕΡΙΕΧΟΜΕΝΑ

Διαβάστε περισσότερα

Μάθηση & Εξερεύνηση στο περιβάλλον του Μουσείου

Μάθηση & Εξερεύνηση στο περιβάλλον του Μουσείου Βασίλειος Κωτούλας vaskotoulas@sch.gr h=p://dipe.kar.sch.gr/grss Αρχαιολογικό Μουσείο Καρδίτσας Μάθηση & Εξερεύνηση στο περιβάλλον του Μουσείου Η Δομή της εισήγησης 1 2 3 Δυο λόγια για Στόχοι των Ερευνητική

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ www.cslab.ece.ntua.gr Διπλωματικές

Διαβάστε περισσότερα

Λονδίνο, 17 Νοεμβρίου 1896

Λονδίνο, 17 Νοεμβρίου 1896 Λονδίνο, 17 Νοεμβρίου 1896 Ο ι δρόμοι της πόλης είναι σχεδόν έρημοι και τους διασχίζουν μόνο πεζοί με σκοπό να φτάσουν στα ζεστά τους σπίτια όσο γρηγορότερα μπορούν. Αλλά στα μυστικά σαλόνια του πολυτελούς

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές Σκοπός του εργαστηρίου αυτού είναι η εξοικείωση με κάποιες εφαρμογές που θα μας φανούν πολύ χρήσιμες κατά τη διάρκεια του μαθήματος της Εισαγωγής στον Προγραμματισμό.

Διαβάστε περισσότερα

Ένα παιχνίδι του Stefan Feld ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΠΑΙΧΝΙΔΙ ΠΕΡΙΕΧΟΜΕΝΑ

Ένα παιχνίδι του Stefan Feld ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΠΑΙΧΝΙΔΙ ΠΕΡΙΕΧΟΜΕΝΑ Ένα παιχνίδι του Stefan Feld για 2 έως 5 παίκτες. Χρόνος παιχνιδιού: 45-60 λεπτά. ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΠΑΙΧΝΙΔΙ Η Βενετία είναι διάσημη για τις γέφυρες και τις γόνδολές της. Περί αυτού πρόκειται και το παιχνίδι

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ

ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ ΑΜΑΛIΑ ΦΩΚA ΕΠIΚΟΥΡΗ ΚΑΘΗΓHΤΡΙΑ Περιεχόμενο Μαθήματος 2 Δίκτυα On the Net ή in the Net? 3 Καλλιτέχνες που χρησιμοποιούν το διαδίκτυο με διαφορετικό τρόπο από το να προβάλουν

Διαβάστε περισσότερα

The Mind. Mind σε ένα νέο επίπεδο.επιλέξτε ένα από τα δύο μουσικά κομμάτια στο CD. Με το πρώτο κομμάτι

The Mind. Mind σε ένα νέο επίπεδο.επιλέξτε ένα από τα δύο μουσικά κομμάτια στο CD. Με το πρώτο κομμάτι The Mind Παίκτες: 2-4 Ηλικία: 8 ετών και άνω Διάρκεια: περίπου 20 λεπτά Wolfgang Warsch Ας γίνουμε ένα...! Όσο προχωρείτε σε αυτό το πείραμα, τόσο περισσότερο βιώνετε το The Mind σε μια νέα διάσταση. Λαμβάνετε

Διαβάστε περισσότερα

ΑΝΑΛΥΣΗ ΑΡΘΡΟΥ ΜΕ ΘΕΜΑ: ΟΙ ΙΔΕΕΣ ΤΩΝ ΠΑΙΔΙΩΝ ΣΧΕΤΙΚΑ ΜΕ ΤΟ

ΑΝΑΛΥΣΗ ΑΡΘΡΟΥ ΜΕ ΘΕΜΑ: ΟΙ ΙΔΕΕΣ ΤΩΝ ΠΑΙΔΙΩΝ ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΑΝΑΛΥΣΗ ΑΡΘΡΟΥ ΜΕ ΘΕΜΑ: ΟΙ ΙΔΕΕΣ ΤΩΝ ΠΑΙΔΙΩΝ ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΦΩΣ ΚΑΙ ΤΗΝ ΟΡΑΣΗ. Το άρθρο αυτό έχει ως σκοπό την παράθεση των αποτελεσμάτων πάνω σε μια έρευνα με τίτλο, οι ιδέες των παιδιών σχετικά με το

Διαβάστε περισσότερα

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ.

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. Οδηγός Διαχειριστή Το m-learning Toolkit είναι μια ολοκληρωμένη πλατφόρμα εξ αποστάσεως εκπαίδευσης που έχει σχεδιαστεί για να υπάρχει η δυνατότητα της πρόσβασης

Διαβάστε περισσότερα

ΕΦΗΒΟΙ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ (ΗΛΕΚΤΡΟΝΙΚΑ ΠΑΙΧΝΙΔΙΑ)

ΕΦΗΒΟΙ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ (ΗΛΕΚΤΡΟΝΙΚΑ ΠΑΙΧΝΙΔΙΑ) 25/1/2013 ΕΦΗΒΟΙ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ (ΗΛΕΚΤΡΟΝΙΚΑ ΠΑΙΧΝΙΔΙΑ) ΠΕΙΡΑΤΕΣ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ 1)ΓΑΛΑΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ 2)ΘΕΟΔΩΡΑΚΟΠΟΥΛΟΣ ΙΩΑΝΝΗΣ 3)ΣΤΑΘΑΚΟΠΟΥΛΟΣ ΑΡΙΣΤΕΙΔΗΣ 4)ΧΡΟΝΟΠΟΥΛΟΣ ΔΗΜΗΤΡΙΟΣ 2012-2013 ΓΥΜΝΑΣΙΟ ΛΥΚΕΙΟ

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Οδηγίες για την πλατφόρμα EVA - εκπαιδευτές και δάσκαλοι

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

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 1: Τα είδη των Δικτύων Εισαγωγή

ΚΕΦΑΛΑΙΟ 1: Τα είδη των Δικτύων Εισαγωγή ΚΕΦΑΛΑΙΟ 1: Τα είδη των Δικτύων 1.1. Εισαγωγή Γενικότερα δεν υπάρχει κάποια ταξινόμηση των πιθανών δικτύων κάτω από την οποία να ταιριάζουν όλα τα δίκτυα. Παρόλα αυτά η ταξινόμηση τους είθισται να γίνεται

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 10. Υπηρεσίες και εφαρμογές Διαδικτύου. ΚΕΦΑΛΑΙΟ 10 Υπηρεσίες και εφαρμογές Διαδικτύου. Α Γενικού Λυκείου

ΚΕΦΑΛΑΙΟ 10. Υπηρεσίες και εφαρμογές Διαδικτύου. ΚΕΦΑΛΑΙΟ 10 Υπηρεσίες και εφαρμογές Διαδικτύου. Α Γενικού Λυκείου Α Γενικού Λυκείου 87 Διδακτικές ενότητες 10.1 Υπηρεσίες Διαδικτύου 10.2 Ο παγκόσμιος ιστός, υπηρεσίες και εφαρμογές Διαδικτύου Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να μπορούν να διακρίνουν

Διαβάστε περισσότερα

Περιεχόμενα και προετοιμασία για τέσσερις παίκτες

Περιεχόμενα και προετοιμασία για τέσσερις παίκτες Ένα παιχνίδι του Peter Prinz για 2-4 παίκτες Σαν αρχαιολόγοι, οι παίκτες αποκτούν την γνώση που απαιτείται για να ξεκινήσουν αποστολές σε Αίγυπτο, Μεσοποταμία, Κρήτη και Ελλάδα. Ποιός έχει τη δύναμη να

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΟΔΗΓΟΣ ΑΡΧΑΡΙΩΝ. Περιεχόμενα

ΟΔΗΓΟΣ ΑΡΧΑΡΙΩΝ. Περιεχόμενα ΟΔΗΓΟΣ ΑΡΧΑΡΙΩΝ Περιεχόμενα 1) Εισαγωγή 2) Οδηγός εγγραφής στο site της PCnews 3) Βρείτε τα καλύτερα του site Γίνετε φίλοι μας στο Facebook 4) Σχετικά με τον τύπο αρχείου PDF - 1 - Εισαγωγή Καλωσορίσατε

Διαβάστε περισσότερα

ΕΠΙΣΚΟΠΗΣΗ BATTLEGROUNDS

ΕΠΙΣΚΟΠΗΣΗ BATTLEGROUNDS Τα Battlegrounds είναι μια νέα εμπειρία τουρνουά του League of Legends που σας φέρνει αντιμέτωπους με άλλες από τη χώρα σας. Αν βρίσκεστε στο επίπεδο 30, απλώς δημιουργήστε μια ομάδα πέντε ατόμων στον

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 4. Τεχνική Ανίχνευσης του. Πτυχιακή Εργασία Σελίδα 95

ΚΕΦΑΛΑΙΟ 4. Τεχνική Ανίχνευσης του. Πτυχιακή Εργασία Σελίδα 95 ΚΕΦΑΛΑΙΟ 4 Τεχνική Ανίχνευσης του ICMP Echo Spoofing Πτυχιακή Εργασία Σελίδα 95 Περιεχόμενα ΕΙΣΑΓΩΓΗ 98 ΜΕΡΟΣ Α: Έλεγχος του Icmp Echo Reply Πακέτου 103 A.1. Ανίχνευση του spoofed Icmp Echo Request Πακέτου.

Διαβάστε περισσότερα

Αριθμοκαμώματα Computer Game σε Microworlds Pro

Αριθμοκαμώματα Computer Game σε Microworlds Pro Αριθμοκαμώματα Computer Game σε Microworlds Pro Κωνσταντινίδου Βασιλική 1, Κωτσόπουλος Χρυσοβαλάντης 2 1 Μαθήτρια Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου pavloskont@gmail.com 2 Μαθητής Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου

Διαβάστε περισσότερα

Breakdance Computer Game σε Scratch.

Breakdance Computer Game σε Scratch. Breakdance Computer Game σε Scratch. Ταστίογλου Μαριάννα 1, Τραντοπούλου Μαργαρίτα 2 1 Μαθήτρια Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου atas94@otenet.gr 2 Μαθήτρια Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου daizy@in.gr Δασκαλάκης

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ. 9 κάρτες Άλλοθι. Κάθε τέτοια κάρτα αναπαριστάνει έναν χαρακτήρα του παιχνιδιού. Κάθε κάρτα έχει επίσης έναν αριθμό Κλεψύδρων (0,1 ή 2).

ΠΕΡΙΕΧΟΜΕΝΑ. 9 κάρτες Άλλοθι. Κάθε τέτοια κάρτα αναπαριστάνει έναν χαρακτήρα του παιχνιδιού. Κάθε κάρτα έχει επίσης έναν αριθμό Κλεψύδρων (0,1 ή 2). ΠΕΡΙΕΧΟΜΕΝΑ 9 πλακίδια δρόμων, τα οποία αποκαλούνται Περιοχές. Είναι διπλής όψεως και χρησιμοποιούνται σαν το ταμπλό του παιχνιδιού, το οποίο αποκαλείται Συνοικία. Στη μία πλευρά δεν υπάρχει Χαρακτήρας

Διαβάστε περισσότερα

Παιχνίδια για Κατανόηση. Μπάντμιντον

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

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER Η εφαρμογή LiveTripTraveller διατίθεται για κινητά τηλέφωνα με λειτουργικό σύστημα Android. Στο υπο-ιστοσελίδα www.livetrips.com/sources μπορείτε να κατεβάσετε την εφαρμογή

Διαβάστε περισσότερα

Πρόταση Διδασκαλίας. Ενότητα: Γ Γυμνασίου. Θέμα: Δραστηριότητες Παραγωγής Λόγου Διάρκεια: Μία διδακτική περίοδος. Α: Στόχοι. Οι μαθητές/ τριες:

Πρόταση Διδασκαλίας. Ενότητα: Γ Γυμνασίου. Θέμα: Δραστηριότητες Παραγωγής Λόγου Διάρκεια: Μία διδακτική περίοδος. Α: Στόχοι. Οι μαθητές/ τριες: Πρόταση Διδασκαλίας Ενότητα: Τάξη: 7 η - Τέχνη: Μια γλώσσα για όλους, σε όλες τις εποχές Γ Γυμνασίου Θέμα: Δραστηριότητες Παραγωγής Λόγου Διάρκεια: Μία διδακτική περίοδος Α: Στόχοι Οι μαθητές/ τριες: Να

Διαβάστε περισσότερα

Εγχειρίδιο Φοιτητή. Course Management Platform. Εισαγωγή. for Universities Ομάδα Ασύγχρονης Τηλεκπαίδευσης Παν. Μακεδονίας Σεπτέμβριος 2004

Εγχειρίδιο Φοιτητή. Course Management Platform. Εισαγωγή. for Universities Ομάδα Ασύγχρονης Τηλεκπαίδευσης Παν. Μακεδονίας Σεπτέμβριος 2004 Εγχειρίδιο Φοιτητή Εισαγωγή Η ηλεκτρονική πλατφόρμα, αποτελεί ένα ολοκληρωμένο σύστημα Ασύγχρονης Τηλεκπαίδευσης. Στόχος της είναι η παροχή υποδομών εκπαίδευσης και κατάρτισης ανεξάρτητα από τους περιοριστικούς

Διαβάστε περισσότερα

«Kάστρα και πραμάτειες- Πόλεις και βιωσιμότητα»

«Kάστρα και πραμάτειες- Πόλεις και βιωσιμότητα» «Kάστρα και πραμάτειες- Πόλεις και βιωσιμότητα» Θεματικό σεμινάριο για το Εθνικό Θεματικό Δίκτυο: «ΚΑΣΤΡΟ: Ο ΤΟΠΟΣ ΤΟ ΟΡΙΖΕΙ ΚΑΙ Ο ΑΝΘΡΩΠΟΣ ΤΟ ΧΤΙΖΕΙ» Θεσσαλονίκη 28 και 29 Ιανουαρίου 2016 ΚΠΕ Μολάων &

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Β ) Λειτουργικό Σύστημα Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

ΓΕΝΙΚΟ ΛΥΚΕΙΟ ΛΙΤΟΧΩΡΟΥ ΔΗΜΙΟΥΡΓΙΚΗ ΕΡΓΑΣΙΑ

ΓΕΝΙΚΟ ΛΥΚΕΙΟ ΛΙΤΟΧΩΡΟΥ ΔΗΜΙΟΥΡΓΙΚΗ ΕΡΓΑΣΙΑ ΓΕΝΙΚΟ ΛΥΚΕΙΟ ΛΙΤΟΧΩΡΟΥ ΔΗΜΙΟΥΡΓΙΚΗ ΕΡΓΑΣΙΑ ΤΙΤΛΟΣ: «ΕΜΠΕΙΡΙΣΜΟΣ ΚΑΙ ΑΡΙΣΤΟΤΕΛΗΣ» ΜΑΘΗΤΡΙΑ: ΠΡΙΑΜΗ ΒΑΓΙΑ, Β4 ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ: ΝΤΑΒΑΡΟΣ ΧΡΗΣΤΟΣ ΣΧΟΛΙΚΟ ΕΤΟΣ 2016 17 Περιεχόμενα ΠΕΡΙΛΗΨΗ... 3 ΕΙΣΑΓΩΓΗ...

Διαβάστε περισσότερα

1 κεντρικό ταμπλό. 1 εγχειρίδιο οδηγιών. Κύβοι μεταναστών. 25 Ιρλανδοί 25 Άγγλοι 25 Γερμανοί 25 Ιταλοί. Δείκτες πολιτικής εύνοιας

1 κεντρικό ταμπλό. 1 εγχειρίδιο οδηγιών. Κύβοι μεταναστών. 25 Ιρλανδοί 25 Άγγλοι 25 Γερμανοί 25 Ιταλοί. Δείκτες πολιτικής εύνοιας Tammany Hall ήταν η πολιτική οργάνωση που κυριαρχούσε στην πολιτική της Νέας Υόρκης, οργανώνοντας τους μεταναστευτικούς πληθυσμούς. Καθώς η επιρροή της οργάνωσης εκτείνονταν από την ίδρυσή της το 1790

Διαβάστε περισσότερα

2.5.1 Χρήση δεξιοτήτων αρχειοθέτησης για τη διατήρηση ενός καθιερωμένου συστήματος

2.5.1 Χρήση δεξιοτήτων αρχειοθέτησης για τη διατήρηση ενός καθιερωμένου συστήματος 2.5 Σύστημα αρχειοθέτησης, έγγραφα και βάσεις δεδομένων 2.5.1 Χρήση δεξιοτήτων αρχειοθέτησης για τη διατήρηση ενός καθιερωμένου συστήματος Να είναι σε θέση να διατηρήσει ένα καθιερωμένο, ηλεκτρονικό και

Διαβάστε περισσότερα

Περιεχόμενα. Πέτρα. Χρυσός. Βιβλίο. Τροφή. Πόντοι Νίκης. Ρίξιμο ξανά. Ανάλυση ενός πλακιδίου. Ονομασία Κόστος ( ή

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

Διαβάστε περισσότερα

Γνωριμία με το Διαδίκτυο και τις υπηρεσίες του

Γνωριμία με το Διαδίκτυο και τις υπηρεσίες του Γνωριμία με το Διαδίκτυο και τις υπηρεσίες του ΟΜΑΔΑ ΑΝΑΠΤΥΞΗΣ Παπαντώνη Μαρία, ΠΕ19 ΣΧΟΛΕΙΟ 9 ο Γυμνάσιο Καλλιθέας «Μάνος Χατζιδάκις» Αθήνα, Μάιος 2015 1. Συνοπτική περιγραφή της ανοιχτής εκπαιδευτικής

Διαβάστε περισσότερα

RobotArmy Περίληψη έργου

RobotArmy Περίληψη έργου RobotArmy Περίληψη έργου Στην σημερινή εποχή η ανάγκη για αυτοματοποίηση πολλών διαδικασιών γίνεται όλο και πιο έντονη. Συνέχεια ακούγονται λέξεις όπως : βελτιστοποίηση ποιότητας ζωής, αυτοματοποίηση στον

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΗ ΥΠΟΣΤΗΡΙΞΗ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΚΑΙ ΔΙΚΤΥΑΚΩΝ ΥΠΟΔΟΜΩΝ ΤΕΧΝΙΚΗ ΥΠΟΣΤΗΡΙΞΗ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΚΑΙ ΔΙΚΤΥΑΚΩΝ ΥΠΟΔΟΜΩΝ ΚΕΦΑΛΑΙΟ 1 Τρόποι και Μεθοδολογία Τεχνικής Υποστήριξης Υπολογιστικά Συστήματα Υπολογιστικό Σύστημα (Υ.Σ.) λέγεται μία πλήρης υπολογιστική

Διαβάστε περισσότερα

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

ΠΕΡΙΕΧΟΜΕΝΑ: 88 στόχοι 48 λεγεώνες 23 δείκτες ενεργοποίησης. Επτά λεγεώνες και. κατακτηθεί. Απόθεμα λεγεώνων. Στοίβα στόχων Ένα παιχνίδι του Paolo Mori για 2 έως 6 παίκτες ηλικίας 8 και άνω ΠΕΡΙΕΧΟΜΕΝΑ: 88 στόχοι 48 λεγεώνες 23 δείκτες ενεργοποίησης 12 βραβεία 1 σακουλάκι 1 μπλοκ σκορ Μπροστά σας έχετε ένα παράδειγμα του στησίματος

Διαβάστε περισσότερα

6. Πώς συνδέω τον αισθητήρα στο τηλέφωνό μου και στο GROW; Πώς ανεβάζω δεδομένα;

6. Πώς συνδέω τον αισθητήρα στο τηλέφωνό μου και στο GROW; Πώς ανεβάζω δεδομένα; Εκπαιδευτικό εγχειρίδιο αποστολής ανιχνεύσεων GROW 2017 6. Πώς συνδέω τον αισθητήρα στο τηλέφωνό μου και στο GROW; Πώς ανεβάζω δεδομένα; ΜΌΛΙΣ ΕΝΤΟΠΊΣΕΤΕ ΤΗΝ ΚΑΛΎΤΕΡΗ ΘΈΣΗ ΓΙΑ ΤΟΝ ΑΙΣΘΗΤΉΡΑ, ΕΊΝΑΙ Η ΏΡΑ

Διαβάστε περισσότερα

ΣΥΓΚΡΙΤΙΚΗ ΜΕΛΕΤΗ ΤΕΧΝΟΛΟΓΙΩΝ ΔΙΑΔΙΚΤΥΑΚΩΝ ΥΠΗΡΕΣΙΩΝ ΚΑΙ ΑΞΙΟΛΟΓΗΣΗ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ REST ΠΛΑΣΤΑΡΑΣ ΕΥΡΙΠΙΔΗΣ

ΣΥΓΚΡΙΤΙΚΗ ΜΕΛΕΤΗ ΤΕΧΝΟΛΟΓΙΩΝ ΔΙΑΔΙΚΤΥΑΚΩΝ ΥΠΗΡΕΣΙΩΝ ΚΑΙ ΑΞΙΟΛΟΓΗΣΗ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ REST ΠΛΑΣΤΑΡΑΣ ΕΥΡΙΠΙΔΗΣ ΣΥΓΚΡΙΤΙΚΗ ΜΕΛΕΤΗ ΤΕΧΝΟΛΟΓΙΩΝ ΔΙΑΔΙΚΤΥΑΚΩΝ ΥΠΗΡΕΣΙΩΝ ΚΑΙ ΑΞΙΟΛΟΓΗΣΗ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ REST ΠΛΑΣΤΑΡΑΣ ΕΥΡΙΠΙΔΗΣ ΘΕΣΣΑΛΟΝΙΚΗ, 2016 ΕΙΣΑΓΩΓΗ Μια διαδικτυακή υπηρεσία μπορεί να περιγραφεί απλά σαν μια οποιαδήποτε

Διαβάστε περισσότερα

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap Version 2.00 Επιμέλεια Σημειώσεων: Δημήτρης Κόγιας Πατρικάκης Χαράλαμπος Πίνακας περιεχομένων TELNET... 2 PING...

Διαβάστε περισσότερα

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

Παρουσίαση Περιεχομένων. Σκοπός του Παιχνιδιού. Προετοιμασία Για 2 παίκτες Έφτασε η στιγμή ο καπετάνιος Νέμο να επιλέξει ποιός θα γίνει ο πρώτος βοηθός στον Ναυτίλο. Ετοιμαστείτε να αντιμετωπίσετε τα βάθη της θάλασσας, καθώς αποδικνείετε ότι είστε ο καλύτερος σε

Διαβάστε περισσότερα