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

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

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

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

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

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

DS - Pacman. 2.1 Η calculatenextpacmanposition... 3

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων Σωτήρης Γυφτόπουλος

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΑΙΧΝΙΔΙ PACMAN 3D ΜΕ ΜΕΘΟΔΟΥΣ ΕΝΙΣΧΗΤΙΚΗΣ ΜΑΘΗΣΗΣ

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

Οδηγίες Εργασίας 1 Facility-Game

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

Ημερομηνία Ανάρτησης: 08/1/2018 Ημερομηνία Παράδοσης: - Αρχές Γλωσσών Προγραμματισμού

Αντικειμενοστρεφής Προγραμματισμός

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Πανεπιστηµιο Πειραιως Σχολη Τεχνολογιων Πληροφορικης και Επικοινωνιων Τµηµα Ψηφιακων Συστηµατων οµές εδοµένων η Εργασία

Εργαστήριο 2 - Άσκηση - Ανάλυση

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Βασικά Στοιχεία της Java

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Οντοκεντρικός Προγραμματισμός II C++ Project Xειμερινό Εξάμηνο Organisms

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Προγραμματισμός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Εισαγωγή στους Υπολογιστές

Εισαγωγή στον Προγραμματισμό

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

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

Ηλεκτρονικοί Υπολογιστές

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Value Iteration και Q- Learning για Peg Solitaire

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

Τύποι δεδομένων, τελεστές, μεταβλητές

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 27/11/11, 22:00

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

Βασικά Στοιχεία της Java

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Να το ξαναγράψετε χρησιμοποιώντας αντί για την εντολή Για Τέλος_επανάληψης: α. την εντολή Όσο Τέλος_επανάληψης

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

ΕΡΓΑΣΙΑ 3. Παίζοντας Sudoku. Ημερομηνία Ανάρτησης: 16/03/2018 Ημερομηνία Παράδοσης: 03/04/2018, 09:00

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Μπορείτε να δηλώσετε πίνακα οποιουδήποτε τύπου είτε βασικού είτε κλάσης:

ΓΡΑΜΜΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ με το EXCEL

Mεταβλητές (variables) και Σταθερές (constants)

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

3 Αλληλεπίδραση Αντικειμένων

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 2: Δείκτες & Δυναμική Ανάθεση Μνήμης

Κεφάλαιο 10 Ψηφιακά Λεξικά

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

γραπτή εξέταση στo μάθημα ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ' ΛΥΚΕΙΟΥ

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Πανεπιστήμιο Ιωαννίνων Τμήμα Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2012

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

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

turnin Lab2.hs

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

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

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


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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Transcript:

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών 3 o /5 o Εξάμηνο ΤΗΜΜΥ Α.Π.Θ 2017-2018 Δευτέρα 22 / 11 / 2017 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ DS Pac-Man Part 2 Κίνηση Pacman (0,75 βαθμοί) Στο δεύτερο παραδοτέο καλείστε να υλοποιήσετε την κίνηση του Pacman. Για να γίνει το παιχνίδι περισσότερο ενδιαφέρον, μέσα στην πλατφόρμα τοποθετήθηκαν 4 σημαίες. Σκοπός σας είναι να δημιουργήσετε μια δομή δεδομένων που θα συγκεντρώνει τις διαθέσιμες κινήσεις του Pacman στον επόμενο γύρο, καθώς και την υλοποίηση μιας συνάρτησης αξιολόγησης για την εύρεση της βέλτιστης επόμενης κίνησης με βάση διάφορα κριτήρια. Εικόνα 1: Το νέο περιβάλλον του παιχνιδιού PacMan για το δεύτερο παραδοτέο. Οι μονάδες μπορούν να κινούνται μέσα στο χώρο μόνο καθέτως και οριζοντίως (όχι διαγωνίως). Σκοπός του Pac-Man είναι να μαζέψει όλες τις σημαίες ενώ ταυτόχρονα αποφύγει τα φαντάσματα. Τα φαντάσματα από την άλλη προσπαθούν να πιάσουν τον Pac-Man. Θεωρούμε ότι ένα φάντασμα έχει πιάσει τον Pac-Man όταν οι δύο τους καταλήξουν στο ίδιο κελί ή όταν ανταλλάξουν θέσεις. Ο νέος κώδικας της πλατφόρμας περιέχει μια υλοποίηση για τα φαντάσματα, η οποία θα είναι ίδια για όλους.

