You are on page 1of 12

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

Προγραμματιστική Εργασία Χειμερινού Εξαµήνου 2005

Η εργασία αφορά τον σχεδιασμό και την υλοποίηση σε Java του γνωστού
παιχνιδιού «Μονοπώλιο»1. Διαβάστε προσεκτικά τους κανόνες του παιχνιδιού στους
οποίους βασίζεται η ζητούμενη λειτουργικότητα (με αστερίσκο σημειώνονται
προαιρετικές λειτουργίες) του προγράμματος που θα αναπτύξετε, καθώς και τις
διευκρινιστικές οδηγίες σχεδίασης που σας δίνονται.

1. Κανόνες του παιχνιδιού


Σκοπός: Ο σκοπός του παιχνιδιού για κάθε παίχτη είναι να γίνει ο πιο πλούσιος (ή
για την ακρίβεια να μη χρεοκοπήσει) μέσα από αγορές, ενοικιάσεις και πωλήσεις
κινητής και ακίνητης περιουσίας. Το παιχνίδι παίζεται με 2-6 παίκτες.

Εξοπλισμός: Ο εξοπλισμός αποτελείται από έναν πίνακα με αξίες γης και αγοράς ή
ενοικίασης κτιρίων, 2 ζάρια, κατάλληλα σύμβολα (ένα για κάθε παίκτη), 32 σπίτια
και 12 ξενοδοχεία. Υπάρχουν 16 κάρτες Εντολής και 16 κάρτες Απόφασης, 28 κάρτες
τίτλων ιδιοκτησίας (εκ των οποίων οι 22 αφορούν οικόπεδα, 4 αφορούν
σιδηροδρομικούς σταθμούς και 2 αφορούν επιχειρήσεις) καθώς και χρήματα.

Προετοιμασία: Αφού ετοιμαστούν οι κάρτες Εντολής και Απόφασης κάθε παίχτης


διαλέγει ένα σύμβολο (π.χ. ένα χρώμα που τον αντιπροσωπεύει). Σε κάθε παίχτη
μοιράζονται 1500€ ως εξής: 2 χαρτονομίσματα των 500€, 2 των 100€, 2 των 50€, 6
των 20€, 5 των 10€, 5 των 5€ και 5 του 1€. Όλη η ακίνητη περιουσία και τα υπόλοιπα
χρήματα ανήκουν αρχικά στην τράπεζα (το αρχικό κεφάλαιο της τράπεζας δεν
χρειάζεται να προσδιοριστεί).

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

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

1
http://www.monopoly.com
βρίσκονται κάποια στιγμή στην ίδια θέση. Ανάλογα με τη θέση του ένας παίκτης, έχει
την δυνατότητα να αγοράζει κινητή ή ακίνητη περιουσία, ή υποχρεούται να πληρώσει
ενοίκιο, φόρους, ή ακόμα να πρέπει να σηκώσει μια κάρτα, ή να πάει φυλακή, κλπ.
Αν ένας παίκτης φέρει διπλές, αφού παίξει κανονικά σύμφωνα με τους
προαναφερθέντες κανόνες, ξαναρίχνει τα ζάρια και παίζει ακόμα μία φορά. Αν ένας
παίχτης φέρει 3 συνεχόμενες διπλές τότε πηγαίνει υποχρεωτικά φυλακή.

Εκκίνηση: Κάθε φορά που ένας παίκτης τοποθετείται ή περνά από την Εκκίνηση (είτε
ρίχνοντας το ζάρι είτε τραβώντας μια κάρτα), η τράπεζα του πληρώνει μισθό 200€.
Τα 200€ πληρώνονται μόνο μια φορά για κάθε γύρο του παιχνιδιού ενός παίκτη.
Παρόλα αυτά, αν ένας παίκτης που έχει ήδη περάσει από την εκκίνηση, ρίχνει τα
ζάρια και προωθείται σε μια θέση που τον υποχρεώνει να σηκώσει μια κάρτα
«Πήγαινε στην εκκίνηση», τότε ο παίκτης παίρνει 200€ για το πρώτο πέρασμά του
από την εκκίνηση και άλλα 200€ για το δεύτερο σύμφωνα με την εντολή της κάρτας.

Αγορά Ιδιοκτησίας: Όποτε ένας παίκτης βρεθεί σε ένα οικόπεδο χωρίς ιδιοκτήτη τότε
μπορεί να το αγοράσει από την τράπεζα στο προκαθορισμένο τίμημα και να λάβει την
αντίστοιχη κάρτα με τον τίτλο ιδιοκτησίας.

