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

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

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

ΕΡΓΑΣΙΑ 2 - MOODLE ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ακ. Έτος ΔΙΔΑΣΚΩΝ: Π. Εφραιμίδης. Υπεύθυνος εργαστηρίου: Α. Κουτσιαμάνης

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

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

Δημιουργία μιας εφαρμογής Java με το NetBeans

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ

Εγκατάσταση Joomla 1. Στο Π.Σ.Δ. ( 2. Τοπικά 3. Σε δωρεάν Server

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

Εισαγωγή στο περιβάλλον Code::Blocks

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

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ Α2Α

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

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

Το βιβλίο διευθύνσεων των Windows

Διαχείριση Βάσης Δεδομένων (dbadmin)

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

App Inventor 3ο Μάθημα (Ζάρια - επέκταση)

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

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

του προγράμματος diagrama_rohs.zip )

Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη

Βήμα 1: Γενικά στοιχεία της εργασίας και υπεύθυνος επικοινωνίας

«Κρυπτογράφηση Εταιριών»

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

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

Εγχειρίδιο Χρήστη Φάση 1: Καταχώρηση Ειδικοτήτων

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

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

Βάσεις δεδομένων (Access)

Εφαρμογή Τελών Ακινήτων

Ο ΗΓΙΕΣ ΧΡΗΣΗΣ ΤΟΥ ΕΡΓΑΛΕΙΟΥ ΙΑΧΕΙΡΙΣΗΣ ΠΡΟΣΩΠΙΚΟΥ ΧΩΡΟΥ ΤΗΣ ALTEC SOFTWARE

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

1. Τα τμήματα της επιφάνειας εργασίας των Windows

Οδηγίες συμπλήρωσης αίτησης στην Εφαρμογή Πρόσληψης Εκτάκτου Προσωπικού.

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

Διαδικασία εγκατάστασης και ρύθμισης AUA-VPN για Windows XP/Vista/7/8

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

ΕΡΓΑΣΤΗΡΙΟ 16. Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse

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

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Διαχείριση Πληροφοριών στο Διαδίκτυο. Εργαστήριο 1

Οδηγίες Χρήσης Πλατφόρμας Ασύγχρονης Τηλεκπαίδευσης (Moodle) του Τμήματος ΔΕΤ

Εγχειρίδιο Χρήστη - Μαθητή

Προγραμματιστικό Περιβάλλον

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

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ Π.Σ. ΦΟΙΤΗΤΟΛΟΓΙΟΥ- ΓΙΑ ΤΟ ΔΙΔΑΣΚΟΝΤΑ (ClassWeb)

Εργαστήριο «Βάσεις Οικολογικών Δεδομένων και Εφαρμογές»

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων

Εννοιολογικός Χάρτης Cmap Tools

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

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Δίκτυο Διακοπής Καπνίσματος

Διαγραφή Επιλέγετε Διαγραφή για να διαγράψετε μία ήδη υπάρχουσα διαδικασία εισαγωγής ASCII

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Σχεδίαση Βάσεων Δεδομένων

Οδηγίες για προσθήκη Web Frames Tools to the Quick Access Bar σε μεταγενέστερη έκδοση του Word

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

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

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

Ανάπτυξη εφαρμογής Input-Output

Υπολογισμός και αποστολή Αναλυτικής Περιοδικής Δήλωσης

Τετράδια Κιθάρας. Χρήση του PowerTab

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 7η ΕΝΟΤΗΤΑ: ΟΡΓΑΝΩΣΗ ΧΡΟΝΟΥ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Διαχείριση Γρήγορης Καταχώρησης Πωλήσεων

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

Υπολογιστικά Συστήματα

Οδηγίες Εγκατάστασης της εφαρμογής Readium και Readium για μαθητές με αμβλυωπία για την ανάγνωση βιβλίων epub σε Υπολογιστή.

Σενάριο Χρήσης myschool

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

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

SingularLogic Σεπτέμβριος 2014

Μπορείτε τα δείτε βιντεάκι με τη διαδικασία εδώ:

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Οδηγός δημιουργίας Υποομάδων / Μαθημάτων / Χρηστών στο LAMS του ΠΣΔ

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

