Skip to content

dimitrskpl/GameProject

 
 

Repository files navigation

Ονοματεπώνυμα:
  1)Κυριακόπουλος Δημήτριος sdi1900093
  2)Tsvetomir Ivanov sdi1900066
  
  Εντολή για μεταγλώτισση: make
  
  Εντολή για εκτέλεση: make run
  
  Εντολή για εκτέλεση με χρήση valgrind memcheck: make valgrind
  
  Εντολή για διαγραφή: make clean
  
  Βήματα μεθοδολογίας που ακολουθήσαμε:
  
  1) Δημιουργία αντικειμένων:
  Στο directory Items περιλαμβάνονται οι κλάσεις των αντικειμένων.

    -Για να κατασκευαστεί ένα αντικείμενο χρειάζεται το όνομα, η τιμή του, το απαιτούμενο επίπεδο και έναν ακέραιο που αντιστοιχεί στο
    ποσό της βελτίωσης. Για την δημιουργία ενός φίλτρου χρειάζεται επιπλέον ο τύπος του στατιστικού του ήρωα που αυξάνει το φιλτρο.

    -Το κάθε αντικείμενο έχει μία συνάρτηση getAttribute() που επιστρέφει την αύξηση του στατιστικού του ήρωα.
    
  2) Δημιουργία ξορκιών:
  Στο directory Spells περιλαμβάνονται οι κλάσεις των ξορκιών.

    -Το κάθε ξόρκι χρησιμοποιεί την κλάση Range για το εύρος ζημιάς του.
    Ορίζουμε ενα enumeration (EffectType) που περιέχει τον τύπο του στατιστικού του τέρατος που επηρεάζεται οταν γινεται Cast.

    -Για τη δημιουργία ενός ξορκιού χρειάζονται το όνομα, η τιμή, το απαιτούμενο επίπεδο, η απαιτούμενη μαγική ενέργεια,
    το εύρος ζημιάς που προκαλεί (Range(min, max)) και έναν ακέραιο για το ποσό μείωσης που θα εφαρμοστεί στο αντίστοιχο στατιστικό του
    τέρατος (int reduce).
    Επίσης, κάθε ξόρκι λειτουργεί για ορισμένους γύρους, οι οποίοι είναι προκαθορισμένοι με σταθερά για κάθε τύπο ξορκιού.
    Όταν χρησιμοποιείται ένα ξόρκι, επιστρέφέται ένα τυχαίο ποσό ζημιάς (getDamage()) και η επίδραση στο στατιστικό του τέρατος (getEffect()).

    -Η κλάση SpellEffect περιέχει τις πληροφορίες για την λειτουργία ενός ξορκιού πάνω σε ένα τέρας, δηλαδή περιέχει τον τύπο του στατιστικού
    στο οποίο επιδρά, έναν μετρητή για τους γύρους για τους οποίους είναι ενεργό και μια bool μεταβλητή που δείχνει αν είναι ενεργό ή όχι.
    Ορίζονται επίσης οι λειτουργίες ενεργοποίησης (activate()), απενεργοποίησης  (disable()) του ξορκιού και η μείωση της διάρκειας ισχύος
    (reduceDuration()) καθώς επίσης και έναν έλεγχο για το αν έχει τελειώσει η ισχύς του ξορκιού.
    
  3) Δημιουργία ηρώων:
  Στο directory Creatures/Heroes περιλαμβάνονται τα απαραίτητα αρχεια για τις κλάσεις των ηρώων.
      
     -Ορισμός στατιστικών των ηρώων (HERO_ATTRIBUTES.h):
     Ορίζουμε ένα enumeration attribute που περιέχει τα στατιστικά του ήρωα.
     Κάθε ήρωας ξεκινά απο το επίπεδο (level=1) και μπορεί να φτάσει εως το επίπεδο 20. Όταν δημιουργείται ένας ήρωας τα χαρακτηριστικά του είναι
     προκαθορισμένα με σταθερές.

     -Θεωρούμε σαν παραδοχή ότι η ζωτική και η μαγική ενεργεια δεν ξεπερνάνε την προκαθορισμένη τιμή τους, ενώ κατα το levelUp αυξανονται μονο τα
     υπόλοιπα στατιστικα(Dexterity, Strength, Agility).

     -Για την δημιουργεία ηρώων χρειάζεται μονο το όνομα τους.

     -Κάθε ήρωας έχει ένα πεδίο Inventory και ένα πεδίο Skills στα οποια αποθηκευονται τα αντικειμενα και τα ξόρκια που αγοράζει, και περιέχονται οι
      απαραίτητες λειτουργίες για τη διαχείριση τους.
      Οι κλάσεις Inventory, Skills αποθηκεύουν τα αντικείμενα και ξόρκια αντίστοιχα με πίνακα απο δείκτες σε αυτά, καθορισμένου μεγέθους.

     -Κατα την checkInventory εκτυπώνονται τα items που διαθέτει ο καθε ήρωας της ομάδας και αφήνεται στον χρήστη η επιλογή
      κάποιου αντικειμένου με βάση την θέση του στον πίνακα απο την οποία και αφαιρείται οταν χρησιμοποιηθεί το αντικείμενο.

      -Κατα την κλήση της spellAttack() εκτυπώνονται τα διαθέσιμα ξόρκια του ήρωα και αφήνεται στον χρήστη η επιλογή κάποιου ξορκιού.
      -Αντίστοιχα λειτουργεί η usePotion() και η chooseEquipment() με τις οποίες ο χρήστης επιλέγει να χρησιμοποιήσει καποιο φιλτρο ή
      να φορέσει καποια πανοπλία/οπλο

   4) Δημιουργία τεράτων:
  Στο directory Creatures/Monsters περιλαμβάνονται τα απαραίτητα αρχεία για την υλοποιηση των τεράτων.

      -Ορισμός στατιστικών των τεράτων(MONSTER_ATTRUBUTES.h):
      Τα τέρατα δημιουργούνται με προκαθορισμένα στατιστικά βάση του επιπέδου τους, δηλαδή τα στατιστικά των τεράτων ειναι αναλογικά με το επίπεδο τους
      πχ. ένα είδος τερατος βρισκεται στο επιπεδο Κ τοτε το καθε στατιστικο ενος τέρατος ιδιου ειδους και επιπέδου Κ+1  είναι αυξημένο κατα καποιο ποσό.
      Τα ποσά αυτά δηλώνονται με τις σταθερές που το όνομα τους ξεκινάει με INCREASE_.

      -Για την δημιουργία των τεράτων χρειάζεται το όνομα και το επίπεδο του τέρατος.

      -Κάθε τέρας επίσης έχει ενα πεδιο ActiveSpells spells που περιέχει την πληροφορία για το αν υπάρχουν ενεργά ξόρκια πάνω σε αυτό και τις απαραίτητες
      λειτουργίες, οι οποίες διαχειρίζονται την ισχύ τους.
      
    5) Δημιουργία ομάδων ηρώων και τεράτων:
       -Στο directory Squad/HeroSquad περιέχεται η κλαση HeroSquad, η οποία περιεχει την ομαδα των ηρωων και τις λειτουργίες που αφορούν όλα τα μέλη της ομάδας.
       -Στο directory Squad/MonsterSquad βρισκεται η κλάση MonsterSquad η οποία περιεχει την ομαδα των τερατων αντίστοιχα και τις απαραίτητες λειτουργίες.
       
    6) Δημιοργία χάρτη:
    Στο directory Map περιλαμβάνονται τα αρχεια για την υλοποίηση του χάρτη.

       -Ο χάρτης αναπαρίσταται απο εναν διασδιάστατο ΝΧΝ πίνακα, ο οποιος αποτελείται
       απο τετράγωνα (class Square). Για τη δημιουργία του χρειάζεται μόνο το μεγεθος Ν. Σε κάθε γραμμη ανα 3 τετράγωνα υπάρχει ενα market, ανα 5 τετραγωνα υπαρχει ενα
       NonAccessible και όλα τα υπολοιπα είναι common τετραγωνα.

       -Κάθε τετραγωνο (Square) περιέχει μια συντεταγμενη (x, y) στην οποια βρίσκεται και ενα πεδιο (HeroSquad)
       που περιέχει την ομάδα που βρισκεται σε αυτο ή NULL, αν δεν υπάρχει.
       
       
    7) Δημιουργία MarketPlace:
    Στο directory MarketPlace περιλαμβάνονται τα αρχεία για την υλοποίηση του αγοράς.
    
        -Η αγορά (market) περιλαμβάνει ενα πεδιο ItemSection το οποίο περιέχει τα αντικείμενα προς πώληση, 
        και ενα πεδιο SpellSection που περιέχει τα ξόρκια προς πώληση.
        -Θεωρούμε την παραδοχή οτι κατά την αγορά ενος αντικειμένου/ξορκιού απο το market, αυτο δεν αφαιρείται απο αυτό, αλλα δίνεται ενα αντίγραφο του.
        -Επίσης κατα την πώληση αντικειμένων/ξορκιών απο τον ήρωα, αυτά δεν προστίθενται στην αγορά απλώς ο ήρωας παιρνει τα κατάλληλα χρήματα 
        
    8) Δημιουργία παιχνιδιου:
 
       Θεωρώντας οτι ενα παιχνίδι εχει καποιες συγκεκριμένες προδιαγραφές, και αυτό προσφέρεται έτοιμο στον χρήστη,
       έχουμε δημιουργήσει μια κλαση (class Game) η οποία χειρίζεται την κατασκευή του τελικού παιχνιδιου και περιμένει απο τον χρήστη να
       παίξει το παιχνίδι μεσω της συνάρτησης play(). Ετσι ο χρήστης δεν ασχολείται με το πως λειτουργεί το παιχνίδι ή τι χαρακτηριστικά εχει.
       
       Οταν δημιουργείται ενα παιχνίδι, ορίζεται ο χάρτης με μέγεθος MAP_SIZExMAP_SIZE,
       επίσης φτιάχνεται ενα MarketPlace το οποίο γεμίζει με καποια αντικείμενα και ξόρκια. Εχουμε αποφασίσει να γεμίζουμε "εμείς" το market με συγκεκριμένα
       αντικείμενα και ξόρκια έτσι ώστε οταν θα παίξει καποιος δεύτερος το παιχνίδι να συναντήσει την ίδια αγορά.
       Θεωρούμε οτι η αγορά ειναι κοινή σε όλο τον χάρτη(map) δηλαδή κάθε τετράγωνο με market ανοίγει την κοινή αγορά του παιχνιδιού.
       
       Οταν ο χρήστης ξεκινάει το παιχνίδι εισάγει εναν αριθμό ηρώων για την ομάδα του, οι οποίοι ήρωες δημιουργούνται με τυχαίο τροπο.
       Θεωρούμε ότι οι ήρωες ξεκινάνε απο το σημείο (0,0) του χάρτη, το οποίο και εχει Market ώστε να μπορεί ο χρήστης να προμηθευτεί ο,τι χρειάζεται για την            περιπέτεια του.
       
       Ο χρήστης μετακινεί την ομάδα του μεσω των πλήκτρων (w,a,s,d), μπορεί να ελέγξει την ομάδα του και τα στατιστικα των ηρώων μεσω του πλήκτρου c,
       να εμφανίσει τον χάρτη μεσω του πλήκτρου m, να ανοίξει το inventory για κάθε ήρωα με το πληκτρο i και τέλος να βγει απο το παιχνίδι με το πλήκτρο q!

        Η διεαπαφή του χρήστη με το παιχνίδι δηλαδή η κάθε είσοδος που δίνει (move, attack, cast spell κ.α) περιγράφεται στο αρχείο KEYBOARD_SYMBOLS.h δηλαδή τα
        πλήκτρα που χρησιμοποιεί.

    9) Δημιουργία Μαχης:
    
      Οταν ο χρήστης βρεθεί σε καποια μάχη, δημιουργείται με τυχαίο τρόπο μια ομάδα τεράτων (MonsterSquad), τυχαίου πληθους (1-3) και επιπέδου ίσου με τον
      μέσο ορο των επιπέδων των ηρώων.
      
      Η κλάση Fight υλοποιεί την μάχη οπως περιγράφεται. Σε κάθε γύρο της μάχης ο χρήστης εχει την δυνατότητα να εμφανίσει τα στατιστικά όλων των ατόμων με το πληκτρο 'c'
      μπορεί να επιλέξει κατάλληλο εξοπλισμό με το πλήκτρο 't' και στην συνέχεια μπορεί να κάνει κανονικη επίθεση με το πλήκτρο o, να χρησιμοποιήσει κάποιο ξόρκι με το πλήκτρο 'l'
      ή να χρησιμοποιήσει καποιο φιλτρο με το πλήκτρο 'p'. Η επίθεση γίνεται σε τυχαίο αντίπαλο (γίνεται αυτόματα).
      Αντίστοιχα όταν είναι σειρά των τεράτων και το κάθε τέρας κανει επίθεση σε τυχαία επιλεγμένο ήρωα.
      
      
      Όταν χρησιμοποιείται ενα ξόρκι πάνω σε κάποιο τέρας, μειώνεται το αντίστοιχο στατιστικό του για ορισμένους γύρους ανάλογα με το ξόρκι.
      Σε περίπτωση που χρησιμοποιηθεί το ίδιο ξόρκι πριν την λήξη του τότε μπαίνει σε ισχύ το τελευταίο.
      
      Κάθε φορά που ο χρήστης πρέπει να δώσει ως είσοδο έναν χαρακτήρα, μπορεί να επιλέξει το q ή Q για να τερματίσει το παιχνίδι!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 90.5%
  • Makefile 5.3%
  • C 2.4%
  • CMake 1.8%