* Αν δε θέλει να προβεί σ’ αυτή την αγορά, η τράπεζα μπορεί να την πουλήσει μέσω
δημοπρασίας. Ο παίκτης με τη μεγαλύτερη προσφορά πληρώνει την τράπεζα και
παίρνει τον τίτλο ιδιοκτησίας. Όλοι οι παίκτες μπορούν να πλειοδοτήσουν,
συμπεριλαμβανομένου και αυτού που αρνήθηκε αρχικά να αγοράσει. Η τράπεζα
μπορεί να ξεκινήσει τη δημοπρασία σε οποιαδήποτε τιμή.

Ενοίκιο: Όταν ένας παίκτης βρεθεί στην ιδιοκτησία ενός άλλου παίκτη, τότε ο
ιδιοκτήτης του παίρνει ενοίκιο ίσο με το μίσθωμα που αναγράφεται στον αντίστοιχο
τίτλο ιδιοκτησίας. Για μια περιουσία που είναι υποθηκευμένη, ο ιδιοκτήτης δεν
δικαιούται ενοίκιο. Είναι συμφέρον για έναν παίκτη να έχει όλους τους τίτλους
ιδιοκτησίας σε ένα οικοδομικό τετράγωνο (που συμβολίζεται με το ίδιο χρώμα), γιατί
τότε μπορεί να χρεώσει διπλό ενοίκιο σε αναξιοποίητα οικόπεδα (δηλ. χωρίς σπίτια
και ξενοδοχεία) που ανήκουν σ’ αυτό. Ακόμα και αν κάποιο άλλο οικόπεδο του ίδιου
τετραγώνου είναι υποθηκευμένο, το παραπάνω εξακολουθεί να ισχύει για τα μη-
υποθηκευμένα οικόπεδα του τετραγώνου. Είναι ακόμα πιο συμφέρον για έναν παίκτη
να έχει σπίτια ή ξενοδοχεία στα οικόπεδά του γιατί τότε τα ενοίκια είναι πολύ
μεγαλύτερα (δηλαδή το άθροισμα του μισθώματος του οικοπέδου και του κτιρίου) .

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

Φόρος εισοδήματος: Αν ένας παίκτης βρεθεί στη θέση αυτή στο παιχνίδι, πρέπει να
πληρώσει στην τράπεζα 20€.
Φόρος πολυτελείας: Αν ένας παίκτης βρεθεί στη θέση αυτή στο παιχνίδι, πρέπει να
πληρώσει στην τράπεζα 100€.

Φυλακή: Ένας παίκτης μπαίνει στην φυλακή όταν:


1. Βρεθεί σε μια θέση που του υποδεικνύει «Πήγαινε στη φυλακή»,
2. Σηκώσει μια κάρτα «Πήγαινε στη φυλακή», ή
3. Φέρει τρεις συνεχόμενες φορές διπλές.
Όταν ένας παίκτης βρεθεί φυλακισμένος δεν παίρνει τα 200€ στο γύρο αυτό του
παιχνιδιού ανεξαρτήτως της θέσης στην οποία βρισκόταν. Αν βρεθεί στη θέση της
φυλακής κατά τη διάρκεια του παιχνιδιού ρίχνοντας τα ζάρια, τότε ο παίκτης δεν
πηγαίνει φυλακή αλλά θεωρείται απλώς ότι κάνει «Επίσκεψη» χωρίς καμία ποινή.
Ένας παίκτης αποφυλακίζεται με τους εξής τρόπους:
1. Ρίχνοντας διπλές σε μια από τις 3 επόμενες φορές που έχει έρθει η σειρά του να
παίξει. Αν το καταφέρει προχωρά τόσες θέσεις όσες δείχνουν τα ζάρια, αλλά δεν
ξαναπαίζει.
2. Χρησιμοποιώντας την κάρτα «Βγές δωρεάν έξω από τη φυλακή»
3. Αγοράζοντας και χρησιμοποιώντας την κάρτα «Βγες δωρεάν έξω από τη φυλακή»
από έναν άλλο παίκτη.
4. Πληρώνοντας ένα πρόστιμο 50€ μία από τις 2 επόμενες φορές προτού ρίξει τα
ζάρια. Ένας παίκτης δεν μένει στη φυλακή πάνω από 3 φορές. Αν στην τρίτη φορά
που έρθει η σειρά του δεν φέρει διπλές, θα πρέπει να πληρώσει 50€ πρόστιμο οπότε
αποφυλακίζεται και προχωρά τόσες θέσεις όσες δείχνουν τα ζάρια που έριξε.
Ακόμα και όταν ένας παίκτης είναι φυλακισμένος μπορεί να αγοράζει και να πωλεί
οικόπεδα, ή σπίτια και ξενοδοχεία καθώς και να μαζεύει ενοίκια.

