/Terminal-RPG

A simple single player terminal RPG

Primary LanguageC++

Συμμετέχοντες:

Άγγελος Σφυράκης(Α.Μ.: 1115201900180)

Γρηγόριος Μουλκιώτης(Α.Μ.: 1115201900117)

Στα αρχεία που παραδόθηκαν παρέχεται Makefile οπότε για την μεταγλώτιση του προγράμματος απαιτείται να γραφεί η εντολή: make compile

Και για την εκτέλεση η εντολή: make run

Παραδοχές που έγιναν: 1)Ο μέγιστος αριθμός τεράτων που μπορεί να εμφανιστεί σε μια μάχη είναι 6 2)Η μέγιστη ζωτική ενέργεια είναι σταθερή και δεν μεταβάλλεται απο επίπεδο σε επίπεδο. 3)Το ποσό χρημάτων με το οποίο ξεκινά η ομάδα είναι 200.

Χρησιμοποιήθηκε η βιβλιοθήκη STL της C++ για την χρήση των vectors.

Η μεθολογία που ακολουθήθηκε ήταν:1)Ανάγνωση της εκφώνησης και σχεδιασμός του περιβάλλοντος 2)Υλοποίηση των ζωντανών όντων και των αντικειμένων. 3)Υλοποίηση του συστήματος της μάχης 4)Υλοποίηση του συστήματος της αγοράς 5)Υλοποίηση του χάρτη 6)Δημιουγία αρχείων τεράτων,αντικειμένων,ξορκιών και πανοπλιών.

Τα αντικείμενα στο παιχνίδι αποτελούν την κλάση Item.H κλάση έχει μεθόδους με τις οποίες κάποιος μπορεί να λάβει το όνομα(getName),τη τιμή(getPrice),το επίπεδο(getLevel),να εκτυπώσει τα στοιχεία του αντικειμένου(print) και να καλέσει τον destructor.

Τα όπλα αποτελούν την κλάση Weapon.Διαθέτει μεθόδους με τις οποίες λαμβάνονται η ζημιά του όπλου(weapon_damage), ο αριθμός των χεριών που χρησιμοποιούνται(numOfHands),εκτύπωση των στοιχείων του όπλου(print) και ο destructor.

Οι πανοπλίες αποτελούν την κλάση Armor.Στην κλάση περιέχονται μέθοδοι με τις οποίες μπορεί να γίνει ανάκτηση του ποσοστού της ζημιάς που μειώνεται(get_damage_percentage) και να εκτυπωθούν τα στοιχεία της πανοπλίας(print) και ο destructor.

Τα φίλτρα αποτελούν την κλάση Potion.Στην κλάση παρέχονται συναρτήσεις με τις οποίες γίνεται χρήση του potion(use),λαμβάνεται το στατιστικό που αυξάνεται(get_stat_to_increase) και εκτυπώνονται τα στοιχεία του φίλτρου(print) και ο destructor.

Τα φίλτρα,οι πανοπλίες και τα όπλα κληρονομούν τα χαρακτηριστικά τους από τα αντικείμενα.

Τα ξόρκια μοντελοποιούνται με την κλάση Spell.Στην οποία παρέχονται συναρτήσεις ανάκτησης της μαγικής ενέργειας που απαιτείται για να χρησιμοποιηθούν(get_mana),της ζημιάς που προκαλούν(damage_to_do),της τιμής τους(getPrice),του επιπέδου τους(get_level),εκτύπωσης των στοιχείων τους και destructor.

Οι υποκατηγορίες των ξορκιών (IceSpell,FireSpell,LightingSpell) κληρονομούν τα χαρακτηριστικά τους απο την κλάση Spell και κάθε μια απο τις παραπάνω κλάσεις διαθέτει συνάρτηση που επιστρέφει το ποσοστό μείωσης του στατιστικού που ειδικεύεται το ξόρκι.