ΔΙΑΔΙΚΑΣΙA ΜΕΤΑΦΟΡΑΣ ΥΛΙΚΟΥ ΜΑΘΗΜΑΤΟΣ ΑΠΟ BLACKBOARD VISTA ΣΕ OPEN ECLASS

Τώρα ήρθε η ώρα για να αποκτήσετε το βασικό εργαλείο ανάπτυξης web εφαρμογών το GGTS.

ΥΠΟΒΟΛΗ ΑΝΑΛΩΣΙΜΩΝ ΥΛΙΚΩΝ

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

Visual Flowchart Γενικά

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

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

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

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

Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων Kεφάλαιο 13 Ανάλυση δεδομένων...

Περιγραφή του βασικού παραθύρου του Cubase SE3. Εικόνα 1

Πλήρης Διαχείριση Αδειών - Βιβλίο Αδειών - Μαζικές ενέργειες

Transcript:

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 2013-2014 Οδηγίες Εργασίας 1 Facility-Game Ανανεωμένος για την έκδοση v0.62 του FacilityGameProject Διδάσκων : Eπικ.Καθηγητής Παύλoς Εφραιμίδης Υπεύθυνος Φροντιστηρίου : Σωτήρης Γυφτόπουλος Επιμέλεια - Συγγραφή Σημειώσεων : Ιωάννης Κιοσσές 56173

Περιεχόμενα: Κατέβασμα των αρχείων για την Eργασία 1 Facility-Game... 2 Εισαγωγή του Facility Game στο Eclipse... 3 Δημιουργία Νέου παίκτη στο Facility Game... 11 Δημιουργία Στρατηγικής για το Facility Game... 19 Εκτέλεση του παιχνιδιού τοπικά... 27 Εκτέλεση του παιχνιδιού στον Server... 34 1

Κατέβασμα των αρχείων για την Eργασία 1 Facility-Game Με έναν φυλλομετρητή επισκεπτόμαστε την σελίδα του μαθήματος των Δομών Δεδομένων 2013-2014 http://pericles.ee.duth.gr/courses/2013-14/ds/index.html. 2

Εισαγωγή του Facility Game στο Eclipse Κατεβάζουμε το συμπιεσμένο αρχείο FacilityGameProject0.62.zip στον υπολογιστή μας. Εναλλακτικά μπορούμε να κατεβάσουμε το ίδιο αρχείο από την σελίδα του μαθήματος Δομές Δεδομένων στο eclass https://eclass.duth.gr/eclass/courses/tma392/ Ακολουθώντας την διαδρομή καταλόγων : Δομές Δεδομένων ->Έγγραφα-> Φροντιστήρια-Εργαστήρια. 3

Έχοντας κατεβάσει το αρχείο FacilityGameProject0.62.zip στον υπολογιστή μας και γνωρίζοντας την θέση του, εκτελούμε την εφαρμογή eclipse ώστε να κάνουμε Import project. Import project: Για να κάνουμε Import ένα αρχείο στο eclipse: Πηγαίνουμε File->Import 4

Στο παρακάτω παράθυρο διαλόγου κάνουμε διπλό click στον φάκελο General και από τον κατάλογο που ανοίγει επιλέγουμε Existing Project into Workspace. 5

Στο παρακάτω παράθυρο διαλόγου επιλέγουμε Select archive file και πατώντας το Browse Εισάγουμε το αρχείο FacilityGameProject0.62.zip πηγαίνοντας στον αντίστοιχο κατάλογο του υπολογιστή μας που το έχουμε αποθηκεύσει. 6

Επιλέγουμε το αρχείο FacilityGameProject0.62.zip και πατάμε το Open 7

Τέλος ελέγχουμε ότι το Project με όνομα FaciltyGame (FaciltyGame) είναι επιλεγμένο και ολοκληρώνουμε την διαδικασία του Import Project πατώντας Finish. 8

Πως κάνουμε import νέα έκδοση του project facility_game Για να κάνουμε import την τελευταία διαθέσιμη έκδοση του project μας ενώ έχουμε ήδη πραγματοποιήσει import κάποιας παλιότερης έκδοσης, θα πρέπει ή να διαγράψουμε την παλιότερη έκδοση από το workspace μας ή να κάνουμε μετονομασία της παλιάς έκδοσης. Σε διαφορετική περίπτωση θα μας βγάζει το παρακάτω μήνυμα όταν προσπαθήσουμε να κάνουμε import την νέα μας έκδοση χωρίς να έχουμε διαγράψει ή μετονομάσει την παλαιά. 9