Ελεύθερη Στάθμευση: Ένας παίκτης που βρίσκεται στη θέση αυτή δεν κάνει τίποτα.

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

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

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

Πώληση ιδιοκτησίας: Αναξιοποίητα οικόπεδα, σιδηροδρομικοί σταθμοί και


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

Υποθήκες: Αναξιοποίητα οικόπεδα μπορούν να υποθηκευτούν στην τράπεζα


οποιαδήποτε στιγμή. Πρίν την υποθήκευση, όλα τα κτήρια που βρίσκονται στα
οικόπεδα του ίδιου τετραγώνου θα πρέπει να πωληθούν στην τράπεζα στη μισή τους
τιμή. Η αξία της υποθήκης αναγράφεται σε κάθε κάρτα τίτλου ιδιοκτησίας. Κανένα
ενοίκιο δε μπορεί να ζητηθεί σε υποθηκευμένα οικόπεδα, σιδηροδρομικούς σταθμούς
ή επιχειρήσεις, αλλά μπορεί να ζητηθεί σε μη-υποθηκευμένα οικόπεδα του ίδιου
τετραγώνου. Για να αρθεί ή υποθήκη ο παίκτης θα πρέπει να πληρώσει στην τράπεζα
το ποσό της υποθήκης συν 10% τόκο. Όταν όλα τα οικόπεδα ενός τετραγώνου δεν
είναι ήδη υποθηκευμένα, τότε ο ιδιοκτήτης τους μπορεί να προβεί στην πώληση των
σπιτιών (ή ξενοδοχείων) που βρίσκονται σε αυτό στην μισή αξία τους. Ο ιδιοκτήτης
μπορεί να πουλήσει ένα υποθηκευμένο οικόπεδο σε κάποιον άλλο παίκτη σε
οποιοδήποτε ποσό συμφωνηθεί. Ο νέος ιδιοκτήτης μπορεί να άρει την υποθήκη
αμέσως ξεπληρώνοντας την αξία της υποθήκης συν 10% τόκο στην τράπεζα. Εάν
κάτι τέτοιο δεν γίνει, τότε ο νέος ιδιοκτήτης θα πρέπει να πληρώσει 10% τόκο στην
τράπεζα όταν αγοράσει το οικόπεδο και όταν αργότερα άρει την υποθήκευση να
πληρώσει την αξία της υποθήκης με 10% επιπλέον τόκο (δηλαδή διπλό τόκο).

Χρεοκοπία: Ένας παίκτης χρεοκοπεί αν χρωστά περισσότερα από όσα μπορεί να


πληρώσει είτε στην τράπεζα είτε σε κάποιον άλλον παίκτη. Αν το χρέος του είναι
προς έναν άλλο παίκτη, θα πρέπει να του μεταβιβάσει όλη του την περιουσία και να
βγει από το παιχνίδι. Για να γίνει αυτός ο διακανονισμός, ο παίκτης θα πρέπει να
επιστρέψει στην τράπεζα τα σπίτια ή ξενοδοχεία που έχει στην κατοχή του στο μισό
του αντιτίμου που δαπανήθηκε γι’ αυτά. Τα χρήματα δίνονται στον πιστωτή. Αν ο
χρεοκοπημένος παίκτης έχει υποθηκευμένες ιδιοκτησίες θα πρέπει επίσης να τις
μεταβιβάσει στον πιστωτή του, ενώ ο νέος ιδιοκτήτης θα πρέπει αμέσως να ρυθμίσει
στην τράπεζα τις υποθήκες των ακινήτων όπως περιγράφτηκε προηγουμένως. Αν ο
χρεοκοπημένος παίκτης χρωστά στην τράπεζα περισσότερα από όσα μπορεί να
πληρώσει ακόμα κι αν πουλήσει τα κτήριά του και υποθηκεύσει τα οικόπεδά του,
τότε θα πρέπει να μεταβιβάσει στην τράπεζα όλα τα υπάρχοντά του και να
αποχωρήσει αμέσως από το παιχνίδι.
*Σ’ αυτή την περίπτωση η τράπεζα αμέσως βγάζει σε δημοπρασία όλη την περιουσία
του εκτός από τα κτήρια.
Ο τελευταίος παίκτης που παραμένει στο παιχνίδι είναι αυτός που κερδίζει.
Δάνεια: Ένας παίχτης μπορεί να δανειστεί χρήματα μόνο από την τράπεζα και μόνο
μέσω υποθήκευσης ενός οικοπέδου του. Κανένας παίκτης δεν μπορεί να δανειστεί
από ή να δανείσει χρήματα σε κάποιον άλλον.

