{"id":25417626,"url":"https://github.com/tech-gian/oopproj_2021","last_synced_at":"2026-07-14T07:33:02.200Z","repository":{"id":78433143,"uuid":"323988251","full_name":"tech-gian/OOPproj_2021","owner":"tech-gian","description":"🎮👹👾 A command-line game designed, with Object-Oriented Programming principles, about monsters and heroes fighting each other.","archived":false,"fork":false,"pushed_at":"2021-04-13T15:26:41.000Z","size":535,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-26T02:04:35.034Z","etag":null,"topics":["command-line","cpp","game","oop","oop-cpp","oop-principles"],"latest_commit_sha":null,"homepage":"https://gianniszapantis.azurewebsites.net/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tech-gian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-12-23T19:44:05.000Z","updated_at":"2021-09-29T09:42:04.000Z","dependencies_parsed_at":"2023-04-12T07:17:17.499Z","dependency_job_id":null,"html_url":"https://github.com/tech-gian/OOPproj_2021","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tech-gian/OOPproj_2021","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FOOPproj_2021","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FOOPproj_2021/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FOOPproj_2021/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FOOPproj_2021/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tech-gian","download_url":"https://codeload.github.com/tech-gian/OOPproj_2021/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FOOPproj_2021/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35451878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-14T02:00:06.603Z","response_time":114,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","cpp","game","oop","oop-cpp","oop-principles"],"created_at":"2025-02-16T18:01:11.861Z","updated_at":"2026-07-14T07:33:02.194Z","avatar_url":"https://github.com/tech-gian.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 2020 Oop Project - Team Exercise\n\n## ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ - 2020/2021 - Ομαδική Εργασία\n\n\nΕκφώνηση: http://cgi.di.uoa.gr/~izambo/OOPproj_2021.pdf\n\n\n### Προσωπικά Στοιχεία\n\n__Όνομα__: Ιωάννης Ζαπάντης, Ντέιβιντ Μπούσι\n\n__Α.Μ.__: sdi1900059, sdi1900127 (αντίστοιχα με τα ονόματα)\n\n\n### Παρακάτω υπάρχει το documentation για την Υλοποίηση της Ομαδικής Εργασίας\n\n### Documentation\n\nΤο `Project` αυτό αναφέρεται στην υλοποίηση της προσομοίωσης ενός παιχνιδιού ρόλων σε C++.\nΤα 3 βασικά folders του είναι τα include, που περιλαμβάνει όλα τα header files, τα modules,\nπου περιλαμβάνει όλες τις υλοποιήσεις των συναρτήσεων των κλάσεων που χρησιμοποιήθηκαν και\nτου program, που περιλαμβάνει το αρχείο με την main συνάρτηση καθώς και ένα Makefile.\n\nΜέσα στο include folder υπάρχει ένας υποφάκελος με όνομα `Grid` και περιέχει όλους τους\nαπαραίτητους ορισμούς για τον πλέγμα του παιχνιδιού καθώς και των \"τετραγώνων\" που\nτο απεικονίζουν. Στο Grid.h υπάρχουν οι βασικές συναρτήσεις που έχει πρόσβαση\nο \"χρήστης\" μέσα από την main για την εκτέλεση του παιχνιδιού.\nΟι υλοποιήσεις τους με αναλυτικά σχόλια, βρίσκονται στο modules/Grid/Grid.cc .\nΚάθε τετράγωνο του πλέγματος είναι ένα Square, του οποίου το header file βρίσκεται\nστο include/Grid/Square.h και η υλοποίηση των συναρτήσεων (κυρίως βοηθητικών) μαζί με\nαναλυτικά σχόλια βρίσκονται στο modules/Grid/Square/Square.cc .\n\nΣτα ίδια folders (για τα headers και για τα .cc) υπάρχουν και οι ορισμοί των παιδιών-κλάσεων\n(χρήση κληρονομικότητας) των `Square`. Αυτά είναι το Market, το Common και το nonAccessible.\nΗ λειτουργία του καθενός αναλύεται εκτενώς στην εκφώνηση της εργασίας. Επίσης στις υλοποιήσεις των\nσυναρτήσεων, όπως και στους ορισμούς των κλάσεων υπάρχουν σχόλια που εξηγούν οποιαδήποτε ασάφεια υπάρξει.\n\nΣτο folder του `include` υπάρχει ο υποφάκελος `Item` που περιέχει το Item.h, Armor.h,\nPotion.h και Weapon.h . Το Item.h περιγράφει την βασική κλάση που περιέχει όλα τα στοιχεία\nκαι συναρτήσεις που είναι απαραίτητα για την δημιουργία κάθε είδους αντικειμένου, καθώς και\nγια την γενική τους συμπεριφορά. Πρόκειται για μια abstract κλάση. Τα παιδιά της (που κληρονομούν απο την Item)\nείναι τα Armor, Potion και Weapon. Η καθεμία από αυτές έχει έξτρα στοιχεία και έξτρα συναρτήσεις προσαρμοσμένες\nγια τις ανάγκες του καθενός είδους αντικειμένου. Οι υλοποιήσεις και των 4 header files βρίσκονται\nστον υποφάκελο του modules με όνομα Item. Λεπτομέρειες ως προς το αλγοριθμικό κομμάτι του κάθε αρχείου,\nυπάρχουν στα σχόλια του καθενός και για αυτό προτιμήθηκε να μην αναφερθούν και εδώ.\n\nΚάθε ήρωας (Paladin, Sorcerer, Warrior) αποτελεί μία υποκλάση της κλάσης Hero. Στο Hero.cc υπολοιούνται όλες οι συναρτήσεις\nπου κληρονομούν οι ήρωες, ενώ στα Paladin.cc, Sorcerer.cc, Warrior.cc υλοποιείται η pure virtual συνάρτηση level_up της Hero,\nώστε όταν οι ήρωες ανεβαίνουν επίπεδο, να αυξάνονται περισσότερο τα στατιστικά στα οποία είναι ευνοημένοι.\n\nΚάθε τέρας (Dragon, Exoskeleton, Spirit) αποτελεί μία υποκλάση της κλάσης Monster.\n\nΤα ξόρκια (FireSpell, IceSpell, LightningSpell) αποτελούν υποκλάσεις της κλάσης Spell.\n\nΚατά την διαδικασία προσθήκης όπλου σε ήρωα γίνεται ο συμβιβασμός ότι το πρώτο όπλο του ήρωα θα μπει\nστο αριστερό του χέρι. Με αυτόν τον τρόπο αρκεί σε κάθε επόμενη προσθήκη όπλου να ελέγχεται αν το όπλο\nστο αριστερό του χέρι ή το όπλο που πρόκειται να προστεθεί απαιτούν δύο χέρια. Σε αυτήν την περίπτωση,\nτο νέο όπλο αντικαθιστά το όπλο του αριστερού χεριού. Αντίθετα, αν το όπλο στο αριστερό χέρι του ήρωα\nδεν απαιτεί την χρήση του δεξιού χεριού και το νέο όπλο μπορεί να χειριστεί από ένα χέρι, τότε\nτο νεό όπλο αντικαθιστά το όπλο του δεξιού χεριού.\n\nΣε κάθε αλλαγή όπλου ή ασπίδας, το αντικείμενο που αντικαθίσταται αποθηκεύεται στο\ninventory του ήρωα για πιθανή μελλοντική χρήση.\n\nΚατά την επίθεση ενός τέρατος σε έναν ήρωα ελέγχεται αν ο ήρωας διαθέτει ασπίδα. Αν έχει, η ασπίδα\nαπορροφά το ποσό ζημιάς που προκαλεί το τέρας και μπορεί να απορροφηθεί, ενώ το υπόλοιπο ποσό ζημιάς\nτο χρεώνεται η ζωή του ήρωα. Αν δεν έχει ασπίδα, ολόκληρο το ποσό ζημιάς το χρεώνεται ο ήρωας.\n\nΚάτι αντίστοιχο συμβαίνει και με τα τέρατα, όπου το ποσό άμυνας το οποίο αϕαιρείται από τη ζημιά\nπου δέχονται σε μια επίθεση των ηρώων χρησιμεύει ουσιαστικά σαν ασπίδα.\n\nΚατά την επίθεση ενός ήρωα ή τέρατος, αποφασίζει η Common αν θα προκληθεί ζημιά στον αντίπαλο,\nλαμβάνοντας υπόψιν την ευκινησία του ήρωα και την ικανότητα αποφυγής μίας επίθεσης των τεράτων.\nΟ λόγος είναι ότι κάθε ζωντανό ων επιθυμεί να αποφύγει όλες τις επιθέσεις, επομένως είναι δικαιότερο η\nCommon να αποφασίζει αν τελικά θα προκληθεί επίθεση, \"ως αντικειμενικός κριτής\".\nΟμοίως, έλεγχοι για το αν ο ήρωας διαθέτει χρήματα για την αγορά ενός αντικειμένου και το ποσό ζημιάς\nπου προκαλείται σε μία επίθεση αποφασίζονται από την Common, αφού οι κλάσεις τής παρέχουν\nτους απαραίτητους getters, ώστε να είναι αυτό δυνατό.\n\nΤα ποσά που δεν προσδιορίζονται από την εκφώνηση (πχ η τιμή αντικειμένων στην αγορά,\nτο αρχικό ποσό χρημάτων που διαθέτουν οι ήρωες κλπ) ορίζονται ως σταθερές στο αρχείο\nconstants.h που βρίσκεται στον φάκελο include.\n\nΓια τα ονόματα όλων των αντικειμένων γίνεται χρήση των βοηθητικών αρχείων που βρίσκονται στον φάκελο samples.\n\n- Στο folder με όνομα `program`, υπάρχει το `main.cc` και ένα `Makefile`.\n\n- Στο main.cc υπάρχει η main συνάρτηση που ο χρήστης παίζει το παιχνίδι. Αρχικά, η main δημιουργεί 3 ήρωες\nκαι στην συνέχεια δημιουργεί τον χώρο του παιχνιδιού (grid). Ύστερα ξεκινάει ένα while loop\nπου λήγει μόνο όταν ο χρήστης επιλέξει να τερματίσει το παιχνίδι. Σε διαφορετική περίπτωση δίνονται\nόλες οι επιλογές στον χρήστη να μετακινηθεί, αν δει τους ήρωές του με τα αντικείμενά τους κλπ.\n\n- Στο Makefile υπάρχουν κάποιες απλές εντολές. Αυτές χρησιμεύουν στη μεταγλώττιση,\nστο τρέξιμο του προγράμματος και στον καθαρισμό των αρχείων που δημιουργήθηκαν.\nΜε την εντολή make γίνεται η μεταγλώττιση, με το run τρέχει το πρόγραμμα,\nμε το clean διαγράφονται όλα τα αρχεία που δημιουργήθηκαν\nκαι με το valgrind γίνεται έλεγχος για leaks (δεν υπάρχουν).\n\n### Μεταγλώττιση και εκτέλεση\n\nΗ πλήρης εντολή μεταγλώττισης είναι: g++ -o main main.cc (όλα τα υπόλοιπα αρχεία)  \nΗ εντολή για να τρέξει το πρόγραμμα είναι: `./game` ή, με την βοήθεια του Makefile τρέχοντας, `make run` στον φάκελο `program`.  \nΠιο λεπτομερής περιγραφή αυτών φαίνονται στο Makefile.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftech-gian%2Foopproj_2021","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftech-gian%2Foopproj_2021","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftech-gian%2Foopproj_2021/lists"}