Η μετονομασία της παλιάς έκδοσης γίνετε με τα ακόλουθα βήματα. 10

Δημιουργία Νέου παίκτη στο Facility Game 1. Κάνουμε click στο βελάκι μπροστά από τον κατάλογο του FacilityGame, ανοίγουμε τον φάκελο του πηγαίου κώδικα(src) και ανοίγουμε το πακέτο του facilitygame. Εδώ βλέπουμε όλες τις κλάσεις του πακέτου του project. 11

2. Δημιουργούμε μια νέα κλάση στο πακέτο κάνοντας Δεξί click στο πακέτο faciltygame και στην συνέχεια στο επόμενο menu επιλέγουμε Νew και κάνουμε click στο Class. 12

3. Στο παρακάτω μενού ονομάζουμε την καινούρια μας κλάση με format ονόματος OnomaEpitheto(π.χ. JohnSmith ) με τον πρώτο χαρακτήρα να είναι υποχρεωτικά κεφαλαίος. Ολοκληρώνουμε την δημιουργία της νέας μας κλάσης πατώντας το Finish 13

4. Η νέα μας κλάση είναι η παρακάτω : 5. Στην συνέχεια πηγαίνουμε αριστερά στο menu Package Explorer στον κατάλογο του πακέτο μας κάνουμε διπλό click στην κλάση ΜyFPlayer1.java Καθώς βρισκόμαστε πάνω στον κώδικα της ΜyFPlayer1.java πατάμε τα πλήκτρα ctrl+a επιλέγουμε όλες τις γραμμές του κώδικα τις αντιγράφουμε (ctrl+c) και πηγαίνουμε ξανά στη νέα κλάση (π.χ. JohnSmith.java ) που δημιουργήσαμε στο προηγούμενο βήμα, διαγράφουμε ολες τις γραμμές κώδικα που υπάρχουν και επικολλούμε (ctrl+v) στην νέα κλάση τον κώδικα της ΜyFPlayer1.java ΠΡΟΣΟΧΗ! Κατά την αντιγραφή των περιεχομένων αντιγράφονται και τα ονόματα των δηλώσεων της κλάσης και του constructor (συνάρτησης δημιουργίας). Οπότε πρέπει να τα διορθώσουμε και να δώσουμε το σωστό όνομα όπως το δηλώσαμε στην δημιουργία της κλάσης! 14

6. Διορθώνουμε το όνομα της κλάσης και του constructor ώστε να είναι ίδιο με το όνομα του αρχείου.java (π.χ. όλα JohnSmith) Διορθώνουμε το όνομα της κλάσης και του constructor : 15

7. Στη συνέχεια πρέπει να δώσουμε τα στοιχεία μας στις μεταβλητές που ορίζονται μέσα στην κλάση. Τα στοιχεία αυτά είναι: 1. Το όνομα που θα χρησιμοποιούμε στο παιχνίδι για τον παίκτη μας (playername) 2. Η έκδοση της στρατηγικής μας, σε περίπτωση που στο μέλλον θέλουμε να κάνουμε βελτιώσεις και να πετύχουμε καλύτερα αποτελέσματα (version) 3. Τον αριθμό μητρώου του φοιτητή (afm) 4. Το όνομα του φοιτητή (firstname) με ελληνικούς χαρακτήρες. 5.Το επίθετο του φοιτητή (lastname) με ελληνικούς χαρακτήρες.!!! Η αλλαγή των στοιχείων είναι υποχρεωτική για τη σωστή εκτέλεση του παιχνιδιού! 16

8. Δήλωση του παίκτη μας στο παιχνίδι Στη συνέχεια θα να κάνουμε τις απαραίτητες αλλαγές σε κάποια αρχεία για να δηλώσουμε τον παίκτη μας. Ανοίγουμε το αρχείο EnumPlayerType.java και δημιουργούμε μια νέα καταχώρηση για τον παίκτη μας δηλώνοντας ένα νέο όνομα για αυτόν. 17

