ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τµήµα Πληροφορικής ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ



Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής ΕΠΛ 232 Προγραμματιστικές Τεχνικές και Εργαλεία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

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

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

2.0 ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ-ΟΡΟΛΟΓΙΕΣ

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

ΕΠΛ132 Άσκηση 3 - Αρχές Προγραμματισμού ΙΙ Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

ΣΧΕΔΙΑΣΗ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΩΝ (E-CAD) ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Χ. Βέργος Καθηγητής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής ΕΠΛ 132 Αρχές Προγραμματισμού ΙΙ

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

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

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

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

Βίντεο και κινούµενα σχέδια

Εφαρμογές Πληροφορικής

Εισαγωγή στην Πληροφορική ΓΕΝΙΚΟ ΤΜΗΜΑ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ TEI ΧΑΛΚΙ ΑΣ

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

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

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

Επεξεργασία Χαρτογραφικής Εικόνας

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα

Α. Ερωτήσεις Ανάπτυξης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 131: ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I ΕΡΓΑΣΙΑ 2

Τεχνολογία Πολυμέσων. Ενότητα # 8: Αρχές κωδικοποίησης Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Μαλούτα Θεανώ Σελίδα 1

Αρχές κωδικοποίησης. Τεχνολογία Πολυμέσων και Πολυμεσικές Επικοινωνίες 08-1

ΗΥ220: Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Πανεπιστήµιο Κρήτης Χειµερινό Εξάµηνο

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

ΠΛΗΡΟΦΟΡΙΚΗ I. 7 η ΔΙΑΛΕΞΗ Γραφικά με Υπολογιστή

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

5.1 Θεωρητική εισαγωγή

Σχεδίαση με Ηλεκτρονικούς Υπολογιστές

Εισαγωγή στην επιστήμη των υπολογιστών. Υπολογιστές και Δεδομένα Κεφάλαιο 2ο Αναπαράσταση Δεδομένων

Προγραμματισμός Υπολογιστών με C++

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

Ασκήσεις Φροντιστηρίου «Υπολογιστική Νοηµοσύνη Ι» 7ο Φροντιστήριο 15/1/2008

Διάλεξη 17: Έλεγχος Λογισμικού

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι


Εικόνα. Τεχνολογία Πολυμέσων και Πολυμεσικές Επικοινωνίες 05-1

ΑΣΚΗΣΗ 2 ΒΑΣΙΚΑ ΚΑΙ ΣΥΝΘΕΤΑ ΣΗΜΑΤΑ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ - ΕΙΚΟΝΑΣ

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ψηφιακή Σχεδίαση

DIP_06 Συμπίεση εικόνας - JPEG. ΤΕΙ Κρήτης

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ231: ομές εδομένων και Αλγόριθμοι

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ, ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Α. Θα καλεί υποπρόγραμμα INPUT που θα διαβάζει τις τιμές του πίνακα MAP.

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

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

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

Επεξεργασία Χαρτογραφικής Εικόνας

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

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

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/10, 23:59

Παιδαγωγική προσέγγιση: Πρόταση για την διδασκαλία της έννοιας αλγόριθµός στο περιβάλλον MicroWorlds Pro

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

[2] Υπολογιστικά συστήματα: Στρώματα. Τύποι δεδομένων. Μπιτ. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

8.1 Θεωρητική εισαγωγή

ΟΤΑ Επιχειρησιακή Νοηµοσύνη

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

Αναπαράσταση Μη Αριθμητικών Δεδομένων

! Δεδομένα: ανεξάρτητα από τύπο και προέλευση, στον υπολογιστή υπάρχουν σε μία μορφή: 0 και 1

Αρχές κωδικοποίησης. Τεχνολογία Πολυµέσων 08-1

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

Διαδικασιακός Προγραμματισμός

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

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

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

ΕΝΟΤΗΤΑ ΤΗΛΕΟΡΑΣΗ ΕΙΣΑΓΩΓΗ

ΟΤΑ Επιχειρησιακή Νοηµοσύνη. Ενότητα: Bc1.1.6 Παρακολούθηση (monitoring) εκτέλεσης Επιχειρησιακών Διαδικασιών και εξαγωγή «µετρήσιµων» (metrics)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Αναπαράσταση δεδομένων

Σελίδα 1 από 12. Απαντήσεις στο φυλλάδιο 55. Ερώτηση 1 η : Ένα υπολογιστικό σύστηµα αποτελείται από:

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2012 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

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

Ακαδηµαϊκό Έτος , Χειµερινό Εξάµηνο ιδάσκων Καθ.: Νίκος Τσαπατσούλης

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

ΔΙΑΡΘΡΩΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ

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

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

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2012 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τµήµα Πληροφορικής ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ Άσκηση 5: Οµαδική Ανάπτυξη Σπονδυλωτού Προγράµµατος για Χαµηλού Επιπέδου Αλληλεπίδραση µε Εξοµοιωτή Παιχνιδιών Atari Διδάσκων: Δηµήτρης Ζεϊναλιπούρ Υπεύθυνοι Άσκησης: Παύλος Αντωνίου και Πύρρος Μπράτσκας Ι. Στόχος Άσκησης Ηµεροµηνία Ανάθεσης: Δευτέρα, 13/4/2015 Ηµεροµηνία Παράδοσης: Πέµπτη, 30/4/2015 (17 µέρες) (να υποβληθεί σε ένα zip στο Moodle και εκτυπωµένος στο εργαστήριο) Στόχος αυτής της άσκησης είναι να σας επιτρέψει να βάλετε µαζί όλες τις γνώσεις και αρχές που αποκτήσατε µέσω του ΕΠΛ132. Το ειδικότερο θέµα της εργασίας αφορά τη συγγραφή ενός σπονδυλωτού (modular) προγράµµατος αλληλεπίδρασης µε παιχνίδια της δηµοφιλούς κονσόλας παιχνιδιών Atari. Μέσω της εργασίας αυτής θα ακολουθήσετε τα βήµατα του Κύπριου ερευνητή τεχνητής νοηµοσύνης και ιδρυτή της εταιρείας DeepMind, Ντέµη Χασάπη, η οποία εξαγοράστηκε προσφάτως (Ιανουάριος 2014) από την Google για περίπου 625 εκατοµµύρια δολάρια. Η εταιρεία DeepMind ανέπτυξε ένα πρόγραµµα το οποίο εµπνέεται από τον τρόπο που λειτουργεί ο ανθρώπινος εγκέφαλος, και το οποίο µαθαίνει από µόνο του (self-learning) πως να παίζει τα κλασικά παιχνίδια Atari. Η µόνη πληροφορία που δίνεται στο πρόγραµµα είναι τα εικονοστοιχεία (pixels) που στέλνει η κονσόλα παιχνιδιού Atari στην οθόνη της τηλεόρασης και ο στόχος είναι το πρόγραµµα να παίζει το παιχνίδι, χωρίς προηγούµενη γνώση, για να πετύχει όσο το δυνατό µεγαλύτερο σκορ. Στην εργασία αυτή θα αναπτύξετε ένα απλό πρόγραµµα που λαµβάνει την ίδια είσοδο όπως και το σύστηµα της DeepMind και το οποίο αλληλεπιδρά µε το παιχνίδι µε κάποιο τυχαίο τρόπο. Η υλοποίηση θα γίνει σε οµάδες των τριών (3) ατόµων, όπως αυτές έχουν ανακοινωθεί µέσω του Moodle. Για την υλοποίηση της άσκησης θα χρειαστεί να χρησιµοποιήσετε τα ακόλουθα στοιχεία: 1. Βιβλιοθήκη πράκτορα επεξεργασίας και αλληλεπίδρασης παιχνιδιών Atari: Καλείστε να υλοποιήσετε κάθε µια από τις λειτουργίες του πράκτορα, οι οποίες περιγράφονται στην πορεία της εκφώνησης, ως ένα ξεχωριστό module (.c) µιας ενιαίας βιβλιοθήκης (δείτε Εικόνα 2). Νοείται ότι η βιβλιοθήκη σας δύναται να έχει όσα άλλα modules (ζεύγη.c/.h) κρίνεται σκόπιµα. Εφαρµόστε το κατάλληλο επίπεδο απόκρυψης πληροφοριών µε χρήση PRIVATE ή PUBLIC. 2. Πελάτης: Καλείστε να υλοποιήσετε ένα πελάτη ο οποίος θα συνδέεται στατικά µε τον πράκτορα για να παρουσιάζει τις λειτουργίες του. Ο πελάτης θα ήταν καλό να αποτελείται από ένα µονάχα.c αρχείο (όλες οι υπόλοιπες λειτουργίες να ενσωµατωθούν στον πράκτορα). 3. Ανάπτυξη σε Οµάδες: Για την ανάπτυξη της οµαδικής αυτής εργασίας πρέπει να χρησιµοποιηθεί το σύστηµα εκδόσεων Subversion (SVN) του τµήµατος µας. Οι οµάδες 1/13

έχουν ανακοινωθεί ήδη στο Moodle και τα µέλη των οµάδων αναµένεται να συµβάλουν ισοµερώς σε χρόνο και ουσιαστική δουλειά. Συµβουλευτείτε τη διάλεξη 18 για σύνδεση και χρήση του SVN (αυτό µπορεί να γίνει σε κατοπινό στάδιο όταν θα έχει καλυφθεί στο µάθηµα). Κάθε άτοµο µέλος οµάδας πρέπει να υποβάλλει τις αλλαγές του στο SVN σε τακτή βάση (π.χ., ηµερησίως ή πολλαπλές φορές τη εβδοµάδα) 4. Σχεδίαση Προγράµµατος: Προτρέπεται όπως η βιβλιοθήκη σας σχεδιαστεί από πάνω προς τα κάτω, αποφασίζοντας δηλαδή τα αρχεία κεφαλίδας συλλογικά και υλοποιώντας κάθε συνάρτηση ατοµικά. Η ορθότητα κάθε συνάρτησης της βιβλιοθήκης (το οποίο ονοµάζεται module στη περίπτωση µας), θα πρέπει να ελεχθεί και από τα δυο µέλη της οµάδας αλλά θα πρέπει να υλοποιείται από ένα µόνο µέλος της οµάδας (του οποίου το όνοµα θα τοποθετηθεί και ως Author στο εν λόγω αρχείο). 5. Έλεγχος Προγράµµατος: Το τελικό λογισµικό σας θα πρέπει να ελεγχθεί στατικά (κατά τη µεταγλώττιση και µε τον debugger) αλλά και δυναµικά (µε valgrind για διαρροή µνήµης, profiler gprof για εύρεση συναρτήσεων που πρέπει να βελτιστοποιηθούν). Νοείται ότι κάθε module του προγράµµατος σας θα συνοδεύεται από τους σχετικούς οδηγούς χρήσης για να γίνει το σχετικό white-box testing. 6. GPL: Για σκοπούς εξοικείωσης σας µε την ορολογία του λογισµικού ανοικτού πηγαίου κώδικα, η βιβλιοθήκη σας θα πρέπει να κάνει χρήση του GPL προοιµίου (preamble) σε κάθε αρχείο πηγαίου κώδικα της βιβλιοθήκης. Ο πελάτης θα πρέπει να ανταποκρίνεται µε το προοίµιο εάν δε δοθούν ορίσµατα (βλέπε διάλεξη 18). 7. Αξιολόγηση: Η αξιολόγηση της άσκησης θα στηριχτεί στα αναλυτικά κριτήρια που θα παρουσιαστούν στο τέλος αυτής της εκφώνησης. Μεταξύ άλλων, βασικός στόχος της άσκησης είναι να αξιολογηθεί η δοµή και οργάνωση του λογισµικού σας αλλά και επίδοση του συνολικού προγράµµατος (π.χ., πόση ώρα θα χρειαστεί να διεκπεραιώσει κάποιες λειτουργίες; Πόσο αποδοτικά χρησιµοποιείται η µνήµη; κτλ.) 8. Τελικός Διαγωνισµός: Η τελική αξιολόγηση της άσκησης, στο τελευταίο εργαστήριο, δύναται να αναδείξει ένα µικρό αριθµό οµάδων οι οποίες οµάδες θα κληθούν να παρουσιάσουν το λογισµικό τους σε ένα τελικό διαγωνισµό (ηµεροµηνίες του τελικού διαγωνισµού θα ακολουθήσουν στη συνέχεια). Οι λειτουργίες της βιβλιοθήκης σας και το αναµενόµενο αποτέλεσµα του πελάτη περιγράφονται αναλυτικότερα στην συνέχεια, αφού επεξηγηθεί πρώτα το πρόβληµα. ΙΙ. Περιγραφή Μιας και η εργασία αυτή σχετίζεται µε τα παιχνίδια τύπου Atari, επιβάλλεται µια µικρή εισαγωγή σχετικά µε την κονσόλα παιχνιδιών Atari. Η εταιρεία Atari ιδρύθηκε το 1976 και εισήγαγε το παιχνίδι Pong, ένα παιχνίδι σταθµό στο χώρο της ψηφιακής ψυχαγωγίας. Το 1977, η Atari κυκλοφόρησε την κονσόλα της µε όνοµα Video Computer System που αργότερα (αρχές της δεκαετίας του 1980) µετονοµάστηκε σε Atari 2600 (βλέπε Εικόνα 1). Εικόνα 1: Κονσόλα Παιχνιδιών Atari 2600 Τα παιχνίδια Atari έγιναν πολύ δηµοφιλή ανάµεσα στο κοινό, οπότε µετά την εµφάνιση των προσωπικών υπολογιστών δηµιουργήθηκε η ανάγκη να µεταφερθούν στο νέο αυτό περιβάλλον. Την ανάγκη αυτή καλύπτουν οι εξοµοιωτές παιχνιδιών Atari, που είναι προγράµµατα που µιµούνται τη λειτουργία της κονσόλας παιχνιδιών Atari. Οι εξοµοιωτές αυτοί τροφοδοτούνται µε αρχεία ROM (µε κατάληξη.bin). Μια εικόνα ROM (ROM image), ή αρχείο ROM, είναι ένα αρχείο 2/13