ΠΡΟΣΟΧΗ!!! ΤΑ ΦΑΝΤΑΣΜΑΤΑ ΔΕΝ ΜΠΟΡΟΥΝ ΝΑ ΠΕΡΑΣΟΥΝ ΠΑΝΩ ΑΠΟ ΤΙΣ ΣΗΜΑΙΕΣ ΟΠΩΣ ΚΑΝΕΙ Ο PACMAN, ΠΡΕΠΕΙ ΝΑ ΚΑΝΟΥΝ ΤΟΝ ΚΥΚΛΟ. ΜΗΝ ΑΝΤΙΚΑΤΑΣΤΗΣΕΤΕ ΤΗΝ ΥΛΟΠΟΙΗΣΗ ΤΩΝ ΦΑΝΤΑΣΜΑΤΩΝ ΠΟΥ ΕΧΟΥΜΕ ΕΝΣΩΜΑΤΩΣΕΙ ΕΜΕΙΣ ΜΕ ΑΥΤΗ ΠΟΥ ΥΛΟΠΟΙΗΣΑΤΕ ΣΤΟ ΠΡΟΗΓΟΥΜΕΝΟ ΠΑΡΑΔΟΤΕΟ. ΘΕΛΟΥΜΕ ΟΛΟΙ ΝΑ ΕΧΟΥΝ ΤΗΝ ΙΔΙΑ ΠΛΑΤΦΟΡΜΑ. Χρήσιμες Μεταβλητές και Συναρτήσεις Για την κλάση Room: isghost():επιστρέφει true, αν στο κελί με συντεταγμένες [i, j] βρίσκεται κάποιο φάντασμα. isflag():επιστρέφει true, αν στο κελί με συντεταγμένες [i, j] βρίσκεται κάποια σημαία. iscapturedflag():επιστρέφει true, αν στο κελί με συντεταγμένες [i, j] βρίσκεται κάποια σημαία που έχει ήδη αποκτηθεί από τον Pacman. walls[k]:ο μονοδιάστατος πίνακας walls με μέγεθος τέσσερα επιστρέφει την τιμή μηδέν, αν το κελί [i,j] έχει τοίχο στην κατεύθυνση που ορίζεται από το k. Αν ο τοίχος δεν υπάρχει, η τιμή είναι 1. Σκεφτείτε το ως μια μεταβλητή που σας λέει αν μπορείτε να κινηθείτε προς εκείνη την κατεύθυνση (τιμή 1) ή δεν μπορείτε να κινηθείτε προς εκείνη την κατεύθυνση (τιμή 0). Άλλες σταθερές που θα σας φανούν χρήσιμες είναι οι εξής: int PacmanUtilities.numberOfRows: Επιστρέφει τον αριθμό των γραμμών της πίστας. int PacmanUtilities.numberOfColumns: Επιστρέφει τον αριθμό των στηλών της πίστας. int PacmanUtilities.NumberOfGhosts: Επιστρέφει τον αριθμό των φαντασμάτων. int PacmanUtilities.stepLimit: Επιστρέφει το όριο βημάτων του παιχνιδιού. Για την υλοποίηση αυτής της εργασίας, θα χρειαστείτε οπωσδήποτε την κλάση ArrayList του πακέτου java.util. Η κλάση αυτή αναπαριστά έναν δυναμικό πίνακα, του οποίου το μέγεθος δεν είναι καθορισμένο από την αρχή, αλλά μπορείτε να προσθαφαιρείτε αντικείμενα κατά βούληση. Μπορείτε να δηλώσετε τι τύπου αντικείμενα θα περιέχονται. Για παράδειγμα ένα ArrayList με αντικείμενα τύπου String θα αρχικοποιηθεί ως εξής: ArrayList<String> thisarraylist = new ArrayList <String>(); Οι μέθοδοι που προτείνεται να χρησιμοποιήσετε είναι οι εξής: void add(object o): Προσθέτει το αντικείμενο που δίνεται ως όρισμα στην ArrayList, το οποίο θα πρέπει να είναι της αντίστοιχη κλάση που έχετε δηλώσει σαν έμμεσο όρισμα στην δήλωση της ArrayList (π.χ. String παραπάνω). Δομές Δεδομένων 2 2017

