# Dokumentacja Risk
Klasy
---
### Risk
#### Opis
- Główna pętla gry
- Zawiera obiekty klas: Map, Players
- Zawiera dwa przyciski (klasa TextButton): exit_button oraz next_phase_button
- Odpowiedzialna za inicjalizację gry (wczytanie grafik, losowanie regionów i oddziałów, ustawienie właściwości okna), aktualizację stanu gry (metody: update, button_up) oraz rysowanie jej elementów (metoda draw)
#### Metody
- update
- Wywołanie players.update
- Sprawdzenie warunku zwycięstwa
- draw
- Wywołanie map.draw, next_phase_button.draw, exit_button.draw, players.draw
- button up (wywoływana przy puszczeniu klawisza)
- Wyjście z gry jeśli exit_button został kliknięty
- Zmiana fazy aktualnego gracza na następną jeśli next_phase_button został kliknięty
- Wywołanie metody event dla aktualnego gracza (players.current.event)
---
### Map
#### Opis
- Zawiera obiekty wszystkich kontynentów oraz grafikę tła
#### Metody
- assign borders
- Przypsanie granic pomiędzy regionami łączącymi różne kontynenty, czego nie da się zrobić z poziomu klasy Continent
- all_regions
- Zwraca tablicę zawierającą wszystkie regiony
- draw
- Rysuje tło oraz wywołuje metodę draw dla każdego kontynentu
---
### Continent
#### Opis
- Jest zbiorem regionów
- Posiada wartość, która jest wykorzytywana podczas przydzielania oddziałów
- Klasy NorthAmerica, Europe itp. dzieciczą po klasie Continent
#### Metody
- assign_borders_inside
- Przypisuje granice pomiędzy regionami leżącymi na danym kontynencie
- draw
- Wywołuje metodę draw dla każdego regionu (draw_highlighted, jeśli region jest wybrany przez gracza)
---
### Region
#### Metody
- attack
- Metoda, wokół której toczy się praktycznie cała gra
- Odejmuje po jednym oddziale losowemu regionowi ze zbioru atakującego i atakowanego, dopóki jeden z nich nie będzie miał czym walczyć
- Jeśli atakowany region przegra, jest mu przypisywany gracz posiadający region atakujący
- Element losowości sprawia, że rozgrywka jest ciekawsza, pozwala na nieoczekiwane zwroty akcji
- Zwraca :victory lub :defeat w zależności od wyniku bitwy
- transport_troops
- Transportuje daną liczbę oddziałów (domyślnie 1) do wybranego regionu
- neighbor?
- Zwraca czy dany region jest sąsiadem
- add_neighbor
- Dodaje dane regiony do zbioru sąsiadów
- enemy?
- Zwraca czy dany region jest okupowany przez innego gracza
- enemy_neighbors
- Zwraca zbiór sąsiadów okupowanych przez innych graczy opakowany w obiekt klasy Regions
- ally?
- Zwraca czy dany region jest okupowany przez tego samego gracza
- ally_neighbors
- Zwraca zbiór sąsiadów okupowanych przez tego samego gracza opakowany w obiekt klasy Regions
- connected_allies
- Zwraca zbiór regionów, do których "można się dostać" przechodząc jedynie przez regiony okupowane przez tego samego gracza
- Implementacja nie jest niestety optymalna i przy dużej ilości regionów posiadanych przez gracza zawiesza grę na ok. sekundę.
- add_troops
- Dodaje daną liczbę oddziałow do regionu (domyślnie 1)
- remove_troops
- Usuwa daną liczbę oddziałów z regionu (domyślnie 1)
- clicked?
- Sprawdza, czy odległośc myszki od liczby oddziałow na ekranie przy kliknięciu była wystarczająco mała
- change_player
- Usuwa region ze zbioru regionów dotychczasowego jego posiadacza i przypisuje nowemu
- player?
- Zwraca czy region jest okupowany przez gracza
- draw
- Rysuje grafikę regionu w kolorze gracza, który go okupuje
- draw_highlighted
- Rysuje grafikę regionu w rozjaśnionym kolorze gracza, który go okupuje (symbolizuje aktualny wybór)
- img_name
- Przekształca nazwę regionu na nazwę pliku .png z jego grafiką
- to_s
- Zwraca nazwę regionu
---
### Regions
#### Opis
- Pełni funkcję zbioru regionów podobnie jak Continent, lecz ma inne przeznaczenie
- Wykorzytywany do łatwej obsługi zbioru regionów, które np. nie leżą na tym samym kontynencie
- Korzystanie z niego jest dużo łatwiejsze niż ze zwykłej tablicy
- Zawiera obiekt klasy TransportManager
#### Metody
- count
- Zwraca liczbę regionów
- add
- Dodaje dane regiony do zbioru
- include?
- Zwraca czy zbiór zawiera dany region
- clicked
- Zwraca kliknięty region
- any_clicked?
- Zwraca czy któryś region został kliknięty
- choose
- Zapisuje dany region jako aktualnie wybrany
- choose_clicked
- Zapisuje kliknięty region jako aktualnie wybrany
- unchoose
- Sprawia, że żaden region nie jest zapisany jako wybrany
- any_chosen?
- Zwraca czy jakiś region jest aktualnie wybrany
- start_transport
- Oznacza dane regiony jako "nadawcę i odbiorcę" oddziałów
- Resetuje transport_manager
- end_transport
- Usuwa oznaczenie "nadawcy i odbiorcy"
- any_transport?
- Zwraca czy aktualnie istnie jakiś "nadawca i odbiorca"
- transporter
- Zwraca region, który jest "nadawcą"
- receiver
- Zwraca region, który jest "odbiorcą"
- transport_event
- Przeprowadza transport oddziałów, jeśli gracz potwierdził swój wybór
- W przeciwnym przypadku wywołuje transport_manager_event
- to_arr
- Zwraca tablicę przetrzymywanych regionów
- delete
- Usuwa dany region
- without
- Zwraca tablicę bez danego regionu nie usuwając go
- sample
- Zwraca losowy region
---
### TransportManager
#### Opis
- Reprezentuje wybór gracza, co do ilości oddziałów podczas transportowania ich pomiędzy regionami lub przydzielania ich w pierwszej fazie tury
- Zawiera przyciski: confirm, plus, minus (obiekty klasy TextButton)
#### Metody
- turn_on
- Ustawia wybór na 1 oddział i przypisuje daną maksymalną ilość oddziałów do wyboru
- draw
- Rysuje aktualnie wybraną liczbę oddziałow oraz przyciski
- add
- Dodaje 1 do aktualnego wyboru (ustawia 1 jeśli nie można wybrać więcej)
- sub
- Odejmuje 1 od aktualnego wyboru (ustawia maksymalny wybór jeśli nie można wybrać mniej)
- event
- Wywołuje add lub sum w zależności od tego, który przycisk został kliknięty (plus czy minus)
- clicked?
- Zwraca czy któryś przycisk został kliknięty
---
### Players
#### Opis
- Zawiera obiekty klasy Player
- Opakowuje tablicę graczy w metody ułatwiające ich obsługę
#### Metody
- distribute_regions
- Losuje regiony pomiędzy graczy
- distribute_troops
- Przydziela daną liczbę oddziałów na każdego gracza (domyślnie 30) do posiadanych przez niego regionów (również losowo).
- get
- Zwraca gracza o danym indeksie
- current
- Zwraca gracza, do którego należy aktualna tura
- next
- Ustawia następnego gracza jako aktualnego
- count
- Zwraca liczbę graczy
- update
- Usuwa graczy, którzy nie posiadają regionów (przegranych)
- Zmienia fazę aktualnego gracza z przydzielania oddziałow na atakowanie, jeśli wykorzytał już posiadane oddziały
- Wywołuje self.next jeśli aktualny gracz skończył turę
- draw
- Rysuje teks informujący o tym, który gracz wykonuje aktualnie swoją turę
- Wywołuje metodę draw aktualnego gracz
- to_arr
- Zwraca tablicę graczy
---
### Player
#### Opis
- Zawiera informacje na temat gracza takie jak kolor, oddziały do rozdysponowania, informacja o tym czy podbił jakiś region w aktualnej turze, faza tury, posiadane regiony oraz karty
#### Metody
- start_turn
- Ustawia fazę na pierwszą
- Dobiera kartę jeśli w poprzedniej turze gracz podbił jakiś region
- Dodaje liczbę oddziałów do rozdysponowania w zależności o liczby posiadanych regionów oraz kontynentów
- end_turn
- Zwraca czy wszystkie fazy zostały zakończone
- next_phase
- Zmienia fazę na następną
- add_troops
- Dodaje daną liczbę oddziałow graczowi (domyślnie 1)
- troops_avail?
- Zwraca czy gracz ma jakieś oddziały do rozdysponowania.
- occupy?
- Zwraca czy gracz okupuje dane regiony
- territory_award
- Przydziela graczowi oddzialy za posiadane kontynenty
- add_region
- Dodaje dany region do zbioru posiadanych przez gracza
- withdraw?
- Zwraca czy gracz przegrał (posiada 0 regionów)
- event
- Najważniejsza i najbardziej rozbudowana metoda
- Dzieli się na 3 części w zależności od fazy
- Obsługuje wszystkie kliknięcia w trakcie gry
- Wykonuje odpowiednie akcje wedle zasad gry zgodnie z wyborami graczy
- Dodawanie oddziałów wybranym regionom
- Wymiana kart na oddziały
- Atakowanie innych regionów
- Transportowanie oddziałow do podbitych regionów
- Przejmowanie kart pokonanych gracz
- Transportowanie pomiędzy połączonymi regionami podczas trzeciej fazy
- draw
- Rysowanie liczby pozostałych oddziałow podczas pierwszej fazy
- Rysowanie transport managera podczas transportu oddziałów
- Rysowanie kart
- Rysowanie informacji o aktualnej fazie tury
- to_s
- Zwraca nazwę gracza (jego kolor)
---
### Cards
#### Opis
- Trzyma liczbę poszczególnych kart posiadanych przez gracza oraz wartości ich wymiany w przeliczeniu na oddziały
- Wykorzystuje do tego słowniki (rodzaj: liczba, rodzaj: wartość)
- Zawiera przycisk exchange_button (obiekt klasy TextButton)
#### Metody
- draw_card
- Dodaje losową kartę
- can_exchange
- Zwraca czy gracz posiada wystarczającą ilość kart do wymiany (3 takie same lub przynajmniej 1 każdego rodzaju)
- exchange
- Zwraca liczbę oddziałów odpowiadającą najbardziej opłacalnej możliwej wymianie kart
- Usuwa wymienione karty ze zbioru
- infantry
- Zwraca liczbę kart typu "piechota"
- cavalry
- Zwraca liczbę kart typu "kawaleria"
- artillery
- Zwraca liczbę kart typu "artyleria"
- draw
- Rysuje liczby poszczególnych kart oraz przycisk exchange, jeśli istnieje możliwość wymiany
- exchange_clicked?
- Zwraca czy exchange_button został kliknięty
- merge
- Dołącza dane karty do aktualnie posiadanych
---
### Text
#### Opis
- Ułatwia korzystanie z klasy Font z biblioteki Gosu
- Daje możliwość ustawienia stałego tekstu, którego nie trzeba podawać przy metodzie draw
#### Metody
- draw
- Rysuje dany tekst ze specyfikacją podaną przy inicjalizacji (wielkość, pozycja)
---
### TextButton
#### Opis
- Daje możliwość korzystania z klasy Font z biblioteki Gosu w formie przycisku
#### Metody
- draw
- Rysuje tekst zgodnie ze specyfikacją podaną przy inicjalizacji oraz jego tło, gdy zostanie najechany myszką
- clicked?
- Zwraca czy przycisk został kliknięty
---
### Color
#### Opis
- Ułatwia korzystanie z klasy Color z biblioteki Gosu
#### Metody
- get
- Zwraca kolor w formie wymaganej przez Gosu do metod rysujących
- lighten
- Zwraca rozjaśniony kolor w formie wymaganej przez Gosu do metod rysujących
#### Stałe
- Klasa posiada gotowe stałe, które są jej instancjami, co ułatwia korzytanie z niej (zamiast ręcznie podawać kodowanie rgb, można napisać Color::RED)
Moduły
---
### Window
- Stałe opisujące okno gry
- Szerokość
- Wysokość
- Punkt centralny osi x
- Punkt centralny osi y
### ZOrder
- Stałe określające kolejnośc rysowania warstw
- Tło
- Region
- Tło tekstu
- Tekst
### Message
- Metody wypisujące najważniejsze zdarzenia z gry na konsolę
- Rozdawanie oddziałów
- Podbijanie
- Transport oddziałów
- Wymiana kart
- Porażka gracza
- Zwycięstwo gracza