που περιέχει ένα αντίγραφο των δεδοµένων µιας κασέτας ενός βιντεοπαιχνιδιού. Ένας από τους πιο δηµοφιλής εξοµοιωτές παιχνιδιών Atari 2600 είναι ο Stella (http://stella.sourceforge.net/). Στην άσκηση αυτή θα χρησιµοποιήσουµε το Arcade Learning Environment (ALE) που είναι ένα περιβάλλον που υλοποιήθηκε στη βάση του εξοµοιωτή Stella για να επιτρέπει την αλληλεπίδραση προγραµµάτων-πρακτόρων µε παιχνίδια τύπου Atari 2600. Πριν προχωρήσετε περαιτέρω, παρακαλώ µελετήστε και εγκαταστήστε το περιβάλλον ALE χρησιµοποιώντας τις οδηγίες από τον αντίστοιχο οδηγό (ALE-manual.pdf στο as5- supplementary.zip), που αναρτήθηκαν µαζί µε την εκφώνηση. Στο πιο κάτω διάγραµµα παρουσιάζεται η αρχιτεκτονική ολόκληρου του συστήµατος της εργασίας (ΑLE, βιβλιοθήκη προγράµµατος, πρόγραµµά σας ). Όπως µπορείτε να δείτε, θα χρησιµοποιήσουµε τον εξοµοιωτή παιχνιδιών ALE ο οποίος θα λαµβάνει σαν είσοδο αρχεία παιχνιδιών Atari (rom files) και θα «τρέχει» το παιχνίδι παράγοντας πλαίσια (frames). Τα πλαίσια αυτά είναι στην ουσία οι διαδοχικές εικόνες (από pixels) που απεικονίζουν την τρέχουσα κατάσταση του παιχνιδιού. Τα πλαίσια αυτά θα λαµβάνονται από το δικό σας πράκτορα, θα τυγχάνουν επεξεργασίας και θα αποθηκεύονται σαν εικόνες σε κάποιο κατάλογο του δίσκου του υπολογιστή για να µπορούν να απεικονιστούν από κάποιο πρόγραµµα προβολής εικόνων. Ταυτόχρονα, το σύστηµά σας θα δίνει τη δυνατότητα αλληλεπίδρασης µε τον εξοµοιωτή στις περιπτώσεις που (α) κάποιος χρήστης να παίζει το παιχνίδι ή (β) να επιτρέπει στον πράκτορα να παίζει από µόνο του µε τυχαίο τρόπο. ALE Game Emulator Βιβλιοθήκη πράκτορα επεξεργασίας (Εξοµοιωτής παιχνιδιών ALE) και αλληλεπίδρασης παιχνιδιών Atari Αρχικοποίηση σύνδεσης (Φάση χειραψίας) Frames (πλαίσια) Connector Frame Decoder Module Motion Commands (Εντολές Κίνησης) π.χ. up, down, left, right Action Module BMP Engine Module Image file on disk Atari ROMs (games) Πελάτης User (χρήστης) gthumb image viewer (πρόγραµµα προβολής εικόνων) Εικόνα 2: Αρχιτεκτονική Λογισµικού Άσκησης 5 3/13

ΙΙΙ. Υποσυστήµατα Πράκτορα Πιο κάτω δίνουµε µια πιο αναλυτική περιγραφή των διάφορων υποσυστηµάτων (modules) του πράκτορα που καλείστε να υλοποιήσετε. ΙΙΙ-A. Υποσύστηµα Διασύνδεσης (Connector Module) Το υποσύστηµα αυτό αναλαµβάνει τη διασύνδεση του πράκτορα µε το πρόγραµµα ALE διεκπεραιώνοντας τη φάση της χειραψίας (handshaking) που περιγράφεται στον οδηγό εγκατάστασης και χρήσης του ALE και παρουσιάζεται οπτικά στην πιο κάτω εικόνα. www-hhh\n s,r,k,r\n Agent Εικόνα 3: Φάση χειραψίας µεταξύ προγράµµατος ALE και πράκτορα. ΙΙΙ-B. Υποσύστηµα Αποκωδικοποιητή Πλαισίων (Frame Decoder Module) Το δεύτερο υποσύστηµα του πράκτορά σας είναι ο αποκωδικοποιητής πλαισίων, ο οποίος ενεργοποιείται µετά τη φάση χειραψίας. Το υποσύστηµα αυτό θα λαµβάνει τη συµβολοσειρά: <screen_string>\n που στέλνει το πρόγραµµα ALE µετά τη φάση της χειραψίας. Όπως περιγράφηκε στον οδηγό εγκατάστασης και χρήσης του περιβάλλοντος ALE, ένα υποσύνολο της συµβολοσειράς screen string του πρώτου πλαισίου που στέλνει το πρόγραµµα ALE για το παιχνίδι boxing είναι το πιο κάτω: 0008D6980008D6980008D6980008D6980008D6980008D6280C04D63C : όπου κάθε ζεύγος δεκαεξαδικών χαρακτήρων [00-FF] αντιστοιχεί σε ένα ακέραιο αριθµό [0-255]. Η πιο πάνω συµβολοσειρά είναι κωδικοποιηµένη µε την τεχνική µήκους διαδροµής (run-length encoding). Για να εξηγήσουµε τι σηµαίνει αυτό, σκεφτείτε ότι χωρίς την χρήση οποιασδήποτε κωδικοποίησης, το screen_string έπρεπε να αποτελείται από ακολουθίες της µορφής: color color color color color color color : όπου color είναι το χρώµα ενός pixel. Αν κάθε pixel έχει µέγεθος 1 byte, τότε το κάθε χρώµα θα λάµβανε τιµές από 00 16 έως FF 16 (δηλ. από 0 10 έως 255 10 στο δεκαδικό σύστηµα). Με τη χρήση κωδικοποίησης run-length, το πρόγραµµα ALE δεν στέλνει pixels της µορφής ΧΧ (2 δεκαεξαδικοί χαρακτήρες) αλλά ζεύγη της µορφής: (color, length) (color, length) (color, length) (color, length) : Αν κάνουµε αυτό το διαχωρισµό σε ζεύγη στο πιο πάνω παράδειγµα έχουµε: (00,08)(D6,98)(00,08)(D6,98)(00,08)(D6,98)(00,08)(D6,98)(00,08)(D6,98) (00,08)(D6,28)(0C,04)(D6,3C) : Το πρώτο ζεύγος υποδηλώνει ότι τα πρώτα 08 16 (=08 10 ) pixels έχουν χρώµα 00 16 (=00 10 ). Αυτό που επιτυγχάνεται µε την κωδικοποίηση κατά run length είναι η συµπίεση των δεδοµένων που 4/13

αποστέλλονται. Δηλαδή, αντί το πρόγραµµα ALE να στείλει 8 φορές το pixel µε χρώµα 00 (ακολουθία 00 00 00 00 00 00 00 00) στέλνει 00 08. Το δεύτερο ζεύγος υποδηλώνει ότι τα επόµενα 98 16 (=152 10 ) pixels έχουν χρώµα D6 16 (=214 10 ). Τα συµπιεσµένα pixel αποστέλλονται γραµµή προς γραµµή. Για να µπορέσει κάποιος να αποσυµπιέσει τα pixels µιας εικόνας κωδικοποιηµένης κατά run-length πρέπει να αποκωδικοποιήσει κάθε τετράδα δεκαεξαδικών χαρακτήρων όπως κάναµε πιο πάνω. Μετά την αποσυµπίεση, θα έχουµε 2 x www x hhh δεκαεξαδικούς χαρακτήρες. Το επόµενο βήµα είναι να µετατρέψουµε κάθε ζεύγος δεκαεξαδικών χαρακτήρων σε ένα ακέραιο αριθµό. Μετά το βήµα αυτό θα πρέπει να προκύψουν www x hhh ακέραιοι αριθµοί που ο καθένας αντιστοιχεί σε ένα χρώµα ενός pixel. Παράδειγµα Έστω το screen string 00 03 FF 03 00 02 FF 04 κωδικοποιηµένο κατά run-length. Αν το αποσυµπιέσουµε θα λάβουµε τη συµβολοσειρά 00 00 00 FF FF FF 00 00 FF FF FF FF Αν κάνουµε τη µετατροπή σε ακέραιους αριθµούς θα έχουµε 0 0 0 255 255 255 0 0 255 255 255 255 Έστω ότι το χρώµα 0 είναι το µαύρο και το χρώµα 255 είναι το κόκκινο τότε το αρχικό screen string απεικονίζει ένα πλαίσιο 12 pixels, µε πλάτος 4 pixels (www=004) και ύψος 3 pixels (hhh=003). Το πλαίσιο αυτό είναι το πιο κάτω: www hhh Εικόνα 4: Παράδειγµα πλαισίου. Το τελευταίο βήµα για να λάβουµε την πιο πάνω εικόνα ήταν η αντιστοίχιση των ακέραιων αριθµών σε χρώµατα. Στην άσκηση αυτή θα υποθέσουµε ότι το κάθε χρώµα έχει 3 χρωµατικές συνιστώσες: RGB (R: Red, G: Green, B: Blue). Άρα το τελευταίο βήµα του παρόντος υποσυστήµατος είναι η µετατροπή του κάθε ακέραιου αριθµού στις 3 βασικές χρωµατικές συνιστώσες του έτσι να µπορούµε στη συνέχεια, όταν χρειαστεί, να αποθηκεύουµε το πλαίσιο σαν εικόνα στο δίσκο. Για το σηµείο αυτό ακολουθεί περαιτέρω συζήτηση. Η αποθήκευση του πλαισίου σαν εικόνα στο δίσκο είναι εργασία την οποία θα διεκπεραιώνει το υποσύστηµα Πλαισίωσης Εικόνων BMP. Γνωρίζουµε ότι κάθε εικόνα αποτελείται από ένα αριθµό pixels. Θεωρήστε για παράδειγµα τον 3x4 πίνακα από pixels της Εικόνα 5. Αν δώσουµε κάποιο χρώµα σε κάθε τετράγωνο τότε θα 5/13

δηµιουργηθεί κάποια εικόνα. Αν είχαµε ένα µεγαλύτερο πίνακα και µια µεγάλη παλέτα (συλλογή) χρωµάτων, τότε θα µπορούσαµε να φτιάξουµε µια εικόνα όπως αυτή που παρουσιάζεται στην Εικόνα 6. 1 2 3 4 5 6 7 8 9 10 11 12 Εικόνα 5: 3x4.bmp 6/13 Εικόνα 6 Βασικό χαρακτηριστικό µιας εικόνας είναι το βάθος χρώµατος (color depth). Με τον όρο αυτό αναφερόµαστε στο πλήθος των διαφορετικών χρωµάτων από τα οποία µπορούν να επιλεγούν τα χρώµατα ενός pixel. Οι τυπικές περιπτώσεις είναι οι εξής: Βάθος χρώµατος Πλήθος χρωµάτων 1 bit 2 διαθέσιµα χρώµατα (2 1 ) 4 bits 16 διαθέσιµα χρώµατα (2 4 ) 8 bits ή 1 byte 256 διαθέσιµα χρώµατα (2 8 ) 16 bits ή 2 bytes 65.536 χρώµατα (2 16 ) 24 bits ή 3 bytes 16.777.216 χρώµατα (2 24 ) 32 bits ή 4 bytes 4.294.967.296 χρώµατα (2 32 ) Στην παρούσα εργασία θα ασχοληθούµε µόνο µε εικόνες βάθους χρώµατος 24 bits στις οποίες η κατανοµή χρωµάτων για το κάθε pixel είναι πάντα η ίδια για το R, G, B, δηλαδή 1 byte για το κάθε χρώµα, οπότε 3 bytes συνολικά. Όπως είπαµε προηγουµένως, ο αποκωδικοποιητής πλαισίων πρέπει να µετατρέψει τον κάθε ακέραιο αριθµό στις 3 χρωµατικές συνιστώσες του. Οπότε µε άλλα λόγια, αν θέλουµε να δηµιουργήσουµε εικόνες µε βάθος χρώµατος 24 bits πρέπει ο κάθε ακέραιος αριθµός να αντικατασταθεί από 3 bytes. Οπότε η εικόνα θα αποθηκευτεί σε ένα πίνακα 2 διαστάσεων (unsigned char image[ ][ ]) µε πλάτος 3 x www και ύψος hhh. Για τη λειτουργία αυτή θα χρειαζόµαστε µια παλέτα (palette) χρωµάτων που αντιστοιχεί κάθε ακέραιο σε RGB χρωµατικές συνιστώσες. Η κονσόλα Atari 2600 χρησιµοποιεί 3 διαφορετικές παλέτες που εξαρτώνται τη µορφή του αναλογικού συστήµατος τηλεόρασης: (i) NTSC (Αµερική/Καναδά), (ii) SECAM (Ανατολική Ευρώπή/Γαλλία/Ελλάδα) και (iii) PAL (Δυτική Ευρώπη/Κύπρος/Αυστραλία). Κατά συνέπεια, υπάρχουν 3 αντίστοιχες διαφορετικές χρωµατικές παλέτες για το Atari 2600. Στην παρούσα άσκηση θα χρησιµοποιήσουµε µόνο τις παλέτες NTSC και SECAM. Για κάθε παλέτα δίνεται ένα αρχείο που περιέχει ένα πίνακα 256 θέσεων (δείτε ntscpalette.h και secampalette.h στον κατάλογο /palettes µέσα στο αρχείο as5-supplementary.zip). Σε κάθε θέση του πίνακα βρίσκεται ένα χρώµα. Κάθε χρώµα περιλαµβάνει τις 3 χρωµατικές συνιστώσες (R, G, B). Για παράδειγµα:

ntsccolorpalette[254] = 0xfce070 όπου το fc είναι η συνιστώσα του κόκκινου χρώµατος (R), e0 είναι η συνιστώσα του πράσινου χρώµατος (G) και 70 είναι η συνιστώσα του µπλε χρώµατος (B). Παράδειγµα Αν η αποσυµπιεσµένη ακολουθία ακεραίων του screen string είναι η πιο κάτω: 254 255 125 0 0 25 50 155 244 τότε ο πρώτος ακέραιος (δηλ. το 254) αντιστοιχεί στο χρώµα που βρίσκεται στη θέση 254 της παλέτας (έστω NTSC palette) το οποίο είναι το 0xfce070. Οπότε στις πρώτες 3 θέσεις του πίνακα δύο διαστάσεων image (που είδαµε προηγουµένως) θα µπουν τα εξής: image[0][0] = 0xfc image[0][1] = 0xe0 image[0][2] = 0x70 Δείτε στην πιο κάτω εικόνα πως φαίνεται το παιχνίδι boxing σε καθεµιά από τις 2 αυτές παλέτες. Boxing µε χρήση της παλέτας NTSC Boxing µε χρήση της παλέτας SECAM Εικόνα 7: Το παιχνίδι Boxing µε χρήση διαφορετικών παλετών. Για να υπάρχει συµβατότητα µε το πρότυπο BMP, θα πρέπει τα pixel της εικόνας να αποθηκεύονται γραµµή προς γραµµή ξεκινώντας από τη τελευταία και πηγαίνοντας προς τα πάνω (βλέπε Εικόνα 3 και παράγραφο «Δοµή του DATA σε Αρχεία ΒΜP» που δίνεται στον οδηγό του προτύπου BMP (BMP-manual.pdf). Ο πίνακας που περιέχει τα pixels της εικόνας θα περάσει στη συνέχεια σαν είσοδος στο υποσύστηµα πλαισίωσης εικόνων για να αποθηκευτεί σε αρχείο µέσα στο δίσκο. Λειτουργίες Αποκωδικοποιητή Πλαισίων Έστω ότι agent.a είναι ο πράκτορας που θα δηµιουργήσετε (που µέχρι στιγµής θα περιέχει τα υποσυστήµατα διασύνδεσης και αποκωδικοποιητή πλαισίων) και client.c ο πελάτης, τότε client είναι το εκτελέσιµο αρχείο που παράγεται συνδέοντας το agent.a µε το client.c κατά την µεταγλώττιση (υποστηριζόµενα αρχεία ROM υπάρχουν στον κατάλογο /rom µέσα στο αρχείο as5-supplementary.zip). Πιο κάτω περιγράφεται η αναµενόµενη λειτουργία του πράκτορα κάνοντας αναφορά στις λειτουργίες του µέσω υποδειγµατικών εκτελέσεων του πελάτη. 7/13

H γενική µορφή εκτέλεσης του πελάτη είναι η ακόλουθη: $./client <-module> <operation> όπου το module σχετίζεται µε ένα συγκεκριµένο υποσύστηµα του πράκτορα και το operation είναι µια λειτουργία του υποσυστήµατος. Για το παρόν υποσύστηµα, θα χρησιµοποιήσουµε το όρισµα -decoder. Για τις πιο κάτω δύο λειτουργίες, το υποσύστηµα αποκωδικοποίησης πλαισίων να χρησιµοποιεί ΜΟΝΟ το πρώτο πλαίσιο που ανακτά από το πρόγραµµα ALE. Λειτουργία 1: Αποσυµπίεση συµβολοσειράς κωδικοποιηµένης κατά run-length Με τη λειτουργία αυτή, ο πελάτης (αφού καλέσει επιτυχώς το υποσύστηµα διασύνδεσης) θα ζητά από τον αποκωδικοποιητή πλαισίων να αποσυµπιέσει το πρώτο screen string που λαµβάνει από το πρόγραµµα ALE και να γράψει τους δεκαεξαδικούς χαρακτήρες στο αρχείο decoded.txt (οι δεκαεξαδικοί χαρακτήρες να τυπώνονται ανά ζεύγος µε κενό ενδιάµεσα). Παράδειγµα εκτέλεσης: $./client -decoder decode decoded.txt Για να ελέγξετε τα αποτελέσµατα της λειτουργίας αυτής, σας δίνεται το αρχείο decoded.txt (που αντιστοιχεί στο πρώτο πλαίσιο του παιχνιδιού boxing) στον κατάλογο /test µέσα στο αρχείο as5-supplementary.zip. Λειτουργία 2: Αντιστοίχιση σε παλέτες Με τη λειτουργία αυτή, ο πελάτης (αφού αποσυµπιέσει το πρώτο screen string όπως έκανε και στη λειτουργία 1) θα κάνει την µετατροπή των δεκαεξαδικών χαρακτήρων σε ακέραιους αριθµούς και στη συνέχεια την αντιστοίχιση σε χρώµατα µε βάση τη ζητούµενη παλέτα. Το αποτέλεσµα (ο πίνακας 2 διαστάσεων µε πλάτος 3 x www και ύψος hhh) να γράφει σε αντίστοιχο αρχείο (ένα ακέραιο για κάθε θέση του πίνακα). Παραδείγµατα εκτέλεσης: $./client -decoder ntsc ntsc.txt $./client -decoder secam secam.txt Για να ελέγξετε τα αποτελέσµατα της λειτουργίας αυτής, σας δίνονται τα αρχεία ntsc.txt και secam.txt στον κατάλογο /test µέσα στο αρχείο as5-supplementary.zip. 8/13

ΙΙΙ-Γ. Υποσύστηµα Πλαισίωσης Εικόνων BMP (BMP Engine Module) Πριν προχωρήσετε περαιτέρω, σας συνιστούµε να µελετήσετε το πρότυπο BMP από τον αντίστοιχο οδηγό (BMP-manual.pdf στο as5-supplementary.zip). Λειτουργίες Πλαισίωσης Εικόνων BMP Για το παρόν υποσύστηµα, θα χρησιµοποιήσουµε το όρισµα -bmp. Για τις πιο κάτω τέσσερις λειτουργίες, να χρησιµοποιείται ΜΟΝΟ το πρώτο πλαίσιο που ανακτά από το πρόγραµµα ALE. Λειτουργία 3: Μετατροπή πλαισίου σε BMP Η λειτουργία αυτή βασίζεται στις συναρτήσεις που υλοποιήθηκαν για τις Λειτουργίες 1 και 2. Με άλλα λόγια, ο πελάτης θα καλέσει αρχικά τα υποσυστήµατα διασύνδεσης και κωδικοποίησης για σύνδεση µε το πρόγραµµα ALE, ανάκτηση screen string πρώτου πλαισίου και αποκωδικοποίηση (αποσυµπίεση, αντιστοίχιση). Στη συνέχεια, ο πελάτης θα ζητά από το υποσύστηµα πλαισίωσης να µετατρέψει το πρώτο screen string που λαµβάνεται από το πρόγραµµα ALE σε εικόνα BMP και να την αποθηκεύσει στο δίσκο µε το όνοµα που θα δίνεται στη γραµµή εντολών (βλέπε Εικόνα 2). Δίνεται σαν όρισµα η παλέτα που θα χρησιµοποιηθεί από το υποσύστηµα αποκωδικοποίησης. Παραδείγµατα εκτέλεσης: $./client -bmp ntsc ntsc2bmp.bmp $./client -bmp secam secam2bmp.bmp Λειτουργία 4: Εκτύπωση κεφαλίδας αρχείου BMP Με τη λειτουργία αυτή, ο πελάτης θα ζητά από το υποσύστηµα πλαισίωσης να εκτυπώσει την κεφαλίδα του αρχείου bmp που δίνεται στη γραµµή εντολών. Παραδείγµατα εκτέλεσης: $./client -bmp list 4x3.bmp BITMAP_FILE_HEADER ================== bftype: BM bfsize: 104 bfreserved1: 0 bfreserved2: 0 bfoffbits: 54 BITMAP_INFO_HEADER ================== bisize: 40 biwidth: 3 biheight: 4 biplanes: 1 bibitcount: 24 bicompression: 0 bisizeimage: 50 bixpelspermeter: 2834 biypelspermeter: 2834 biclrused: 0 biclrimportant: 0 9/13

Λειτουργία 5: Φίλτρο Grayscale Η λειτουργία αυτή να υλοποιηθεί µε τη λογική της λειτουργίας 3. Ο πελάτης θα ζητά από το υποσύστηµα πλαισίωσης να µετατρέψει το πρώτο screen string που λαµβάνεται από το πρόγραµµα ALE σε εικόνα BMP στις αποχρώσεις του γκρίζου (grayscale) και να την αποθηκεύσει στο δίσκο µε το όνοµα που θα δίνεται στη γραµµή εντολών Παράδειγµα εκτέλεσης: $./client -bmp grayscale grayframe.bmp Με τη λειτουργία αυτή θα µετατρέπεται το χρώµα του κάθε pixel σε αποχρώσεις του γκρίζου. Για να γίνει αυτό κατορθωτό θα πρέπει κάθε pixel να µετατρέπεται µε την ακόλουθη λογική: Κάθε pixel καταλαµβάνει 3 bytes (εφόσον χρησιµοποιείται 24bit βάθος χρώµατος). Ειδικότερα, τα bytes αυτά κατανέµονται ως ακολούθως: red=1 byte, green=1 byte, blue=1 byte. Τα bytes αυτά πολλαπλασιάζονται χρησιµοποιώντας την NTSC (National Television System Committee) εξίσωση: 0.299*red + 0.587*green + 0.114*blue. Το στρογγυλοποιηµένο αποτέλεσµα της NTSC εξίσωσης πάνω σε κάθε επί µέρους 3-byte RGB ακολουθία του αρχείου θα ονοµάζεται απόλυτη φωτεινότητα (luminance). Για παράδειγµα για ένα pixel RGB=(9,90,160), το luminance είναι 0.299*9 + 0.587*90 + 0.114*160 = 73,761. Συνεπώς, η γκρίζα έκδοση του pixel πρέπει να είναι (74,74,74). Εάν επαναλάβουµε την πιο πάνω εξίσωση για όλα τα pixel µιας εικόνας θα έχουµε το ακόλουθο αποτέλεσµα. grayframe.bmp Λειτουργία 6: Μετασχηµατισµός zoom in Η λειτουργία αυτή να υλοποιηθεί µε τη λογική της λειτουργίας 3. Ο πελάτης θα ζητά από το υποσύστηµα πλαισίωσης εικόνων BMP να µεγεθύνει την εικόνα του πρώτου screen string που λαµβάνεται από το πρόγραµµα ALE στο 200% απλά αντιγράφοντας κάθε pixel σε µια γειτονιά 4 pixel όπως φαίνεται στο πιο κάτω σχήµα. Με άλλα λόγια, η λειτουργία zoom in δηµιουργεί για κάθε ένα pixel της αρχικής εικόνας άλλα 3 pixel ακριβώς τα ίδια. Ιδιαίτερη προσοχή θα πρέπει να επιδείξετε στο γεγονός ότι κάποια πεδία της κεφαλίδας του BMP αλλάζουν τιµή. 10/13

Παράδειγµα εκτέλεσης: $./client -bmp zoomin zoominframe.bmp zoominframe.bmp 11/13

ΙΙΙ-Δ. Υποσύστηµα Δράσης (Action Module) Η λειτουργία του υποσυστήµατος δράσης σας θα καθοδηγείται από τον χρήστη. Υπάρχουν 2 λειτουργίες που πρέπει να υποστηρίζει το υποσύστηµα αυτό: (α) ο χρήστης να επιλέξει να παίξει το παιχνίδι επιλέγοντας τις κινήσεις που θέλει (χειρονακτική δράση) ή (β) ο χρήστης να εξουσιοδοτήσει το σύστηµα δράσης να παίξει το παιχνίδι µε χρήση τυχαίων κινήσεων (αυτόµατη τυχαία δράση). Λειτουργίες Υποσυστήµατος Δράσης Για το παρόν υποσύστηµα, θα χρησιµοποιήσουµε το όρισµα -action. Λειτουργία 7: Χειρονακτική Δράση Παράδειγµα εκτέλεσης: $./client -action manually frame.bmp Όταν δοθεί το όρισµα manually ο πελάτης θα εκτυπώνει στην οθόνη αρχικά µια λίστα µε τις δυνατές ενέργειες του παίχτη (δείτε Πίνακα 1 στο αρχείο ALE-manual.pdf) µαζί µε τον αντίστοιχο χαρακτήρα της κάθε ενέργειας (µπορείτε να χρησιµοποιήσετε δική σας αντιστοίχιση ενεργειών σε πλήκτρα) και ο χρήστης θα δίνει το χαρακτήρα της ενέργειας που επιθυµεί. Ο πελάτης θα µεταβιβάζει την επιλογή του χρήστη στο υποσύστηµα δράσης για να τον προωθήσει στο πρόγραµµα ALE. Το πρόγραµµα ALE θα στέλνει το screen string, το υποσύστηµα αποκωδικοποιητή πλαισίων θα το αποκωδικοποιεί και το υποσύστηµα πλαισίωσης θα δηµιουργεί την εικόνα BMP και θα την γράφει στο δίσκο. Την εικόνα αυτή µπορείτε να την ανοίξετε µε το πρόγραµµα gthumb image viewer. Κάθε φορά που θα στέλνει νέα ενέργεια ο χρήστης και θα αλλάζει το πλαίσιο του παιχνιδιού που στέλνει το πρόγραµµα ALE θα γίνεται αυτόµατα ενηµέρωση της εικόνας πάνω στον gthumb image viewer (το οποίο στη καλύτερη περίπτωση µπορεί να δείχνει το νέο πλαίσιο 3-4 δευτερόλεπτα). Λειτουργία 8: Αυτόµατη (Τυχαία) Δράση Παράδειγµα εκτέλεσης: $./client -action random frame.bmp Όταν δοθεί το όρισµα random ο πελάτης θα εξουσιοδοτεί το υποσύστηµα δράσης να παίξει το παιχνίδι µε χρήση τυχαίων κινήσεων. Ο χρήστης µπορεί να παρακολουθεί την εξέλιξη του παιχνιδιού πάνω στον gthumb image viewer. IV. Ενδεχόµενα Λάθη Το πρόγραµµα ALE δεν είναι σε λειτουργία όταν ο πράκτορας εκτελεί λειτουργία που απαιτεί την αλληλεπίδραση µε το πρόγραµµα ALE: Πρέπει να εκτυπώνεται το GPL προοίµιο και στη συνέχεια να δίνεται το σχετικό µήνυµα λάθους. Δεν ορίζεται module ή δεν ορίζεται operation ή δεν ορίζεται όνοµα αρχείου στην γραµµή εντολών: Πρέπει να εκτυπώνεται το GPL προοίµιο και στη συνέχεια να δίνεται το σχετικό µήνυµα λάθους. V. Εξέταση Εργασίας και Τελικός Διαγωνισµός Κατά την διάρκεια του τελευταίου εργαστηρίου θα γίνει η εξέταση της εργασίας κατά το οποίο θα πρέπει να γίνει η επίδειξη της σχεδίασης και υλοποίησης της βιβλιοθήκης και του πελάτη σας απ όλα τα µέλη της οµάδας. Τυχούσα παράληψη παρουσίασης της εργασίας ενδέχεται να συνεπάγεται τον µηδενισµό της εργασίας. Στοιχεία τα οποία ληφθούν υπόψη στην αξιολόγηση της εργασίας σας περιλαµβάνουν: ορθότητα λειτουργίας, στοιχεία επίδοσης: π.χ., 12/13

ελαχιστοποίηση του χρόνου απόκρισης σε αιτήσεις, το οποίο ορίζεται ως το διάστηµα µεταξύ της χρονικής στιγµής που γίνεται η αίτηση και της στιγµής που διεκπεραιώνεται µια λειτουργία, σχεδίαση µονάδων λογισµικού και της βιβλιοθήκης ευρύτερα. Στοιχεία από Προηγούµενες Εργασίες: 1. Ανάπτυξη του προγράµµατος σε eclipse CDT IDE. Το πρόγραµµα πρέπει να µεταγλωττίζεται τόσο µέσω του eclipse όσο και µέσω της γραµµής εντολής µε το makefile. Κάθε αντικείµενο (module) πρέπει να συµπεριλαµβάνει τους σχετικό οδηγό χρήσης (driver functions, δείτε διάλεξη 12). Οι οµάδες µπορεί να χρησιµοποιήσουν τους οδηγούς χρήσης όπως επεξηγήθηκε στο µάθηµα. 2. Σχόλια και οδηγό σχολίων µε χρήση του doxygen αλλά και διάγραµµα εξαρτήσεων αντικειµένων µε χρήση του graphviz. Για χρήση των διαγραµµάτων στο eclipse του Η/Υ σας µπορείτε να χρησιµοποιήσετε το Eclox (βλέπε διάλεξη 16) Κριτήρια αξιολόγησης: Υλοποίηση Πελάτη 10 Λειτουργία 1 Run-length αποσυµπίεση 10 Λειτουργία 2 Αντιστοίχιση πλαισίων σε παλέτες 10 Λειτουργία 3 Μετατροπή Πλαισίων σε BMP 10 Λειτουργία 4 Εκτύπωση κεφαλίδας BMP 10 Λειτουργία 5 Φίλτρο Grayscale 5 Λειτουργία 6 Μετασχηµατισµός Zoom In 10 Λειτουργία 7 Χειρονακτική Καθοδήγηση Πράκτορα 10 Λειτουργία 8 Τυχαία Καθοδήγηση Πράκτορα 5 Γενική εικόνα (στοιχισµένος και ευανάγνωστος κώδικας, 10 εύστοχα ονόµατα µεταβλητών, σταθερών και συναρτήσεων, σχολιασµός) GPL Προοίµια, Σχεδίαση Προγράµµατος, Χρήση SVN, gprof 10 report, valgrind report ΣΥΝΟΛΟ 100 10 (Προαιρετικό) Επιπλέον λειτουργίες στο 7 & 8 που τυγχάνουν να έχουν ενδιαφέρον, πολυπλοκότητα και σκοπό (π.χ., λειτουργία αυτόµατης µη-τυχαίας δράσης στη βάση κάποιας στρατηγικής µε σχετική επεξήγηση, κτλ.) Καλή Επιτυχία! 13/13