Object get(int pos):επιστρέφει το αντικείμενο που βρίσκεται στην θέση που δώσαμε ως όρισμα. Η ArrayList θα πρέπει να έχει αρχικοποιηθεί για να παίρνει αντικείμενα ενός συγκεκριμένου τύπου, οπότε επιστρέφει τον συγκεκριμένο τύπο και όχι ένα απλό Object. int size():επιστρέφει το πλήθος των αντικειμένων που είναι αποθηκευμένα στην ArrayList. Κλάση Αποθήκευσης Διαθέσιμων Κινήσεων Για την υλοποίηση των διαθέσιμων κινήσεων προτείνεται η δημιουργία μιας δικής σας κλάσης με το όνομα NodeΑΕΜ1ΑΕΜ2 1, η οποία θα χρησιμοποιηθεί αυτούσια και στην Τρίτη εργασία. Η κλάση αυτή θα έχει ως μεταβλητές: 1. Την θέση του Pacman για την κίνηση αυτή. Αυτό υλοποιείται σαν δύο ξεχωριστές μεταβλητές (nodex, nodey). 2. nodemove: Την κατεύθυνση που αντιπροσωπεύει αυτή η κίνηση με τιμές: West 0 South 1 East 2 North 3 3. nodeevaluation: Την τιμή της συνάρτησης αξιολόγησης που έχετε δημιουργήσει για αυτή τη κίνηση. 4. currentghostpos: Η μεταβλητή αυτή θα αποθηκεύει την παρούσα θέση των φαντασμάτων, με παρόμοιο τρόπο με την currentpos της προηγούμενης εργασίας, δηλαδή ένας διδιάστατος πίνακας ακεραίων όπου a. Η πρώτη διάσταση θα είναι ο αριθμός του φαντάσματος ( 0 3 ). b. Η δεύτερη διάσταση θα περιλαμβάνει την τετμημένη (x, θέση 0) και την τεταγμένη (y, θέση 1) της τοποθεσίας του φαντάσματος. 5. flagpos: Οι σημαίες τοποθετούνται στην πλατφόρμα κατά την εκκίνηση και μένουν στην ίδια θέση καθ όλη την διάρκεια του γύρου. Η μεταβλητή αυτή θα είναι ένας διδιάστατος πίνακας ακεραίων όπου a. Η πρώτη διάσταση θα είναι ο αριθμός της σημαίας ( 0 3 ). b. Η δεύτερη διάσταση θα περιλαμβάνει την τετμημένη (x, θέση 0) και την τεταγμένη (y, θέση 1) της τοποθεσίας της σημαίας. 6. currentflagstatus: είναι ένας πίνακας boolean που περιλαμβάνει την τρέχουσα κατάσταση των σημαίων με δείκτη τον αριθμό της σημαίας και τιμή a. false, αν είναι ακόμα ενεργή και ο Pacman πρέπει να την αποκτήσει. b. true, αν ο Pacman την έχει αποκτήσει ήδη. Οι συναρτήσεις της κλάσης που θα πρέπει να υλοποιηθούν είναι: 1. Node(): Ένας ή περισσότεροι constructors για την κλάση σας, με διαφορετικά ορίσματα. 1 Όπου AEM1 και ΑΕΜ2 ο αριθμός μητρώου των δύο ατόμων κάθε ομάδας. Δομές Δεδομένων 3 2017

2. int[][] findghosts(): Η συνάρτηση αυτή θα πρέπει να βρίσκει την θέση των φαντασμάτων στην παρούσα κατάσταση του Maze. 3. int[][] findflags(): Η συνάρτηση αυτή θα πρέπει να βρίσκει την θέση των σημαιών στην πλατφόρμα. 4. Boolean[] checkflags(): Η συνάρτηση αυτή θα πρέπει να επιστρέφει την κατάσταση της κάθε σημαίας που βρίσκεται στην πλατφόρμα. 5. double evaluate(): η συνάρτηση αυτή θα υπολογίζει το πόσο αξιόλογη είναι η συγκεκριμένη κίνηση. Μπορείτε να φτιάξετε και άλλες μεταβλητές ή συναρτήσεις για την κλάση σας, αν το θεωρείτε απαραίτητο. Στο package gr.auth.ee.dsproject.node βρίσκεται μια πρότυπη κλάση με το όνομα Node. Θα πρέπει να την μετονομάσετε (δεξί κλικ Refactor Rename) σύμφωνα με την εκφώνηση και να υλοποιήσετε τις κατάλληλες συναρτήσεις. Εύρεση και Αξιολόγηση Διαθέσιμων Κινήσεων Η εύρεση των διαθέσιμων κινήσεων του Pacman είναι ευκολότερη από αυτή των φαντασμάτων καθώς χρειάζεται να ελέγξετε μόνο δύο πράγματα για μη επιτρεπτές κινήσεις 1. Αν ο Pacman πέφτει πάνω σε τοίχο (το όποιο είναι απαγορευμένη κίνηση). 2. Αν ο Pacman κινείται στην θέση που είναι ή που μπορεί να καταλήξει ένα φάντασμα, κάτι το οποίο οδηγεί μεν στο τέλος του παιχνιδιού, μπορεί όμως να είναι μονόδρομος σε κάποιες περιπτώσεις (πχ περικύκλωση από φαντάσματα). Το ζητούμενο είναι να δημιουργήσετε ένα ArrayList<NodeAEM1AEM2> μέσα στην συνάρτηση calculatenextpacmanposition της κλάσης Creature το οποίο να αποθηκεύει πριν από κάθε γύρο παιχνιδιού που είναι η σειρά του Pacman τις διαθέσιμες κινήσεις του, και να επιστρέφετε την κίνηση που έχει την καλύτερη απόδοση, σύμφωνα με την αξιολόγηση των κινήσεων που είναι διαθέσιμες. Η αξιολόγηση των κινήσεων μπορεί να γίνει με διάφορα κριτήρια. Κάποιες ιδέες είναι: 1) Η απόσταση του Pacman από μια σημαία που πρέπει να καταλάβει. 2) Η απόσταση του Pacman από τα φαντάσματα που τον κυνηγούν. 3) Απόσταση φαντασμάτων από την σημαία που θέλει να καταλάβει ο Pacman 4) Αν είναι προς το κέντρο ή τα άκρα του πίνακα. 5) Αν έχει τοίχους γύρω του. H συνάρτηση που θα φτιάξετε θα πρέπει να επιστρέφει μια τιμή double μέσα σε κάποια λογικά όρια (πχ -100 έως 100), η οποία θα αντιστοιχεί στην αξιολόγηση της τρέχουσας κατάστασης του παιχνιδιού. Οι αρνητικοί αριθμοί αντιστοιχούν σε καταστάσεις που ο αντίπαλος είναι σε καλύτερη θέση, ενώ οι θετικοί αντιστοιχούν σε καταστάσεις, όπου εσείς βρισκόσαστε σε καλύτερη θέση. Όσο καλύτερη κρίνεται η κατάσταση του ταμπλό, τόσο μεγαλύτερος πρέπει να είναι ο αριθμός που επιστρέφει η συνάρτηση αξιολόγησης. Δομές Δεδομένων 4 2017

