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

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

ΗΜΙΟΥΡΓΙΑ ΠΑΙΧΝΙ ΙΟΥ ΣΤΟ SCRATCH ΒΗΜΑ ΠΡΟΣ ΒΗΜΑ

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

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

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

18.ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 1 Δραστηριότητα 1

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

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

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

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

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

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

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

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

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

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

Ελέγξτε την ταινία σας

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

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

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

ΠΑΡΑΡΤΗΜΑ IV. ΔΙΔΑΚΤΙΚΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΡΑΡΤΗΜΑ IV Ασκήσεις για το Robolab

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

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

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

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

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

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

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

α) Πώς παίρνουμε αποφάσεις στην καθημερινή μας ζωή; Συμπληρώσετε τον παρακάτω πίνακα: τότε

Η εντολή «επανέλαβε Χ»

Σελίδα.1/1

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

Slalom Race Computer Game on Scratch

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

CONTROLLER KB SERIES

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

Οδηγίες Χρήσης Εφαρμογής

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

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

G-Scan Λειτουργία Χειρισμού Εξ Αποστάσεως.

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

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

for for for for( . */

Δημιουργία παρουσιάσεων με το PowerPoint

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

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

Γενικό Λύκειο Κρουσώνα - Σχολικό έτος Εκπαιδευτικός: Παπαδάκης Σταµάτης

VOICE MODULE Πλακέτα χειρισμού / τηλεφωνητή Ο ΗΓΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. ΟΛΟΚΛΗΡΩΜΕΝΗ ΣΕΙΡΑ ΣΥΣΤΗΜΑΤΩΝ ΣΥΝΑΓΕΡΜΟΥ IDS HELLAS

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

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

Equal Society e-learning platform

Ο ΗΓΙΕΣ ΛΕΙΤΟΥΡΓΙΑΣ. Τοποθέτηση και αντικατάσταση των µπαταριών. Γενικές πληροφορίες. Περιγραφή λειτουργίας. ruwido s_4 τηλεχειριστήριο γενικής χρήσης

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

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

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

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

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

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

Πίστας Αγώνα Αρχικών Στοιχημάτων Βοηθήματος Παικτών Πρώτου Παίκτη Τούρμπο Πρώτο στοίχημα: Κατασκευή της πίστας:

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

ο σκύλος που τρέχει (Μπορούσε ο σκύλος της προηγούμενης εργασίας να κινηθεί;)

Breakdance Computer Game σε Scratch.

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

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Tank Rescue Computer Game σε Scratch

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

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

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

Copyright 2017 HP Development Company, L.P.

Οδηγίες Χρήσης.

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

Ανακύκλωσε το Computer Game σε Scratch

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

επανάληψης» υπάρχουν;

4 ο ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΓΕΝΙΚΟΣ ΣΚΟΠΟΣ :

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

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

Τα Βασικά. Τι είναι όλα αυτά που βλέπω;

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

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

PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ"

Τυχαίοι αριθμοί ρίξε μια «ζαριά»

Κατερίνα Χατζηφωτεινού. Αλγοριθμικά παιχνίδια & Kodu

Εφέ επικάλυψης χρησιμοποιώντας χρονικές καθυστερήσεις

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

Τα αλφαριθμητικά αποτελούνται από γράμματα, λέξεις ή άλλους χαρακτήρες (π.χ. μήλο, Ιούλιος 2009, You win!).

Microsoft PowerPoint 2007

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

BeoSound 9000 Οδηγ ς

Προτεινόμενες εργασίες Προγραμματισμού Διαδικτύου

6.0 SETUP MENU (Μενού ρυθµίσεων)

Περιεχόμενα Ορισμός και λειτουργία των μηχανών Turing Θεωρία Υπολογισμού Ενότητα 20: Μηχανές Turing: Σύνθεση και Υπολογισμοί Επ. Καθ. Π. Κατσαρός Τμήμ

scanf() scanf() stdin scanf() printf() int float double %lf float

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

Πανεπιστήµιο Θεσσαλίας

Transcript:

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟ ΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Άσκηση 2 Προγραµµατισµός Συστήµατος 2007-08 (Προθεσµία 27/11 18:00) Γράψιµο ενός παιχνιδιού PacMan σε τερµατικό. Στόχος: Εξοικείωση µε χρήση σηµάτων (signals) και χρονοµέτρων (timers). Το παιχνίδι θα επιτρέπει στο χρήστη να ελέγχει τον Pacman χρησιµοποιώντας το πληκτρολόγιο. Κάθε µικρή χρονική περίοδος το παιχνίδι πρέπει να κινήσει τα ελεγχόµενα από τον υπολογιστή φαντάσµατα κατά τρόπο ευφυή (δηλ. να το κάνετε να µοιάσει σαν να κυνηγάνε τον Pacman). Η γραφική απεικόνιση θα γίνει χρησιµοποιώντας το παρακάτω κείµενο: Με ένα C για τον Pacman Με ένα G για κάθε ένα από τα 4 φαντάσµατα Με ένα. για κάθε κανονικού σηµείου που ο Pacman µπορεί να φάει Με ένα P για κάθε Χάπι ύναµης, το οποίο όταν φάει ο Pacman του δίνει τη δύναµη να φάει τα φαντάσµατα για µια µικρή χρονική περίοδο (5 δευτερόλεπτα). Με ένα W για κάθε τοίχο Με ένα w για το σπίτι των φαντασµάτων Με ένα κενό χαρακτήρα για κάθε σηµείο που ο Pacman δεν παίρνει πόντους αν φάει Στο µάθηµα διδαχτήκαµε πώς µπορούµε να απεικονίσουµε χαρακτήρες και κείµενο σε συγκεκριµένα σηµεία της οθόνης µε τη χρήση της βιβλιοθήκης curses. Παρόµοιες συναρτήσεις θα χρειαστούν και σε αυτή την άσκηση. Επειδή στο παιχνίδι υπάρχουν 5 αντικείµενα που κινούνται (ο Pacman και τα 4 φαντάσµατα), η απεικόνιση της κίνησης στην οθόνη είναι καλύτερο να γίνεται ως εξής: Η οθόνη ανανεώνεται περιοδικά. Πχ, αν θέλουµε να εξετάζουµε τι συµβαίνει στο παιχνίδι κάθε 40 ms, τότε ο παρακάτω κώδικας βοηθάει να επιτευχθεί αυτό (Μετά από την πρώτη κλήση στο setitimer (), το χρονόµετρο θα πυροδοτήσει κάθε 40.000 µικροδευτερόλεπτα, καλώντας οτιδήποτε handler ορίσουµε για το σήµα SIGALRM.): /* for time measurements, delay between shape movements */ struct itimerval h; /* define the first timer to set off after 40,000 microseconds. */ h.it_value.tv_sec = 0; h.it_value.tv_usec = 40000; /* define the interval between each two timer set-offs ('clicks') */ /* to be 40,000 micro seconds as well. */ h.it_interval.tv_sec = 0; h.it_interval.tv_usec = 40000; /* finally, start off the timer */ setitimer(itimer_real,&h,0);

Την επόµενη φορά που θα χτυπήσει ο µετρητής, υπολογίζεται η νέα θέση του Pacman και των φαντασµάτων. Για αυτό το βήµα θα χρειαστείτε την κατάσταση του παιχνιδιού στην προηγούµενη ανανέωση της οθόνης. Χρησιµοποιήστε ένα διδιάστατο πίνακα για να αποθηκεύσετε την πληροφορία κάθε οθόνης. Όταν ανανεώνετε την οθόνη, συγκρίνετε τα στοιχεία της παλιάς και της νέας οθόνης και ανανεώστε ΜΟΝΟ τα σηµεία που διαφέρουν. Κίνηση χαρακτήρων Το παιχνίδι έχει επίπεδα. Ο Pacman ξεκινάει µε 3 ζωές. Ο Pacman έχει µία ορισµένη από τη γραµµή εντολών περίοδο κίνησης (ακέραιος αριθµός). Τα φαντάσµατα έχουν µία (διαφορετική), επίσης δοσµένη από τη γραµµή εντολών, περίοδο κίνησης (ακέραιος αριθµός). Η περίοδος κίνησης ουσιαστικά ορίζει κάθε πόσες εκπυρσοκροτήσεις του µετρητή που αναφέραµε στην ανανέωση της οθόνης θα µετακινείται κατά ένα τετράγωνο (χαρακτήρα) της οθόνης το κάθε αντικείµενο (Pacman/φάντασµα). Πχ, περίοδος κίνησης 10 για τον Pacman σηµαίνει ότι διασχίζει ένα χαρακτήρα κάθε 40ms*10=0.4 δευτερόλεπτα. Στο πρώτο επίπεδο του παιχνιδιού, ο Pacman είναι λογικό να κινείται πιο γρήγορα από τα φαντάσµατα. Σε κάθε επίπεδο η περίοδος κίνησης κάθε φαντάσµατος µειώνεται (άρα κινείται πιο γρήγορα) µε βάση ένα τρίτο όρισµα που δίνεται στη γραµµή εντολών (ακέραιος αριθµός). ΠΡΟΣΟΧΗ: Έτσι όπως ορίσαµε την περίοδο κίνησης, αύξηση της ταχύτητας σηµαίνει µείωση των απαιτούµενων εκπυρσοκροτήσεων του µετρητή για την κίνηση του αντικειµένου. Πχ, αν η µεταβολή της περιόδου κίνησης ανά επίπεδο είναι 2, και η προηγούµενη περίοδος κίνησης των φαντασµάτων ήταν 12, τότε η περίοδος κίνησης στο επόµενο επίπεδο θα είναι 12-2=10. Σηµειώστε ότι σε κάθε πλευρά του παιχνιδιού µπορεί να υπάρχει ένας ελλείπων τοίχος - αυτό διαµορφώνει τη σήραγγα που επιτρέπει Pac (καθώς επίσης και τα φαντάσµατα) να µεταφέρονται από µια πλευρά της οθόνης στην άλλη σε µια στιγµή. Ο Pacman αν συναντήσει τοίχο σταµατάει. Τα φαντάσµατα ΕΝ µπορούν να αντιστρέψουν την κίνηση τους. Έτσι, µπορούν να αλλάξουν κατεύθυνση ΜΟΝΟ σε διασταυρώσεις. 2 φαντάσµατα ΕΝ µπορούν να βρίσκονται ταυτόχρονα στο ίδιο τετράγωνο. Σε περίπτωση που ένα φάντασµα Α πάει να κινηθεί σε τετράγωνο που υπάρχει άλλο φάντασµα Β, το φάντασµα Α θα πρέπει να θεωρηθεί ότι συνάντησε τοίχο και να αλλάξει πορεία. Τα φαντάσµατα πρέπει να κινούνται µε κάποιον έξυπνο τρόπο προς τον Pacman. Πχ, αν ο Pacman είναι κάτω δεξιά ως προς το φάντασµα, υπάρχει λόγος να προτιµηθεί από το φάντασµα να κινηθεί προς τα πάνω (γενικώς υπάρχει, αλλά σπάνια)? Επίσης αν 2 φαντάσµατα κυνηγούν τον Pacman, πώς µπορούν να τον παγιδεύσουν? Μία λύση είναι να επιλέγονται δύο δυνατές κατευθύνσεις σε κάθε διασταύρωση (πχ, στο παράδειγµά µας κάτω και δεξιά) και µε τυχαίο τρόπο κάθε φάντασµα να επιλέγει µία από τις 2 (ή πχ µε

πιθανότητα 2/3 να διαλέγει την καλύτερη δυνατή πορεία και µε πιθανότητα 1/3 την δεύτερη καλύτερη επιλογή). Τα φαντάσµατα αντιστρέφουν την πορεία τους (χωρίς να περιµένουν να φτάσουν σε διασταύρωση) όταν ο Pacman φάει ένα Χάπι ύναµης και προσπαθούν να αποµακρυνθούν, µέχρι ένας µετρητής να σηµάνει τη λήξη του Χαπιού (µετά από 4 δευτερόλεπτα). Κάθε φάντασµα που τρώγεται από τον Pacman εξαφανίζεται και εµφανίζεται µέσα στο σπίτι, σε µία κενή θέση του. Κάθε φάντασµα θα πρέπει να µένει στο σπίτι µε τα φαντάσµατα τουλάχιστον 2.4 δευτερόλεπτα (το κάθε φάντασµα έχει δικό του µετρητή, ανάλογα µε το πότε το έφαγε ο Pacman). Το πώς θα εξέρχονται από το σπίτι είναι δικιά σας ιδέα. Θα µπορεί αυτόµατα, µετά τα 2.4 δευτερόλεπτα, αν η θέση έξω από το σπιτάκι δεν καταλαµβάνεται από άλλο φάντασµα να βγαίνει ένα φάντασµα. Θα µπορούσατε να ορίσετε ένα τρόπο ώστε τα φαντάσµατα να βρίσκουν µόνα τους πώς να βγουν. Ένα φάντασµα που έχει βγει από το σπιτάκι ΕΝ µπορεί να ξαναµπεί µέσα παρά µόνο αν φαγωθεί ή αλλάξει η πίστα. Ανάγνωση χαρακτήρων Σκοπός είναι το πρόγραµµα να δέχεται εντολές από το πληκτρολόγιο για την κίνηση του Pacman. Προκειµένου να επιτραπεί στο πρόγραµµα να αντιµετωπίζει και την εισαγωγή χαρακτήρων και τους συναγερµούς (alarms) των timers, το πρόγραµµά µας θα χρησιµοποιήσει τη read() συνάρτηση, για την είσοδο του χρήστη, και ΟΧΙ η getchar() συνάρτηση. Αυτό είναι επειδή η λήψη ενός σήµατος θα κάνει την read() να επιστρέψει αµέσως (αυτό υποθέτει ότι ο χειριστής σηµάτων για SIGALRM καθορίστηκε χρησιµοποιώντας το sigaction(), µην χρησιµοποιώντας τη signal()). Κατά συνέπεια, ο κύριος βρόχος θα αρχίσει µε read() στον περιγραφητή αρχείων 0 (που χρησιµοποιείται για την τυποποιηµένη εισαγωγή (standard input)), και έπειτα θα ακολουθεί έλεγχος για τον κώδικα επιστροφής. Εάν είναι -1, και το errno είναι ίσο µε EINTR, κατόπιν πήραµε πιθανώς ένα SIGALRM, και πρέπει έτσι να καλέσουµε τα στοιχεία που κινούν τη λειτουργία. ιαφορετικά, ο χρήστης πίεσε πιθανώς ένα πλήκτρο, και πρέπει να ελέγξουµε ποιο. Το πλήκτρο καταγράφεται αλλά λαµβάνεται υπόψιν την επόµενη φορά που ανανεώνεται η θέση του Pacman (όταν µεταβεί στην επόµενη θέση του, όχι νωρίτερα). Επιπλέον των πλήκτρων κίνησης, το πλήκτρο Q σηµαίνει τον τερµατισµό του προγράµµατος, ενώ το πλήκτρο Ν σηµαίνει τη µετάβαση στο αµέσως επόµενο επίπεδο. Κάθε πίστα να ξεκινάει όταν ο παίκτης πατήσει το γράµµα S (όχι νωρίτερα). Κάθε φορά που ένα φάντασµα τρώει τον Pacman, να παγώνει (να µην µετακινείται τίποτα δηλαδή) η οθόνη για 5 δευτερόλεπτα, ώστε να είναι εµφανές το γεγονός. Τα σήµατα SIGINT (CTRL-c) και SIGTSTP (CTRL-z) να καθαρίζουν την οθόνη και να τερµατίζουν το πρόγραµµα. Θα χρειαστείτε να ορίσετε κατάλληλους χειριστές σηµάτων. Συνοπτικά

Γράψτε έναν χειριστή σηµάτων για SIGALRM που θέτει µια σηµαία που δηλώνει ότι ένας συναγερµός παραλήφθηκε. Η µετακίνηση των αντικειµένων και η ανανέωση της οθόνης θα αντιµετωπίζονται εδώ. Γράψτε µια λειτουργία που κινεί Pac στην τρέχουσα κατεύθυνσή του, εµποδίζοντας τον εάν αναπηδά σε έναν τοίχο, που να τρώει ένα χάπι (και που να αυξάνει το αποτέλεσµα) εάν το νέο σηµείο περιέχει ένα χάπι, που να τον θέτει σε Κατάσταση ύναµης εάν τρώει ένα χάπι δύναµης (ή να τον επαναφέρει σε κανονική κατάσταση αν ήταν πριν σε Κατάσταση ύναµης και πέρασε ο χρόνος δράσης του), που να πεθαίνει ο Pacman εάν πάτησε σε ένα φάντασµα (ή δολοφονία του φαντάσµατος, εάν αυτό συµβαίνει ενώ ο Pacman είναι σε Κατάσταση ύναµης). Γράψτε µια λειτουργία που κινεί ένα φάντασµα, που σκοτώνει Pac εάν πέσει πάνω στον Pacman (ή που σκοτώνει το φάντασµα, εάν ήταν σε Κατάσταση ύναµης). Μια απλή λειτουργία θα προσπαθήσει ακριβώς να το φτάσει πιό κοντά σε Pac. Σηµειώστε ότι ένα φάντασµα δεν µπορεί ποτέ να αντιστρέψει την κινούµενη κατεύθυνσή του. Μπορεί να επιλέξει να συνεχιστεί προς τα εµπρός, να κινηθεί αριστερά, ή να κινηθεί δεξιά. Έτσι γίνεται στο αρχικό παιχνίδι. ΣΗΜΕΙΩΣΗ: Ο Pacman και το κάθε φάντασµα (και ΜΟΝΟ αυτοί οι χαρακτήρες) να απεικονίζονται σε µορφή standout για να φαίνονται πιο εύκολα στην οθόνη. Γράψτε µια λειτουργία που εκτελεί όλες τις µετακινήσεις χαρακτήρων: κίνηση Pac και κίνηση των φαντασµάτων. Γράψτε µια λειτουργία που παίρνει δύο σειρές, µια περιγράφοντας το τρέχον σχεδιάγραµµα οθόνης, άλλο που περιγράφει το νέο (επιθυµητό) σχεδιάγραµµα οθόνης. Η λειτουργία θα ανανεώνει την οθόνη όπως περιγράψαµε νωρίτερα. Τέλος, η κύρια λειτουργία εγγράφεται τους χειριστές σηµάτων, αρχίζει το χρονόµετρο (µε το setitimer ()) και εκτελεί τον κύριο βρόχο της αναµονής την εισαγωγή χρηστών (ή τους συναγερµούς). Απεικονίστε κάπου στην οθόνη το Score του παίχτη, τις υπολειπόµενες ζωές του, το επίπεδο, την περίοδο κίνησης του Pacman, την αντίστοιχη περίοδο των Φαντασµάτων, και το χρόνο που µένει σε δευτερόλεπτα µέχρι να βγει ο παίκτης από την Κατάσταση ύναµης. Επίσης, το πόσα στοιχεία αποµένουν να φαγωθούν από τον Pacman για το τέλος της πίστας. Score 10 πόντους για κάθε τελεία. 60 πόντους για κάθε Χάπι ύναµης 300 πόντοι για το πρώτο φάντασµα που τρώει ο Pacman µε ένα χάπι ύναµης (αντίστοιχα, 600, 900, 3200 για το δεύτερο, τρίτο και τέταρτο φάντασµα µε το ίδιο χάπι) 5000 πόντοι για τερµατισµό επιπέδου (αν πατήσει ο χρήστης το Ν, ΕΝ υπάρχει αυτό το bonus)

Βαθµολογία Η βαθµολογία θα εξαρτηθεί από το πόσο ρεαλιστικό θα είναι το παιχνίδι (κυρίως η κίνηση των φαντασµάτων). εν περιµένω κάτι αντίστοιχο του πραγµατικού παιχνιδιού, αλλά όχι να είναι πχ ο Pacman κάτω δεξιά και τα φαντάσµατα πάνω αριστερά Θα δείτε ότι δεν είναι πολύ δύσκολο, ιδίως για 2 άτοµα. Μπορείτε να αλλάξετε τη συχνότητα του ρολογιού, αν πιστεύετε ότι έτσι θα πετύχετε πιο ρεαλιστική αναπαράσταση στην οθόνη. Αν το κάνετε αυτό θα πρέπει να το αναγράψετε στο README στην παράδοση της άσκησης. Μπορείτε να σκεφτείτε κάτι έξυπνο για την κίνηση των φαντασµάτων? Πχ, µπορούν να συνεργαστούν ώστε να εγκλωβίζουν πιο εύκολα τον Pacman? Πώς επιλέγουν την κίνησή τους τα φαντάσµατα λαµβάνοντας υπόψιν τις εξόδους διαφυγής? Καταλαβαίνουν ότι ακόµα και αν είναι στην απέναντι πλευρά της οθόνης, µπορούν να πλησιάσουν τον Pacman µέσω των εξόδων διαφυγής? Όλα όσα ανέφερα για χρήσεις συναρτήσεων είναι ΥΠΟΧΡΕΩΤΙΚΑ. Αυτό σηµαίνει ότι όποιος ΕΝ χρησιµοποιήσει τις συναρτήσεις read, sigaction, ή δεν υλοποιήσει την κίνηση των φαντασµάτων και του Pacman µε την περίοδο κίνησης, όπως ορίστηκε παραπάνω θα χάσει αρκετά µόρια. Σε περίπτωση που οποιοδήποτε κοµµάτι κώδικα ή τρόπος υλοποίησης συνάρτησης βγει στη λίστα ή στο forum ο διδάσκων µπορεί να αλλάξει τις απαιτήσεις της άσκησης οποιαδήποτε στιγµή, ή σε ακραία περίπτωση να ακυρώσει την άσκηση και να ορίσει νέα στη θέση της. Εννοείται ότι διαφορετικές οµάδες ΕΝ µπορούν να έχουν την ίδια υλοποίηση οποιωνδήποτε συναρτήσεων. Κάτι τέτοιο θα θεωρηθεί αντιγραφή. Και δεν θα αποτελεί δικαιολογία αν κάποιος/κάποια έχει βγάλει το συγκεκριµένο κοµµάτι κώδικα στο δίκτυο. Λογικά Βήµατα ιαβάστε το αρχείο της πίστας και απεικονίστε το στην οθόνη µε όλα τα απαραίτητα (score, ταχύτητα Pacman, ταχύτητα φαντασµάτων, ζωές κτλ) Ξεκινήστε από το πώς διαβάζονται οι επιθυµίες του χρήστη και ορίζεται ο χρόνος µεταξύ ανανεώσεων της οθόνης. Υλοποιήστε την κίνηση του Pacman στην πίστα χωρίς φαντάσµατα. Προσθέστε τις λειτουργίες που σχετίζονται µε τα φαντάσµατα. εληγιαννάκης Αντώνιος