Επιχειρήσεις: Κάθε παίκτης που προωθείται σε μια επιχείρηση που αποτελεί


ιδιοκτησία κάποιου άλλου ρίχνει τα ζάρια για να υπολογίσει πόσες ημέρες χρειάζεται
τις υπηρεσίες της και πληρώνει το 4πλάσιο από το άθροισμα των ζαριών. Αν και οι
δύο επιχειρήσεις του παιχνιδιού έχουν τον ίδιο ιδιοκτήτη, τότε ο παίκτης που
προωθείται σε κάποια από αυτές πληρώνει το 10πλάσιο από το άθροισμα των ζαριών.

Σύντομος Τερματισμός: Αντί να περιμένουμε να χρεοκοπήσουν όλοι οι παίκτες εκτός


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

Κάρτες:
• Κάρτες Εντολής: (Chance cards)
o MovePlayerCards
1. Πήγαινε στη Λεωφόρο Τατοΐου
2. Πήγαινε στην οδό Ακαδημίας (Αν περνάς από την εκκίνηση πάρε
$200)
3. Πήγαινε στην Εθνική Οδό Αθηνών-Λαμίας (Αν περνάς από την
εκκίνηση πάρε 200€)
4. Πήγαινε στην εκκίνηση
5. Πήγαινε στο σιδηροδρομικό σταθμό Εξωτερικού (Αν περνάς από
την εκκίνηση πάρε 200€)
6. Πήγαινε στον κοντινότερο σιδηροδρομικό σταθμό και πλήρωσε
στον ιδιοκτήτη του δυο φορές το ενοίκιο που δικαιούται. Αν ο σταθμός
δεν έχει πουληθεί μπορείς να τον αγοράσεις από την τράπεζα
7. Πήγαινε πίσω 3 τετράγωνα
8. Πήγαινε στην πλησιέστερη υπηρεσία. Εάν δεν έχει πωληθεί μπορείς
να την αγοράσεις από την τράπεζα. Αν έχει πωληθεί τότε ρίξε το ζάρι
και πλήρωσε τον ιδιοκτήτη του 10 φορές αυτό που δείχνουν τα ζάρια
o MoneyCards
9. Η οικοδομή και το δάνειό σου ωριμάζουν. Πάρε 150€
10. Έχεις εκλεγεί πρόεδρος του παιχνιδιού. Πλήρωσε κάθε παίκτη 50€
11. Πλήρωσε συνεισφορά στον έρανο υπέρ των φτωχών 12€
12. Πάρε χριστουγεννιάτικο δώρο 100€
13. Κάνε γενικές επισκευές σε όλα τα σπίτια σου. Πλήρωσε 25€ για
κάθε σπίτι και 100€ για κάθε ξενοδοχείο
14. Η τράπεζα σου πληρώνει μέρισμα 50€
o JailCards
15. Πήγαινε κατευθείαν στη φυλακή. Δεν παίρνεις 200€
16. Βγες δωρεάν από τη φυλακή
• Κάρτες Απόφασης: (Community Chest cards)
o MovePlayerCards
1. Πήγαινε στην εκκίνηση
o MoneyCards
2. Ασφάλεια ζωής. Πάρε 100€
3. Από τους τόκους των χρημάτων σου λαμβάνεις 45€
4. Φορολογία για την ανακατασκευή των οδών. Πλήρωσε 40€ για κάθε
σπίτι και 115€ για κάθε ξενοδοχείο
5. Έξοδα γιατρού. Πλήρωσε 50€
6. Πλήρωσε για νοσοκομειακή περίθαλψη 100€
7. Κληρονομείς 100€
8. Από την πώληση αποθέματος παίρνεις 45€
9. Πάρε για τις υπηρεσίες που προσέφερες 25€
10. Άνοιγμα της μεγάλης όπερας. Πάρε 50€ από κάθε παίκτη για να
κλείσεις εισιτήρια
11. Κέρδισες το 2ο βραβείο ομορφιάς. Παίρνεις 11€
12. Επιστροφή φόρου εισοδήματος. Παίρνεις 20€
13. Τέλειωσε ο κανόνας του χρυσού. Πάρε 50€
14. Τραπεζικό λάθος υπέρ σου. Πάρε 200€
o JailCards
15. Βγες δωρεάν έξω από τη φυλακή
16. Πήγαινε κατευθείαν στη φυλακή. Δεν παίρνεις 200€

