# 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