---
# System prepended metadata

title: Dokumentacja projektu
tags: [PO]

---

---
title: Dokumentacja projektu 
tags: PO
author: Mateusz Reis
---

# Dokumentacja projektu 
>autor : Mateusz Reis 
### Game
* Klasa game to klasa obsługująca główne menu, stąd można przejść do rozgrywki, 
sprawdzić instrukcje lub autorów oraz zakończyć grę.  
### MainLoop
* MainLoop to trzon rozgrywki, obsługuje ruchy gracza, 
steruje przeciwnikami, zmienia poziomy oraz 
przekazuje sterowanie do innych klas takich jak: Inventory czy Hero. 
Podczas jednego obrotu pętli w metodzie play, odczytuje ruch gracza, 
analizuje i wykonuje ruch przeciwnikow oraz przekazuje okno do wszytskich klas, 
które mają swój graficzny obiekt, aby mogły go narysować a następnie wyświetla 
pełne okno rozgrywki dla użytkownika.
Pozostałe metody:
moveenemies - porusza przeciwnikami 
isok - sprawdza czy ruch gracza spowoduje przejscie do kolejnego pomieszczenia 
distance - sprawdza czy gracz i przeciwnik są obok siebie 
isenemy - zwraca indeks przeciwnika którego gracz atakuje 
makeenemies - tworzy nowych przeciwnikow podczas przejscia do nowego pomieszczenia 
nextemove - generuje ruch przeciwnikow 
### Room
* Klasa Room odpowiada za poziomy po których porusza się gracz.
Metoda draw rysuje cały poziom w oknie 
isvalidmove sprawdza czy ruch gracza jest poprawny
genboard generuje plansze i dla każdego pola wybiera wartość od 0 do 2, gdzie
 0 - puste pole, po którym obiekty Entity nie mogą sie poruszać 
 1 - zwykłe pole, po którym wszytskie obiekty mogą sie poruszać 
 2 - pole z przedmiotem, na które wejść może tylko gracz
validemove - sprawdza czy ruch przeciwnika jest poprawny 
drawexits - pomocnicza metoda, która rysuje wyjścia z pomieszczenia 
### Item
 * Klasa Item reprezentuje przedmiot w ekwipunku gracza. 
Posiada statystyki odpowiadająca tym u gracza oraz metodę draw, która rysuje graficzny wygląd przedmiotu 
wraz z statystykami.
### Inventory
* Klasa odpowiadająca za ekwipunek gracza przechowuje maksymalnie 21 obiektów klasy Item. 
Metoda lookatitems przejmuje sterowanie od mainloop, 
rysuje ekwipunek i pozwala graczowi założyć lub usunąć zebrane wcześniej przedmioty.
add przyjmuje podniesiony przedmiot i dodaje go do ekwipunku.
Metody getit*** zwracają statystki aktualnie noszonych przez gracza przedmiotów
Metoda delit usuwa przedmiot z ekwipunku. 
Metoda equip dodaje do aktualnie noszonych przez gracza przedmiotów, przedmiot wybrany z ekwipunku  
### Gui
* Klasa Gui reprezntuje interfejs, wyświetlany podczas rozgrywki, 
pokazuje aktualny stan zdrowia i doświadczenia gracza oraz 
obsługuje listę zdarzeń wypisując ostatnie 10 wiadomości wysłanych przez obiekty.  
Metoda draw rysuje interfejs w oknie podanych jako argument.
Metoda addmsg przyjmuje wiadomości od innych klas jako obiekt klas String i dodaje go do kolejki.
W razie przepełnienia usuwa najstarsze wiadomości. 
### Enemy
* Klasa reprezentująca przeciwnika, dzidziczy po klasie Entity.
Metoda attack odpowiada za atak na graczu i wypisanie komunikatu na 
liscie zdarzen w gui.
Metoda isdead zwraca wartość prawda/fałsz w zależności od zdrowia przeciwnika.
### Entity
* Klasa Entity reprezentuje byt w grze taki jak gracz lub przeciwnik.
 Implementuje metody:
 hit ~ odpowiada za otrzymanie obrazeń,
  przy odpowiedniej przewadze obiekt może uniknąć obrażeń, 
  co jest reprezentowane jako otrzymanie 0 punktów obrażeń 
 draw ~ rysuje graficzny wygląd obiektu w oknie
 move ~ przemieszcza obiekt po planszy, 
  poniewaz plansza sklada sie z pol, 
  przesuwanie graczy i przeciwnków wygląda tak samo  
### Hero
*  Klasa gracza, dziedziczy po Entity pola ze statystykami oraz metody draw i move.
  Hero nadpisuje metode hit ponieważ gracz oprócz własnych statystyk 
  posiada również dodatkowe punkty za przedmioty które nosi.
  Metoda addexp odpowiada za przyjmowanie punktow doswiadczenia i podnoszenie poziomu gracza.
  upgradehero to metoda, która przejmuje sterowanie od klasy mainloop i rysuje menu gracza 
    w którym użytkownik może rozdzielić punkty statystyk 
    pryznawane za zdobycie kolejnego poziomu doświadczenia.   