Η υλοποίηση αυτής της μεθόδου είναι ελεύθερη, αλλά μπορείτε να βασιστείτε στις γενικές κατευθύνσεις που σας δίνονται παραπάνω. Όμως, ακριβώς επειδή η υλοποίηση είναι ελεύθερη, θα πρέπει να δώσετε ιδιαίτερη βαρύτητα στον σχολιασμό του κώδικα, όσο και στην λεπτομερή ανάλυση του σκεπτικού σας στην γραπτή αναφορά. Οδηγίες Τα προγράμματα θα πρέπει να υλοποιηθούν σε Java, με πλήρη τεκμηρίωση του κώδικα. Το πρόγραμμά σας πρέπει να περιέχει επικεφαλίδα σε μορφή σχολίων με τα στοιχεία σας (ονοματεπώνυμα, ΑΕΜ, τηλέφωνα και ηλεκτρονικές διευθύνσεις). Επίσης, πριν από κάθε κλάση ή μέθοδο θα υπάρχει επικεφαλίδα σε μορφή σχολίων με σύντομη περιγραφή της λειτουργικότητας του κώδικα. Στην περίπτωση των μεθόδων, πρέπει να περιγράφονται και οι μεταβλητές τους. Είναι δική σας ευθύνη η απόδειξη καλής λειτουργίας του προγράμματος. Παραδοτέα για κάθε μέρος της εργασίας 1. Ηλεκτρονική αναφορά που θα περιέχει: εξώφυλλο, περιγραφή του προβλήματος, του αλγορίθμου και των διαδικασιών που υλοποιήσατε και τυχόν ανάλυσή τους. Σε καμία περίπτωση να μην αντιγράφεται ολόκληρος ο κώδικας μέσα στην αναφορά (εννοείται ότι εξαιρούνται τμήματα κώδικα τα οποία έχουν ως στόχο τη διευκρίνιση του αλγορίθμου) Προσοχή: Ορθογραφικά και συντακτικά λάθη πληρώνονται. 2. Ένα αρχείο σε μορφή.zip με όνομα ΑΕΜ1_ΑΕΜ2_PartΒ.zip, το οποίο θα περιέχει όλο το project σας στον eclipse καθώς και το αρχείο της γραπτής αναφοράς σε pdf (αυστηρά). Το αρχείο.zip θα γίνεται upload στο site του μαθήματος. Τα ονόματα των αρχείων να είναι με λατινικούς χαρακτήρες. Προθεσμία υποβολής Κώδικας και αναφορά Παρασκευή 15 Δεκεμβρίου, 23:59 (ηλεκτρονικά) Δε θα υπάρξει καμία παρέκκλιση από την παραπάνω προθεσμία. Δομές Δεδομένων 5 2017