Στη συνέχεια ανοίγουμε το αρχείο CreatePlayerObject.java και στη δομή της switch που περιέχεται μέσα, δημιουργούμε μια νέα case που θα συνδέει το όνομα που δηλώσαμε στο αρχείο EnumPlayerType.java με το όνομα της κλάσης του παίκτη μας 18

Δημιουργία Στρατηγικής για το Facility Game Αφού τελειώσαμε τις δηλώσεις για τον παίκτη μας στο παιχνίδι, πρέπει να δημιουργήσουμε τη στρατηγική μας. Η υλοποίηση της στρατηγικής μας γίνεται μέσα στην συνάρτηση nextmove() η οποία βρίσκετε στην κλάση του νέου παίκτη μας που δημιουργήσαμε ( π.χ. JohnSmith.java ). Η συνάρτηση αυτή επιστρέφει (return move;) σε κάθε γύρω τον αριθμό του κόμβου που θέλουμε να δεσμεύσουμε αφού κάνουμε τους ελέγχους που θέλουμε. ΠΡΟΣΟΧΗ! Οι αριθμοί των κόμβων ξεκινούν από το μηδέν (0) (π.χ. αν έχουμε δηλώσει 1012 κόμβους τότε οι κόμβοι μας αριθμούνται από 0 ως 1011) Ακόμα όταν κάνουμε μια επιλογή κόμβου θα πρέπει να είμαστε σίγουροι ότι ο κόμβος αυτός πρέπει να είναι ελεύθερος. 19

Για την υλοποίηση της στρατηγικής μας έχουμε στη διάθεσή μας μια σειρά από μεθόδους και συναρτήσεις Αρχικά στη περιοχή του κώδικα πάνω από τον constructor έχουμε την δυνατότητα να τοποθετήσουμε μεταβλητές των οποίον οι τιμές θα μπορούν να μεταβάλλονται από τις συναρτήσεις της κλάσης μας αλλά θα διατηρούν τις τιμές τους καθ όλη την διάρκεια του παιχνιδιού. Στην μέθοδό initialize() αρχικοποιούμε με κατάλληλες τιμές τις μεταβλητές που δηλώσαμε παραπάνω. 20

Χρήση συναρτήσεων για ανάπτυξη Στρατηγικής Υπάρχουν διαθέσιμες οι παρακάτω συναρτήσεις οι οποίες μπορούν να χρησιμοποιηθούν στην κλάση του παίκτη μας, μέσα ή και έξω από τη μέθοδο nextmove() Στις παραπάνω γραμμές κώδικα εκτελούνται ενδεικτικές κλήσεις των μεθόδων Η υλοποίηση των παραπάνω μεθόδων βρίσκεται στην κλάση FacilityGame.java 21

whoami(); Επιστρέφει την τιμή που μας πληροφορεί αν ήμαστε ο παίχτης Α, δηλαδή αυτός που κάνει την πρώτη κίνηση στο παιχνίδι ή ο παίχτης Β, δηλαδή αυτός που ξεκινάει δεύτερος. οι τιμές που επιστρέφει είναι PLAYER_A ή PLAYER_B τύπου EnumPlayer. whoismyopponent(); είναι η συμπληρωματική συνάρτηση της whoami(); Μας πληροφορεί αν ο αντίπαλος μας ξεκινάει πρώτος ή δεύτερο το παιχνίδι. Υλοποιείτε μέσα στην κλάση FPlayer.java. Μπορεί να κληθεί (χρησιμοποιηθεί) και στην κλάση του παίχτη μας όπως η whoami(); Καθώς η σειρά εκκίνησης των δυο παικτών θα είναι τυχαία, είναι κρίσιμο για μια καλή στρατηγική να γνωρίζουμε ποιος παίκτης ξεκινάει 1 ος. (Ο παίκτης SimpleFPlayer2 θα ξεκινάει πάντα 1 ος καθ ότι υλοποιεί απλοϊκό αλγόριθμο και βρίσκετε σε ήδη μειονεκτική θέση ) 22