Ακολουθούν οι περιοχές και τα στοιχεία τους:

Χρώμα Όνομα Τιμ Τιμή Τιμή


ή σπιτιού/ξενοδοχείου ενοικίου
φούξια Λεωφόρος 60 50 2
Μεσογείων
φούξια Οδός 50 50 4
Πανεπιστημίου
γαλάζιο Εθνική Οδός 60 50 4
Αθηνών-Κορίνθου
γαλάζιο Λεωφόρος 100 50 6
Κηφισίας
γαλάζιο Λεωφόρος Αθηνών 120 50 6
μοβ Εθνική Οδός 140 50 8
Αθηνών-Λαμίας
μοβ Οδός Ευριπίδους 140 100 10
μοβ Πλατεία 140 100 10
Ελευθερίας
πορτοκαλί Πλατεία Κάνιγγος 160 100 12
πορτοκαλί Λεωφόρος Συγγρού 180 100 14
πορτοκαλί Πλατεία 180 100 14
Κολωνακίου
κόκκινο Οδός Γ’ 200 100 16
Σεπτεμβρίου
κόκκινο Οδός Πατησίων 220 150 18
κόκκινο Οδός Ακαδημίας 220 150 18
κίτρινο Οδός Ακροπόλεως 240 150 20
κίτρινο Οδός Αιόλου 260 150 22
κίτρινο Οδός Ερμού 260 150 22
πράσινο Πλατεία 280 150 24
Κλαυθμώνος
πράσινο Εγνατία Οδός 300 200 26
πράσινο Οδός Σταδίου 300 200 26
μπλε Πλατεία Ομονοίας 320 200 28
μπλε Λεωφόρος Τατοΐου 350 200 35

Να σημειωθεί ότι η τιμή ενοικίου αυξάνεται κατά ποσό ίσο με το γινόμενο του
αριθμού των σπιτιών επί την τιμή του ενοικίου στο ίδιο οικόπεδο. Υπενθυμίζεται ότι
ένα ξενοδοχείο ισοδυναμεί με 5 σπίτια. Ωστόσο το τίμημα αγοράς ενός ξενοδοχείου
ισούται μόνο με τη αντίστοιχη τιμή αγοράς ενός απλού σπιτιού στο ίδιο οικόπεδο (τα
4 σπίτια έχουν ήδη αγοραστεί). Επίσης υποθέστε ότι η αξία υποθήκης ισούται με την
τιμή του οικοπέδου συν την συνολική αξία των ακινήτων του αν φυσικά υπάρχουν.

Υπάρχουν επίσης 4 σιδηροδρομικοί σταθμοί με ονόματα «Σταθμός Εξωτερικού»,


«Αθηνών-Θεσσαλονίκης», «Πελοποννήσου» και «Αθηνών-Χαλκίδος». Κάθε ένας
από τους σταθμούς αυτούς έχει τιμή 200€ και ενοίκιο 50€. Τέλος, υπάρχουν δύο
επιχειρήσεις: «Ηλεκτρική Εταιρία», «Εταιρία Υδάτων» αξίας 150€ η κάθε μια.
Για την τοπολογία όλων των παραπάνω στον χάρτη του παιχνιδιού συμβουλευτείτε
τις παρακάτω εικόνες.

Εικόνα 1

Εικόνα 2

Εικόνα 3

Εικόνα 4

Τα 4 παραπάνω κομμάτια τοποθετούνται ως εξής: 3


2 4
1
2. Ζητούμενα Προγραμματιστικής Εργασίας
Στην εργασία αυτή θα πρέπει να υλοποιήσετε το παιχνίδι «Μονοπώλιο». Η
λεπτομερής περιγραφή της προσδοκώμενης λειτουργικότητας δίνεται από τους
παραπάνω (υποχρεωτικούς ή προαιρετικούς) κανόνες. Η επικοινωνία του
προγράμματος με το χρήστη θα γίνεται μέσω μιας γραφικής διεπαφής χρήστη (GUI).
Το παρακάτω σχήμα δείχνει τις 3 βασικές συνιστώσες του προγράμματος που θα
αναπτύξετε στα πλαίσια της εργασίας.
GUI GameMaster StateHolder