Η κλάση effect μοντελοποιεί το αποτέλεσμα του ξορκιού σε ένα στατιστικό του τέρατος.Αρχικοποιείται με τους γύρους που διαρκεί την αρχική τιμή του στατιστικού που μειώνει και το ποσοστό μείωσής του.Η μέθοδος apply_effect μειώνει το στατιστικό στο σημείο που πρέπει και η update ανανεώνει τους εναπομείναντες γύρους του ξορκιού και εάν αυτοί γίνουν ίσοι με μηδέν το αποτέλεσμα του ξορκιού παύει να ισχύει.

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

Οι ήρωες παριστάνονται μέσω της κλάσης Hero.Μέσω των συναρτήσεων της κλάσης μπορεί κάποιος να ανεβάσει ενα επίπεδο τον ήρωα(levelUp),να κάνει κανονική επίθεση ή επίθεση με ξόρκι(attack),να δεχθεί επίθεση(getAttacked), να εξοπληστεί με όπλο ή με πανοπλία(equip),να βγάλει το όπλο(takeOutWeapons) ή την πανοπλία του(takeOutArmor),να ανεβάσει την εμπειρία του ήρωα(getExperience),να χρησιμποιήσει φίλτρο(use_potion),να τον επαναφέρει εάν εχει λιποθυμήσει(revive),να λάβει το επίπεδό του(getLevel) και να καλέσει τον destructor του.Η κλάση κληρονομεί τα χαρακτηριστικά της από την κλάση Living.

Η κλάση heroe_squad αναπαριστά την ομάδα των ηρώων.

Οι μαχητές(Warrior),οι μάγοι(Sorcerer) και οι ιπότες(Paladin) κληρονομούν τα χαρακτηριστικά τους από την κλάση Ηero.

Τα τέρατα μοντελοποιούνται μέσω της κλάσης Monster.Μέσω των μεθόδων της κλάσης μπορεί να γίνει λήψη της τρέχουσας ζωής του τέρατος(getcurrentHealth),να δεχθεί επίθεση το τέρας(getAttacked),να επιτέθει το τέρας(attack) και να δέχθει την επίδραση του ξορκίου το τέρας(getInfected).Η κλάση Monster κληρονομεί από την κλάση Living.

Οι δράκοι(Dragon),οι εξωσκελετοί(Exoskeleton) και τα πνεύματα(Spirit) κληρονομούν τα χαρακτηριστικά τους απο την κλάση Monster.

Η κλάση monsters_squad αναπαριστά την ομάδα των τεράτων.

Η αγορά παριστάνεται μέσω της κλάσης Market.Οι συναρτήσεις της κλάσης δίνουν την δυνατότητα στον χρήστη να εκτυπώσει τα περιεχόμενα της αγόρας(print,printSpell,printItems,printWeapons,printArmors,printSpells,printPotions) και να αλληλεπιδράσει με αυτή αγοράζοντας ή πουλόντας πράγματα(interact).

Η μάχη μοντελοποιείται μέσω της κλάσης Battle.Μέσω των μεθόδων της κλάσης μπορεί ο χρήστης να εκτυπώσει τα στατιστικά των συμμετεχόντων(displayStats),και να αρχίσει την μάχη(battle).

Η κλάση square αναπαριστά ενα τετράγωνο του grid.Περιέχει μέθοδο με την οποία κάποιος μπορεί να αλληλεπιδράσει με το τετράγωνο. Η κλάση marketSquare αναπαριστά ενα τετράγωνο του grid που περιέχει αγορά.Κληρωνομεί από την κλάση square. Η κλάση commonSquare αναπαριστά τα κοινά τετράγωνα.Κληρονομεί από την κλάση square και περιέχει μέθοδο η οποία επιστρέφει την ένδειξη εάν υπάρχει μάχη στο τετράγωνο.

Η κλάση game πακετάρει όλες τις παραπάνω κλάσεις μαζί και αποτελεί την λογική του παιχνιδιού.Περιέχει μεθόδους με τις οποίες μπορεί κάποιος να κινήσει την ομάδα προς κάποιο άλλο τετράγωνο(move) και να εμφανίσει τον χάρτη(displayMap).Περιέχεται επιπλέον ο χάρτης του παιχνιδιού ο οποίος δημιουγείται τυχαία.