Στην νέα έκδοση 0.62 του Facility Game Project έχουν προστεθεί δυο νέες μεταβλητές στην κλάση FPlayer : me και opponent Αυτές οι νέες μεταβλητές μπορούν να χρησιμοποιηθούν στην κλάση του δικού μας παίκτη (π.χ. στην JohnSmith.java) με τρόπο παρόμοιο όπως στην κλάση του παίκτη ΜyFPlayer1 Κάθε παίκτης μπορεί να χρησιμοποιεί τις μεταβλητές me και opponent για να ελέγχει εάν ένας κόμβος ανήκει στον ίδιο ή στον αντίπαλο (ανεξάρτητα από το ποιος είναι ο παίκτης Α και ποιος ο Β). Οι μεταβλητές me και opponent είναι τύπου EnumFacilityStatus. Μια εφαρμογή των παραπάνω μεταβλητών είναι να ελέγχουμε εάν κάποιος κόμβος ανήκει σε εμάς (status=me) τότε να δεσμεύουμε κάποιον από τους διπλανούς ελεύθερους κόμβους προσπαθώντας να σχηματίσουμε πλήθος συνεχόμενων κόμβων μεγαλύτερο του δυο. Στην περίπτωση που ελέγχουμε εάν κάποιος κόμβος ανήκει στον αντίπαλό μας (status=opponent) τότε μπορούμε να δεσμεύουμε κάποιον από τους διπλανούς ελεύθερους κόμβους προσπαθώντας να αποτρέψουμε τον αντίπαλο να σχηματίσει περισσότερους από δυο συνεχόμενους κόμβους 23

int game.getvalue(int i) ; Επιστρέφει μια ακέραια τιμή που αντιστοιχεί στην τιμή του περιεχομένου του κόμβου που βρίσκετε στην i-οστή θέση. Π.χ. η δήλωση getvalue(0); Επιστρέφει την τιμή που βρίσκεται στον πρώτο κόμβο. int[] game.getvalue(); Επιστρέφει σε μορφή πίνακα τις τιμές (αξίες) όλων των περιεχομένων των κόμβων του παιχνιδιού. Είναι συνάρτηση όμοια με την 1 η που περιγράψαμε αλλά αυτή δεν παίρνει καθόλου ορίσματα και τα αποτελέσματα της πρέπει να αποθηκευτούν σε ένα πίνακα. Π.χ. Αν το παιχνίδι μας έχει 1012 κόμβους, αυτή η συνάρτηση θα μας δώσει έναν πίνακα με θέσεις από 0 ως 1011 που θα περιέχει 1012 αξίες κόμβων. Μια εφαρμογή των συναρτήσεων που επιστρέφουν την αξία των κόμβων είναι να συγκρίνουμε τις αξίες τον κόμβων για την εύρεση των μεγαλύτερες εξ αυτών. EnumFacilityStatus game.getstatus (int node); επιστρέφει τιμή τύπου EnumFacilityStatus {FREE, BLOCKED, PLAYER_A, PLAYER_B}. Μας πληροφορεί αν κάποιος συγκεκριμένος κόμβος είναι FREE ή BLOCKED ή δεσμευόμενος από τον PLAYER_A ή τον PLAYER_B EnumFacilityStatus[] game.getstatus(); επιστρέφει έναν πίνακα τύπου EnumFacilityStatus. Μας δίνει την συνολική πληροφορία για την κατάσταση όλων των κόμβων του παιχνιδιού. Π.χ. Αν επιστρέψει έναν πίνακα με τιμές [PLAYER_B,BLOCKED,FREE,BLOCKED,PLAYER_A, BLOCKED,FREE] Μας πληροφορεί ότι στο παιχνίδι μας έχουμε συνολικά 7 κόμβους. ο 1 ος κόμβος είναι δεσμευμένος από τον 2 ο παίχτη, ο 2 ος κόμβος είναι μπλοκαρισμένος, ο 3 ος κόμβος 24