Α) GUI
Το GUI είναι υπεύθυνο για την επικοινωνία με τους χρήστες-παίκτες.
Απεικονίζει τον χάρτη του παιχνιδιού με την μορφή κελιών/θέσεων στις οποίες
μπορούν να βρεθούν οι παίκτες, τα ζάρια, τις κάρτες, τα σύμβολα των παικτών καθώς
και όλη τους την περιουσία (χρήματα-τίτλους ιδιοκτησίας-ακίνητα). Για κάθε παίκτη
θα πρέπει να εμφανίζονται τα χρήματα και η ακίνητη ιδιοκτησία του και να υπάρχουν
7 κουμπιά: «Αγοράζω Σπίτι» (“Buy house”), «Ρίχνω Ζάρια» (“Roll Dice”),
«Αγοράζω Ιδιοκτησία» (“Purchase Property”), «Βγαίνω από τη φυλακή» (“Get Out of
Jail”), «Τελειώνω το γύρο μου» (“End Turn”), «Σηκώνω Κάρτα» (“Draw Card”),
«Αγοράζω από άλλο παίκτη» (“Trade”). Κάθε φορά θα είναι «ενεργοποιημένα» μόνο
τα κουμπιά που αντιστοιχούν στις δυνατότητες που έχει να επιλέξει ο παίκτης
ανάλογα με την θέση στην οποία βρίσκεται. Κάθε παίκτης τελειώνει τη σειρά
παιξίματός του πατώντας «Τελειώνω το γύρο μου» και την ίδια στιγμή ενεργοποιείται
το κουμπί «Ρίχνω Ζάρια» του επόμενου κλπ. Θα χρειαστούν ακόμα κάποια παράθυρα
«διαλόγου» που θα χρησιμεύσουν αφενός στην αρχή του παιχνιδιού για την εισαγωγή
και την επιλογή του συμβόλου (π.χ. ονόματος) κάθε παίκτη, και αφετέρου για την
επικοινωνία με τον παίκτη σε όσες λειτουργίες χρειάζεται κατά την διάρκεια του
παιχνιδιού.
Το GUI επικοινωνεί με τον GameMaster για να τον πληροφορήσει σχετικά με
τον παίκτη που κάθε φορά παίζει (π.χ. ο τάδε παίκτης θέλει να αγοράσει το τάδε
οικόπεδο ή ο τάδε παίκτης πρέπει να σηκώσει κάρτα, κλπ.). Ένα ενδεικτικό
παράδειγμα GUI για 4 παίκτες της Αμερικανικής έκδοσης φαίνεται στην Εικόνα 5.

Β) GameMaster
Ο GameMaster είναι ο «εγκέφαλος» του παιχνιδιού. Αφού πάρει τις
πληροφορίες από το GUI, είναι υπεύθυνος για όλους τους ελέγχους που σχετίζονται
με τους κανόνες του παιχνιδιού «Μονοπώλιο». Κατά τη διάρκεια αυτών των ελέγχων
ο GameMaster επικοινωνεί με τον StateHolder, ο οποίος διατηρεί (σώζει) την
τρέχουσα κατάσταση του παιχνιδιού, για να αντλήσει όλες τις πληροφορίες (π.χ. αν
ένας παίκτης έχει το ποσό που απαιτείται για να αγοράσει μια ιδιοκτησία) που
χρειάζονται στους ελέγχους του. Αφού ο GameMaster ολοκληρώσει τους
απαραίτητους ελέγχους τότε ανανεώνει την κατάσταση του StateHolder (π.χ. τα
χρήματα ενός παίκτη που αγοράζει θα πρέπει να μειωθούν τόσο όσο και η αξία της
ιδιοκτησίας που αποκτά ενώ σημειώνεται σαν νέος ιδιοκτήτης της ο παίκτης αυτός,
κλπ.) και έπειτα επιστρέφει τον έλεγχο στο GUI για να παρουσιάσει (ζωγραφίσει) τη
νέα κατάσταση του παιχνιδιού (π.χ. να ανανεώσει τα χρηματικά διαθέσιμα του
χρήστη που αγόρασε, να εμφανίσει τον τίτλο ιδιοκτησίας που απόκτησε, κλπ.).
Εικόνα 5
C) StateHolder
O StateHolder σώζει την τρέχουσα κατάσταση του παιχνιδιού. Με τον όρο
αυτό εννοούμε την κατάσταση των παικτών (χρήματα, τίτλους ιδιοκτησίας, σε ποια
θέση βρίσκεται το σύμβολό τους κλπ.), την κατάσταση των κελιών (π.χ. ένα κελί
ιδιοκτησίας έχει χρώμα, αριθμό σπιτιών, ποσό ενοικίου κλπ.), την κατάσταση των
καρτών (σειρά καρτών), καθώς και την κατάσταση της τράπεζας. Αξίζει να
σημειώσουμε ότι 3 λογικές συνιστώσες του προγράμματος δεν αντιστοιχούν
αναγκαστικά σε 3 και μόνο κλάσεις Java. Όσον αφορά τον StateHolder, μπορεί μία
κλάση να μοντελοποιεί τον παίκτη με τα γνωρίσματα και τις συναρτήσεις του, ενώ
για τα κελιά θα πρέπει να σχεδιάσετε μια ιεραρχία από κλάσεις (Εικόνα 6).

