---
# System prepended metadata

title: Dokumentacja Risk

---

# 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