είναι ελεύθερος, ο 4 ος κόμβος είναι μπλοκαρισμένος,ο 5 ος κόμβος είναι δεσμευμένος από τον 1 ο παίχτη, ο 6 ος κόμβος είναι μπλοκαρισμένος και ο 7 ος κόμβος ελεύθερος. Γνωρίζοντας την κατάσταση των κόμβων ελέγχουμε ποιους κόμβους δεν μπορούμε να δεσμεύσουμε είτε γιατί είναι BLOCKED είναι γιατί είναι δεσμευμένοι από τον αντίπαλο παίκτη. int game.getcurmoveindex(); Επιστρέφει μια ακέραια τιμή που αντιστοιχεί στο πλήθος τον κινήσεων που έχουν γίνει στο παιχνίδι μέχρι την στιγμή που θα κληθεί η συνάρτηση. Γνωρίζουμε ότι το συνολικό πλήθος των κινήσεων μπορεί να είναι το πολύ Ν/2 (όπου Ν το πλήθος τον κόμβων). Κάθε στιγμή το πλήθος τον κινήσεων που έχουν γίνει ή κατ επέκταση το πιθανό πλήθος τον κινήσεων που έχουν απομείνει, μπορεί να επηρεάσει την στρατηγική που θα επιλέξουμε (επιθετική, αμυντική, συντηρητική, κ.λπ.) για την συνέχεια του παιχνιδιού. Vector<EnumPlayer> getmovebyplayer(); Επιστρέφει ένα αντικείμενο Vector* που περιέχει την πληροφορία ποιος παίκτης έκανε την κάθε κίνηση, ο πίνακας Vector περιέχει τιμές τύπου EnumPlayer δηλαδή PLAYER_A ή PLAYER_B *( πρόκειται για πίνακα με δυναμικό μέγεθος δηλαδή το πλήθος τον στοιχείων του μπορεί να μεταβάλετε κατά την διάρκεια του παιχνιδιού) The Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of a Vector can grow or shrink as needed to accommodate adding and removing items after the 25

Vector has been created. Περισσότερα για την κλάση Vector εδώ Vector<Integer> getmovelocation(); Επιστρέφει ένα αντικείμενο Vector που περιέχει την πληροφορία για το ποια θέση έχει καταληφθεί σε κάθε κίνηση των παικτών Μια εφαρμογή των συναρτήσεων getmovebyplayer(); και getmovelocation(); είναι να ελέγχουμε ποιοι κόμβοι είναι δεσμευμένοι από μας ώστε να δεσμεύουμε κόμβους δίπλα στους δικούς μας και να προσπαθούμε να πετύχουμε συνεχόμενο πλήθος δικών μας κόμβων μεγαλύτερο του δυο, ώστε να πολλαπλασιάζονται οι αξίες τον κόμβων μας αυτό αποτελεί επιθετική στρατηγική. Αντίστοιχα γνωρίζοντας ποιους κόμβους έχει δεσμεύσει ο αντίπαλος παίκτης μπορούμε να χτυπάμε τις προσπάθειες του για δέσμευση πολλαπλών διπλανών κόμβων. Αμυντική στρατηγική 26

Εκτέλεση του παιχνιδιού τοπικά Για να κάνουμε δοκιμές στη στρατηγική μας μπορούμε να εκτελέσουμε το παιχνίδι στον υπολογιστή μας. Το παιχνίδι έχει ήδη μέσα υλοποιημένες τις στρατηγικές δύο απλών παικτών: του SIMPLE_PLAYER_1 και του SIMPLE_PLAYER_2. Θα εκτελέσουμε το αρχείο FServer.java που θα υλοποιεί τη στρατηγική του αντιπάλου μας δίνοντας τις απαραίτητες παραμέτρους. 27

Για να περάσουμε τις παραμέτρους που θέλουμε κάνουμε δεξί κλικ πάνω στο Fserver.java Ακολουθούμε το menu που ανοίγουν : Fserver.java -> Run As -> Run Configurations Στο παράθυρο διαλόγου που εμφανίζεται, Κάνουμε διπλό κλικ στην επιλογή Java Application για να δημιουργήσουμε νέα καταχώρηση παραμέτρων. Στην καρτέλα Arguments της νέας καταχώρησης παραμέτρων πληκτρολογούμε στο κατάλληλο πλαίσιο τις παραμέτρους που θέλουμε. 28

Παράμετροι για τον Server Οι παράμετροι που πληκτρολογούμε είναι <PlayerType> <verbose> <port> Στο PlayerType δίνουμε όνομα του παίκτη που θέλουμε να είναι αντίπαλος του παίκτη μας π.χ. SIMPLE_PLAYER_1 Στο verbose καθορίζουμε αν το πρόγραμμα θα εμφανίζει αναλυτικά μηνύματα ή συνοπτικά (TRUE ή FALSE) Στο port καθορίζουμε σε ποια θύρα θα εκτελείται ο server (συνιστάται η θύρα 4455) 29