Κάθε κελί/θέση (οποιουδήποτε είδους) έχει τα παρακάτω 3 κοινά γνωρίσματα:


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

Επίσης όλα τα κελιά εμφανίζουν μια κοινή συμπεριφορά. Για παράδειγμα


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

Cell

Property RailRoad Utility CardCell …


Cell Cell Cell

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

Τέλος αξίζει να σημειώσουμε ότι το ρόλο του τραπεζίτη θα τον παίζει το ίδιο το
πρόγραμμα.
Card

MoneyCard JailCard MovePlayer


Card

BankMoney PlayerMoney
Card Card

Εικόνα 7

3. Σχεδιασµός και Υλοποίηση


Η εργασία απευθύνεται σε ομάδες των 3 ατόμων και χωρίζεται σε 2 φάσεις:

Φάση 1η - Σχεδιασµός
Σε αυτή τη φάση πρέπει να γίνει ο σχεδιασµός της εφαρµογής βάσει των αρχών και
της μεθοδολογίας του αντικειμενοστρεφούς προγραμματισμού που έχετε διδαχθεί στο
μάθημα. Αποτέλεσµα αυτής της φάσης είναι ο καθορισμός των αντικείμενων, των
χαρακτηριστικών και της συµπεριφοράς τους που απαιτούνται για να
αναπαραστήσουν την κατάσταση και τις λειτουργίες του παιχνιδιού «Μονοπώλιο»
όπως έχουν περιγραφεί στις προηγούμενες σελίδες.
Παραδοτέα σε αυτή τη φάση είναι :
• µία αναφορά η οποία θα περιγράφει τα παραπάνω στοιχεία και θα
παρουσιάζει το σχέδιο υλοποίησης του project έτσι ώστε να είναι έτοιµο το
πέρασµα στην επόµενη φάση της υλοποίησης.
• Οι διεπαφές και το περίγραμμα (outline) των κλάσεων Java (πηγαίος κώδικας)
συνοδευόµενα από τα απαραίτητα javadoc σχόλια, στα οποία θα βασιστεί η
υλοποίηση του παιχνιδιού στην επόμενη φάση.

Επιγραµµατικά, οι σηµαντικότερες εργασίες που θα πρέπει να γίνουν σε αυτή τη


φάση είναι:
• Αναγνώριση των κλάσεων και διεπαφών για κάθε μικρή και μεγάλη
συνιστώσα του παιχνιδιού. Αναγνώριση των ευθυνών κάθε κλάσης και των
πιθανών σχέσεών της με άλλες. Ιδιαίτερα για τα κελιά και τις κάρτες δώστε
την ιεραρχική δομή των κλάσεων (inheritance).
• Εύρεση των χαρακτηριστικών και των μεθόδων κάθε κλάσης.
• Εύρεση της συµπεριφοράς (behaviour) κάθε κλάσης και διεπαφής του
προγράμματός σας, καθώς και της επικοινωνίας μέσω μηνυμάτων (method
calls) που χρειάζεται να έχουν μεταξύ τους.
• Για κάθε κλάση και διεπαφή δώστε τις υπογραφές (signatures), το είδος
(constructors, accessors, transformers) και τις εκ των προτέρων και εκ των
υστέρων καθώς και τις αμετάβλητες συνθήκες (preconditions, postconditions,
invariants) που διέπουν όλες τις μεθόδους τους.
Στην φάση αυτή εστιάστε στις 2 από τις 3 συνιστώσες του προγράμματος, δηλαδή
στον GameMaster και στο StateHolder.

Φάση 2η - Υλοποίηση
Σε αυτή τη φάση θα πρέπει να γίνει η κυρίως υλοποίηση της εφαρµογής, βάσει της
σχεδίασης που έχει προηγηθεί (φάση 1). Μολονότι δεν επιβάλλεται να
χρησιµοποιηθεί αυτούσια η σχεδίαση της 1ης φάσης, καθότι κάποιες σχεδιαστικές
επιλογές αποδεικνύονται στην πορεία άκυρες και χρειάζονται αναθεώρηση, εντούτοις
η τελική βαθµολογία θα εξαρτηθεί από την συνέπεια της τελικής υλοποίησης ως προς
την αρχική σχεδίαση.
Σε αυτή τη φάση, παραδοτέα είναι :
• ο πηγαίος κώδικας που υλοποιεί το παιχνίδι «Μονοπώλιο» και η δυνατότητα
εκτέλεσής του σαν εφαρμογή και μικροεφαρμογή (Applet) Java.
• αναλυτικές οδηγίες για το πώς μεταγλωττίζεται και πώς τρέχει το πρόγραµµα
(README, Makefile κ.λ.π.).
• αναφορά, στην οποία θα αναλύεται :
o η τελική σχεδίαση της εφαρµογής,
o ποιες αλλαγές έγιναν σε σχέση µε τη σχεδίαση της 1ης φάσης (και
γιατί),
o οι αλγόριθµοι που χρησιµοποιήθηκαν,
o τα προβλήµατα που αντιµετωπίστηκαν,
o οι σχεδιαστικές ή προγραµµατιστικές αποφάσεις που ελήφθησαν και
πώς αυτό αντανακλάται στον τελικό χρήστη (π.χ. ευκολία/δυσκολία
χειρισµού),
o ... γενικά ό,τι άλλο κρίνετε απαραίτητο να αναφερθεί.

Βαθµολόγιση της εργασίας


Για την βαθµολογία της εργασίας θα συνεκτιµηθούν:
• εάν (και κατά πόσο) η σχεδίαση της εφαρµογής σας εφαρμόζει τις έννοιες και
τις τεχνικές του αντικειμενοστρεφούς προγραµματισµού που διδαχτήκατε στο
μάθημα.
• εάν (και κατά πόσο) υλοποιήθηκαν οι υποχρεωτικές λειτουργίες του
παιχνιδιού. Οι προαιρετικές λειτουργίες (σημειωμένες με αστερίσκο στην
ενότητα 1) θα πάρουν επιπλέον βαθμούς (bonus).
• η πληρότητα της τελικής αναφοράς, η οποία θα καταγράφει και θα
τεκµηριώνει την σχεδίαση και υλοποίηση της εφαρµογής σας.

Παρατήρηση: Για την διευκόλυνση της εργασίας σας συνίσταται η υλοποίηση του
παιχνιδιού βήμα προς βήμα: μπορείτε αρχικά να υλοποιήσετε το StateHolder, όπως τον
έχετε μοντελοποιήσει από την 1η φάση, έπειτα να προχωρήσετε στο GameManager και
αφού έχετε ολοκληρώσει τα 2 αυτά βήματα και τη διασύνδεσή τους, μπορείτε να
προχωρήσετε στο GUI. Μ’ αυτό το πλάνο εργασίας και με μια καλή σχεδίαση από την
1η Φάση θα μπορέσετε να δουλέψετε παράλληλα και τα 3 άτομα στο ίδιο κομμάτι (πχ.
Καθώς υλοποιείτε το StateHolder μπορείτε να χωρίσετε τις κλάσεις των Κελιών στα 3,
τις κλάσεις των Καρτών στα 3, και όταν θα υλοποιείτε το GameMaster μπορείτε να
χωρίσετε τις διαδικασίες ελέγχου στα 3 κλπ. ).

Για περισσότερες διευκρινήσεις σχετικά µε την παραπάνω εργασία, µπορείτε να


στέλνετε ηλεκτρονικά τις απορίες σας στη λίστα του µαθήµατος hy252-list.

You might also like