Πατάμε Apply στο παράθυρο και στη συνέχεια Run. Στο κάτω μέρος του περιβάλλοντος του Eclipse θα εμφανιστούν κάποια μηνύματα στην καρτέλα console Παρατηρούμε τη IP διεύθυνση του υπολογιστή μας για να τη χρησιμοποιήσουμε στις παραμέτρους του παίκτη μας. Μετά την εκτέλεση του FServer.java εκτελούμε τον παίκτη μας για να παίξει με τον αντίπαλο. Ο παίκτης μας θα εκτελεστεί με τη βοήθεια του FClient.java αφού περάσουμε τις κατάλληλες παραμέτρους. Δημιουργούμε μια καταχώρηση παραμέτρων για το αρχείο FClient.java με τον ίδιο τρόπο που δημιουργήσαμε για το FServer.java ( Δεξί κλικ πάνω στο FClient.java. Ακολουθούμε το menu που ανοίγουν FClient.java -> Run As -> Run Configurations Διπλό κλικ στο Java Application 30

Στην καρτέλα Arguments πληκτρολογούμε τις παραμέτρους για τον παίκτη μας. Οι παράμετροι για τον παίκτη Οι παράμετροι για τον παίκτη μας είναι <PlayerType> <verbose> <host> <port> <nodes> <seed> <Player_A> Το PlayerType είναι το όνομα που δώσαμε στον παίκτη μας στο EnumPlayerType (π.χ. JOHN_PLAYER_1) Το verbose είναι σχετικό με αναλυτικά ή συνοπτικά μηνύματα (TRUE ή FALSE) Το host είναι η IP του Server όπως την παρατηρήσαμε κατά την εκτέλεση του Server (π.χ. 192.168.1.66) Το port είναι η θύρα του Server (4455) Το nodes είναι το πλήθος των κόμβων (π.χ. 1012) Το seed χρησιμοποιείται για την ανάθεση αξιών στους κόμβους (π.χ. 3690) Στο Player_A μπορείτε να δηλώσετε αν θέλουμε να παίζουμε πρώτοι (PLAYER_A) ή δεύτεροι (PLAYER_B) 31

Πατάμε Apply στο παράθυρο και στη συνέχεια Run. 32

Με την εκτέλεση του FClient γίνεται η σύνδεση με τον Server και οι παίκτες εκτελούν τις κινήσεις τους. Στο κάτω μέρος του περιβάλλοντος του Eclipse θα εμφανιστούν κάποια μηνύματα στην καρτέλα console. Εκεί μπορείτε να πληροφορηθείτε για τα αποτελέσματα του παιχνιδιού το σκορ που συγκέντρωσε ο κάθε παίχτης, τις αξίες των κόμβων και τον παίχτη που τις δέσμευσε και τις κινήσεις των παικτών στις θέσεις με την σειρά εκτέλεσης. 33

Εκτέλεση του παιχνιδιού στον Server Για την εκτέλεση του παίκτη μας στον Server αλλάζουμε τις παραμέτρους που χρησιμοποιούμε για το FClient.java: Στην παράμετρο host χρησιμοποιούμε τη διεύθυνση atlas.ee.duth.gr Στην παράμετρο port μπορούμε να χρησιμοποιήσουμε τις εξής παραμέτρους: 4465 για αντίπαλο τον FPLAYER_SIMPLE_1 4466 για αντίπαλο τον SIMPLE_PLAYER_2 4467 για αντίπαλο τον FPLAYER_201112 4468 για αντίπαλο τον FPLAYER_201213A 4469 για αντίπαλο τον FPLAYER_201213Β (προτείνετε να πληκτρολογήσετε τις παραπάνω τιμές και να μην τις κάνετε copy-paste) Ιστοσελίδα μαθήματος: http://pericles.ee.duth.gr/courses/2013-2014/ds/index.html Στο eclass https://eclass.duth.gr/eclass/courses/tma392 Στο Forum deece https://www.deece.edu.gr/forum/viewforum.php?f=198 34