Politechnika Warszawska Wydział Elektryczny 1DR1630:A - Projekt inżynieryjno-techniczny Turowa gra wieloosobowa w postaci pliku wykonywalnego Adam Nykiel numer albumu 311280 opiekun dr inż. Andrzej Kalicki WARSZAWA 2023 Spis treści 1. Wstęp 3 2. Opis zagadnienia – gra Monopoly 3 2.1. Opis gry 3 2.2. Plansza 3 2.3. Zasady gry 5 3. Zastosowane technologie 6 3.1. Unity (silnik gry) 6 3.2. Visual Studio Code 6 3.3. WinRar 7 3.4. GIMP i Paint 7 3.5. CloudConvert 7 4. Realizacja założeń projektu 8 4.1. Opis algorytmu kontroli grą i kluczowe elementy aplikacji 8 4.1.1. Opis algorytmu sterowania przebiegiem rozgrywki za pomocą grafów 8 4.1.2. Opis elementów gry i sterowania nimi z przedstawieniem zastosowanych metod. 11 4.2. Składniki projektu 15 4.3. Sposób uruchomienia i testowania aplikacji 16 5. Podsumowanie 28 5.1. Zrealizowane funkcjonalności 28 5.1.1. Związane z uruchomieniem gry: 28 5.1.2. Związane z implementacją zasad gry: 28 5.1.3. Związane z przyjemnym dla użytkownika interfejsem: 29 5.2. Krytyka 30 5.3. 6. Pomysł na dalszy rozwój. Bibliografia 31 30 1. Wstęp Gry planszowe od lat cieszą się niezmienną popularnością, jednak wraz z rozwojem nowoczesnych technologii, świat gier planszowych uległ znacznej transformacji. Dzięki możliwościom jakie oferują cyfrowe wersje gier planszowych, gracze zyskują nowe możliwości, a producenci rozszerzają swoje rynki zbytu. Przykładem jednej z takich gier jest popularna gra planszowa Monopoly, która doczekała się swojej cyfrowej wersji w postaci aplikacji. W ramach niniejszej pracy została stworzona turówka w postaci pliku wykonywalnego, bazująca na Monopoly. Głównym celem projektu było skonstruowanie interaktywnej rozgrywki, zapewniającej użytkownikom pełne wrażenia z gry. Pomimo osiągnięcia w tym zakresie pewnych sukcesów, aplikacja wciąż posiada kilka niezaimplementowanych funkcjonalności, które są kluczowe dla pełnego odwzorowania gry planszowej. W kolejnych sekcjach pracy, opisano kroki podjęte w celu stworzenia gry w wersji cyfrowej, wraz z omówieniem technicznych aspektów tworzenia aplikacji. Zaprezentowano również interfejs aplikacji oraz funkcjonalności, które zostały już zaimplementowane, a także te, które są w planach na przyszłość. Niniejsza praca ma na celu dostarczenie interesujących informacji dla miłośników gier planszowych oraz zainspirowanie ich do tworzenia własnych wersji cyfrowych swoich ulubionych planszówek. 2. Opis zagadnienia – gra Monopoly 2.1. Opis gry [1] Monopoly to gra planszowa, w której gracze konkurują o pomnażanie swojego majątku poprzez kupowanie i handlowanie nieruchomościami, jak również pobieranie czynszu od pozostałych graczy. Gra polega na poruszaniu się po planszy i kupowaniu dostępnych nieruchomości. Istnieje również bank, który pełni różne role, takie jak udzielanie kredytów, wypłacanie pensji, pobieranie podatków i innych opłat. Celem graczy jest doprowadzenie swoich rywali do bankructwa, poprzez odpowiednią inwestycję i zarządzanie pieniędzmi. W miarę osiągania sukcesu, gracze mogą przejąć nieruchomości swoich bankrutujących przeciwników. Ostatni gracz pozostający na planszy staje się monopolistą i wygrywa grę. Monopoly ma wiele różnych wersji, w tym te, w których można korzystać z kart kredytowych. Wiele innych gier planszowych, takich jak Fortuna czy Eurobiznes, zostało zainspirowanych przez Monopoly. 2.2. Plansza Plansza do gry składa się z 40 pól, w tym 28 nieruchomości i 12 pól specjalnych, ułożonych w formie kwadratu. Na planszy znajdują nieruchomości reprezentowane w trzech postaciach: miasta, ośrodki transportu i multimedia. Miasta podzielone są na 8 kolorowych obszarów: • brązowy: Świętochłowice, Bełchatów, • błękitny: Warszawa, Lublin, Katowice, • różowy: Toruń, Rybnik, Łódź, • pomarańczowy: Chojnice, Elbląg, Szczecin, • czerwony: Zielona Góra, Bydgoszcz, Tarnów, • żółty: Piotrków Trybunalski, Wrocław, Kalisz, • zielony: Kraków, Gdynia, Poznań, • niebieski: Gorzów, Białystok. Występują 4 ośrodki transportu: Dworzec kolejowy, Lotnisko, Dworzec Metra, Port Morski; oraz 2 rodzaje multimediów: Telefonia komórkowa, Portal społecznościowy. Ponadto na planszy znajdują się pola specjalne, takie jak Kasa Społeczna, Szansa, Podatek dochodowy, Domiar podatkowy, Więzienie (W więzieniu / Tylko odwiedzający), Darmowy parking oraz Idź do więzienia. Na planszy, poza nazwą i kolorem pola, możemy także odczytać jego numer oraz w przypadku nieruchomości także cenę zakupu. Poniżej znajduje się rysunek przedstawiający opisaną powyżej pustą planszę do gry. Rys. 1 Plansza do gry Monopoly. 2.3. Zasady gry [1] • Informacje ogólne: gra polega na handlu nieruchomościami i spekulacjach. Gracze przemieszczają się po planszy zgodnie z ruchem wskazówek zegara i kupują dostępne obiekty. Kiedy gracz staje na polu, które należy do innego gracza, musi zapłacić mu czynsz. Wysokość czynszu zależy od rodzaju nieruchomości i liczby domów lub występowania hotelu na tym polu. W przypadku braku środków, bank może udzielić pożyczek pod zastaw nieruchomości, natomiast żaden zawodnik nie może drugiemu udzielić pożyczki ani darowizny. Celem gry jest doprowadzenie przeciwników do bankructwa i zostanie ostatnim graczem pozostającym na planszy. • Przygotowanie gry: przy polu start umieszcza się od jednego do sześciu pionków, w zależności od liczby zawodników. Karty „Szansa” i „Kasa Społeczna”, są w losowej kolejności ustawiane na stosach, wewnątrz dedykowanych pól umieszczonych na środku planszy. Każdy gracz otrzymuje kapitał startowy wysokości 15 M. Początkowo to bank zarządza kartami własności aż do czasu ich wykupienia przez graczy. Bank dokonuje wypłat pensji i premii, pobiera podatki, udziela pożyczek pod zastaw, zbiera odsetki od pożyczek hipotecznych oraz pobiera opłaty karne. Bank ma nieograniczone środki i nie może zbankrutować. • Poruszanie się po planszy: gracze poruszają się po kolei od pierwszego do ostatniego. Każdy gracz rzuca dwiema kośćmi i przesuwa swój pionek o tyle pól, ile wynosi suma oczek na kostkach. W przypadku dubletu gracz zyskuje dodatkowy rzut, a tym samym możliwość przesunięcia się o większą liczbę pól. Dwa dublety z rzędu prowadzą do pójścia do więzienia. • Zakup nieruchomości: kiedy gracz stanie na wolnym, jeszcze niewykupionym polu, może wykupić daną nieruchomość albo wystawić ją na aukcję. Kupując nieruchomość, płaci należność do banku i otrzymuje kartę potwierdzającą zakup. W przypadku wystawienia na licytację, obiekt kupuje gracz, który zaproponuje najwtższą cenę. • Czynsz: gdy gracz stanie na polu, którego właścicielem jest inny gracz, zobowiązany jest zapłacić mu czynsz. Brak możliwości zapłaty prowadzi do sprzedaży wszystkich posiadłości do banku, przekazania zgromadzonej gotówki wierzycielowi, bankructwa i wycofania się z gry. • Więzienie: gracz może trafić do więzienia na trzy sposoby: stanąć na polu 31 „Idź do więzienia”, wyrzucić dublet dwa razy z rzędu, wylosować odpowiednią kartę typu „Szansa” lub „Kasa Społeczna”. Do więzienia idzie się „bezpośrednio”, co znaczy, że gracz nie przechodzi przez „Start” i nie otrzymuje premii. Kara więzienia obejmuje trzy tury, w czasie których więzień nie pobiera czynszu od innych graczy, którzy staną na jego nieruchomości. Gracz może wyjść z więzienia na cztery sposoby: odbyć karę więzienia trwającą trzy kolejki, skorzystać z karty „Wyjście z więzienia”, opłacić kaucję lub wyrzucić dublet. • Szansa i Kasa Społeczna: zawodnik, który stanie na polu "Szansa" lub "Kasa Społeczna", losuje kartę z odpowiedniego zestawu i wykonuje czynność, którą ta karta nakazuje. Następnie karta odkładana jest na spód danego stosu. • Podatki: plansza ma dwa pola związane z podatkami, na których gracz musi zapłacić ustaloną kwotę lub zbankrutować. • Domy i Hotele: gracz posiadający wszystkie pola z danego koloru pobiera podwójny czynsz, gdy są one nierozbudowane. Dodatkowo, może budować na nich domy i hotele, aby jeszcze bardziej zwiększyć opłatę pobieraną od innych graczy. Limit domów na jednej nieruchomości wynosi 4, a wymiana ich na hotel jest możliwa po wykupieniu czterech domków i dopłacie za jeszcze jeden. Gracz posiadający monopol na danym kolorze, może w swojej turze rozbudować dowolną liczbę pól o nie więcej niż wartość jednego domu. • Premie: za przejście przez linię startu gracz pobiera z banku premię wysokości 2 M. • Kredyt: gdy gracz zmuszony jest dokonać opłaty, na którą brak mu gotówki, bank może udzielić mu kredytu pod zastaw. Otrzymuje wówczas kwotę równą połowie wartości danej nieruchomości i nie pobiera już za nią czynszu. Późniejsze odstawienie nieruchomości wiąże się z dodatkową opłatą wysokości 10 % od wartości zastawu. Zastawić można wyłącznie nierozbudowane pola. Gracz może również sprzedawać hotele i domy do banku po połowie ceny zakupu. Ostatecznie bank może także odkupić nieruchomość od gracza. Jest to jednak możliwe dopiero gdy wszystkie jego posiadłości zostały już zastawione. • Zakończenie gry: gra kończy się, gdy wszyscy zawodnicy zbankrutują, poza jednym, który zostaje zwycięzcą. Istnieje również możliwość przerwania rozgrywki w dowolnym momencie. Wówczas wygrywa zawodnik, który zgromadził największy majątek. 3. Zastosowane technologie Do stworzenia gry Monopoly wykorzystano silnik Unity, który jest jednym z najpopularniejszych silników do tworzenia gier. Zastosowanie Unity umożliwiło dostęp do narzędzi pozwalających na łatwe tworzenie grafiki, animacji oraz programowania interaktywnych elementów gry, a ostatecznie także zbudowania niezależnej aplikacji na komputer. Skrypty pisane były w języku programowania C# z wykorzystaniem środowiska .NET w oparciu o edytor Visual Studio Code. Do spakowania katalogu utworzonego z pomocą Unity w pojedynczy plik wykonywalny posłużył program WinRar. Plansza oraz znajdujące się na niej stosy kart powstały z użyciem narzędzi graficznych GIMP oraz Paint. Do utworzenia własnej ikony pliku wykonywalnego zastosowano dostępny on-line konwerter plików CloudConvert. 3.1. Unity (silnik gry) [2] Silnik Unity to potężne i wszechstronne oprogramowanie służące do tworzenia gier wideo i aplikacji interaktywnych. Dzięki niemu możliwe jest projektowanie, tworzenie, testowanie i publikowanie gier na różnych platformach, takich jak komputery osobiste, konsole, urządzenia mobilne oraz Internet. Silnik Unity oferuje wiele gotowych narzędzi i rozszerzeń, które przyspieszają proces tworzenia gier oraz umożliwiają łatwe zarządzanie różnymi aspektami gry, takimi jak grafika, dźwięk, fizyka i sztuczna inteligencja. Silnik Unity jest bardzo popularny wśród twórców gier, zarówno w mniejszych projektach niezależnych, jak i większych projektach zespołowych. Dzięki swojej łatwości użycia, elastyczności i przyjemnym dla programisty API, silnik Unity jest często wykorzystywany do tworzenia gier wideo na całym świecie. Zastosowanie silnika Unity umożliwiło stworzenie realistycznej wirtualnej wersji popularnej gry planszowej. Liczne możliwości oferowane przez Unity, pozwoliły skupić się na projektowaniu rozgrywki i interakcji z graczami, bez konieczności programowania od podstaw całego silnika gry. Edytor umożliwił projektowanie interfejsu użytkownika, który ułatwia graczom kontrolowanie gry. Ostatecznie, z wykorzystaniem opcji budowania projektu, powstał katalog, zawierający plik wykonywalny, co oznacza utworzenie niezależnej aplikacji, możliwej do uruchomienia na dowolnym komputerze. 3.2. Visual Studio Code [3] Visual Studio Code to bezpłatny edytor kodu źródłowego, rozwijany przez Microsoft, który oferuje bogatą funkcjonalność oraz wiele rozszerzeń. Dzięki prostemu i intuicyjnemu interfejsowi, jest on jednym z najpopularniejszych edytorów kodu wśród programistów na całym świecie. Oferuje wiele narzędzi, które umożliwiają tworzenie i edycję kodu, debugowanie, integrację z różnymi narzędziami programistycznymi oraz pracę z wieloma językami programowania. W ramach projektu Monopoly, Visual Studio Code został wykorzystany do tworzenia skryptów w języku programowania C#. Dzięki zintegrowanemu środowisku programistycznemu i automatycznemu podpowiadaniu składni, pisanie kodu stało się bardziej efektywne i wydajne. Edytor umożliwił również wygodną pracę z frameworkiem .NET, który zapewnił niezbędne narzędzia do komunikacji między aplikacją a systemem operacyjnym. Dzięki użyciu Visual Studio Code, udało się efektywnie wykorzystać potencjał silnika Unity i stworzyć kompleksowe rozwiązanie, które pozwala na płynną rozgrywkę w Monopoly. Napisane z jego pomocą skrypty umożliwiły implementację różnorodnych mechanik gry, w tym zarządzanie ruchem graczy, obsługę interakcji między planszą a pionkami oraz realizację zasad gry. 3.3. WinRar [4] [5] WinRar to program do kompresji plików, który umożliwia spakowanie kilku plików i folderów w pojedynczy plik .zip lub .rar. WinRar oferuje wiele funkcjonalności, takich jak szyfrowanie plików, dzielenie plików na mniejsze części, tworzenie samorozpakowujących się archiwów oraz przywracanie uszkodzonych plików. WinRar jest popularnym programem do pakowania plików, ze względu na łatwość użycia oraz szybkość działania. Budowa aplikacji na komputer z zastosowaniem Unity typowo powoduje utworzenie katalogu z różnymi plikami i folderami. W projekcie Monopoly program WinRar został wykorzystany do spakowania powstałego katalogu z plikiem .exe w pojedynczy samorozpakowujący się plik wykonywalny oraz wybranie własnej, niestandardowej ikony. 3.4. GIMP i Paint GIMP to darmowe oprogramowanie do edycji grafiki rastrowej, które może być używane do tworzenia i edycji różnego rodzaju grafik, w tym zdjęć, ilustracji oraz tekstur. GIMP udostępnia wiele narzędzi, takich jak filtry, narzędzia klonowania, narzędzia malowania oraz wiele innych, dzięki którym możliwe jest tworzenie skomplikowanych projektów. Jest bardzo popularnym narzędziem wśród artystów, fotografów i grafików. Paint to prosty program graficzny wbudowany w system operacyjny Windows. Zawiera podstawowe narzędzia do rysowania, wypełniania kolorami oraz dodawania tekstu. Choć nie jest to zaawansowana aplikacja, jest łatwa w obsłudze i może być dobrym wyborem do szybkiego edytowania lub tworzenia prostych rysunków. GIMP i Paint zostały wykorzystane do stworzenia planszy Monopoly oraz stosów kart. W GIMPie wykonano większość prac związanych z rysowaniem planszy, takich jak kreowanie kształtów, nanoszenie kolorów, dodawanie tekstu i wstawianie grafik. Paint został wykorzystany do stworzenia niektórych prostszych elementów, takich jak pola z danymi, a także do rysowania kart. 3.5. CloudConvert [6] CloudConvert to popularna usługa online służąca do konwersji plików pomiędzy różnymi formatami. Dzięki temu narzędziu można szybko i łatwo zmienić format pliku na potrzeby danego projektu, bez konieczności posiadania specjalistycznego oprogramowania na swoim komputerze. CloudConvert oferuje obsługę ponad 200 różnych formatów plików, w tym dokumentów, zdjęć, muzyki i wideo, a także plików związanych z programowaniem. W projekcie Monopoly, usługa CloudConvert została wykorzystana do utworzenia własnej ikony pliku wykonywalnego. W celu uzyskania idealnie dopasowanej ikony, pierwotny plik graficzny został przesłany do CloudConvert, a następnie skonwertowany do formatu .ico. Dzięki temu, aplikacja posiada teraz spersonalizowaną ikonę, która wyróżnia ją na tle innych plików na komputerze użytkownika. 4. Realizacja założeń projektu 4.1. Opis algorytmu kontroli grą i kluczowe elementy aplikacji 4.1.1. Opis algorytmu sterowania przebiegiem rozgrywki za pomocą grafów Algorytm sterowania rozgrywką opisano w punktach oraz przedstawiono za pomocą grafów ukazujących odpowiednio: rozpoczęcie i zakończenie gry (Rys. 2), pojedynczą turę gracza (Rys. 3). • Po uruchomieniu aplikacji wybieramy liczbę graczy w zakresie od 1 do 6. • Tasowane są karty „Szansa” oraz „Kasa Społeczna” i umieszczane są one w postaci dwóch stosów w wyznaczonych miejscach wewnątrz planszy. • Piony zawodników umieszczane są obok planszy, przy polu „Start”. • Po prawej stronie od planszy pojawiają się ikony graczy wraz z ilością posiadanej gotówki oraz strzałka wskazująca czyja aktualnie jest tura. • Rozpoczyna się kolejka pierwszego gracza. • Pojawia się okno akcji. Przedstawione są w nim wszystkie aktualnie możliwe akcje, jakich można się podjąć. W zależności od sytuacji i etapu rozgrywki liczba i rodzaj dostępnych akcji mogą się zmieniać. • Jeżeli gracz odbywa karę więzienia, może: o pozostać w więzieniu i zakończyć swoją turę; o • o o o • • wydostać się z więzienia i przeprowadzić standardową turę. Standardowa tura odbywa się w trzech etapach: (ewentualny) wybór akcji początkowej; rzut kośćmi i przejście o liczbę wyrzuconych oczek (i/lub trafienie do więzienia); (ewentualne) przeprowadzenie akcji końcowej. Przejście do tury kolejnego gracza i powtarzanie procesu aż do końca gry. Zakończenie gry i wyłonienie zwycięzcy. Rys. 2 Schemat algorytmu rozpoczęcia i zakończenia gry. Rys. 3 Schemat przebiegu pojedynczej tury. 4.1.2. Opis elementów gry i sterowania nimi z przedstawieniem zastosowanych metod. W silniku Unity każdy element graficzny (i nie tylko) to tak zwany „obiekt gry” (game object), który ma swoje właściwości jak np.: pozycja, kolor, widoczność, aktywność, czy sterujący danym obiektem skrypt. Te elementy projektu usytuowano w hierarchicznej liście w podmenu „Hierarchy”. Tworząc katalog nowego projektu, umieszczany jest w nim podkatalog „Packages”, w którym znajduje się szeroka gama wbudowanych pakietów, znacząco ułatwiających tworzenie większości funkcjonalności budowanej aplikacji. Wszystkie pozostałe elementy, które wprowadzono do projektu samodzielnie, znajdują się w podkatalogu „Assets”. Umieszczono tam: • elementy graficzne – plansza, kości do gry, dom, hotel, znacznik pola, ikona aplikacji, grafiki kasy społecznej, szansy i zastawionej nieruchomości, • scenę (przestrzeń roboczą, w której umieszczone są komponenty aplikacji) – widok z góry na planszę, • skrypty – służące do sterowania programowalnymi obiektami gry, • dodatkowe pakiety – zbiory dodatkowych, stworzonych przez różnych użytkowników, dostępnych w sieci elementów i funkcjonalności uzupełniających te podstawowe. We wspomnianej hierarchii znajdują się kolejno następujące obiekty gry: • EventSystem - jest odpowiedzialny za obsługę i przekazywanie informacji o zdarzeniach wejściowych (takich jak kliknięcia myszy czy naciśnięcia klawiszy) do obiektów w grze. Współpracuje z różnymi komponentami, takimi jak InputManager, w celu przechwytywania i przetwarzania danych wejściowych. Pozwala na definiowanie hierarchii interaktywnych elementów UI, które mogą być wykorzystywane do przechwytywania zdarzeń wejściowych. W ten sposób umożliwia programowanie reakcji na te zdarzenia, np. poprzez uruchamianie skryptów lub zmianę stanu obiektów w grze. Dodatkowo, obsługuje także zdarzenia dotykowe na urządzeniach mobilnych oraz przesyła informacje o zmianach w interfejsie użytkownika, takie jak zmiana aktywnego elementu, do innych komponentów, które mogą na to reagować. • Main Camera - odpowiada za renderowanie widoku gry z perspektywy gracza. Jest to kamera, która śledzi ruchy gracza i umożliwia mu oglądanie gry z różnych perspektyw. Może być używana do różnych celów, takich jak renderowanie obiektów w scenie, oświetlenia, cieniowania i wiele innych. W przypadku gier 2D, Main Camera zazwyczaj jest ustawiona w takiej pozycji, że patrzy na planszę z góry, jak w opisywanej tutaj grze planszowej. Poniżej przedstawiono widok z kamery głównej, pokazujący zaawansowany etap rozgrywki: Rys. 4 Widok planszy z kamery głównej (Main Camera). • Board – zawiera nieruchome elementy planszy, niezmienne przez cały czas uruchomienia aplikacji. • Waypoints – zbiór niewidocznych punktów/pozycji na planszy, w które może udać się pionek gracza. Stosowane są one w skrypcie sterującym ruchem zawodników. Do każdego pola na planszy przypisany jest odpowiadający mu punkt. • Dices – znajdują się w nim dwa obiekty reprezentujące kości do gry. Każdy z nich ma przypisany odpowiedni skrypt, uruchamiany podczas rzutu kośćmi. W zależności od liczby wyrzuconych oczek, grafice kości przypisywany jest odpowiedni plik .png, znajdujący się w katalogu „Assets”, co przedstawiono poniżej: Rys. 5 Strony kostek do gry w postaci plików .png. • GameStart – obiekt, do którego przypisany jest skrypt „Game Start”, odpowiadający za przeprowadzenie początkowych czynności, związanych z rozpoczęciem gry. Następuje tu aktywowanie okna, w którym wybierana jest liczba graczy. Po dokonaniu tego wyboru skrypt „Game Start” powoduje aktywację następnego w hierarchii obiektu „Game Control” oraz dezaktywację własnego obiektu „GameStart”. • Game Control – przypisany jest do niego skrypt „Game Control”, który odpowiada za sterowanie przebiegiem rozgrywki. Przechowuje informacje takie jak: prędkość ruchu pionków, lista aktywnych graczy, czyja jest tura, które pola na planszy są zajęte, do kogo należą poszczególne nieruchomości. Realizuje utworzenie kolejek potasowanych kart „Szansa” i „Kasa społeczna” oraz kart własności. Kontroluje animacje przepływu gotówki oraz przebieg aukcji. Zawiera różne metody, odpowiadające między innymi za: przechodzenie do następnej tury, wykonywanie czynności zgodnie z instrukcjami znajdującymi się na odkrywanych przez zawodników kartach ze środka planszy, czy nadpisywanie wartości zmiennych, przechowujących wyżej wspomniane informacje. Odpowiada także za aktywację i dezaktywację znaczników pól . • WindowsControl – wraz z przypisanym do niego skryptem „Windows Control” sprawuje pieczę nad stale wyświetlanymi w trakcie gry oknami, w których gracze dokonują wyborów podejmowanych czynności oraz mogą odczytać informacje zawarte na kartach „Szansa” i „Kasa społeczna”. Odpowiada również za pojawianie się grafik przedstawiających zakupione domy i hotele oraz zastawione nieruchomości. • Players – znajduje się w nim sześć obiektów, reprezentujących poszczególnych zawodników. W zależności od liczby aktywnych graczy, aktywowana jest odpowiednia liczba tychże obiektów (a reszta z nich pozostaje nieaktywna). Do każdego z sześciu obiektów przypisany jest ten sam skrypt „Player Control”, którego liczne metody uruchamiane są w zależności od akcji podejmowanych przez zawodnika. W obiekcie odnoszącym się do danego gracza przechowywana jest o nim większość informacji, takich jak między innymi: pozycja na planszy, długość kary więzienia, posiadanie karty umożliwiającej darmowe wyjście z więzienia, ilość gotówki i całkowitej wartości posiadanych dóbr, czy uczestnictwo w aukcji. • MoneyStart – aktywowany z poziomu klasy „Game Control”, zawierający skrypt „Money Start”, odpowiadający za rozdanie początkowej ilości gotówki każdemu z graczy, a następnie dezaktywację własnego obiektu „MoneyStart”. • FieldMarkers – zawiera kolorowe znaczniki pola, informujące użytkownika aplikacji o przynależności nieruchomości do zawodników. • PlayerIconCanvas – obiekt typu „Canvas” (czyli służący do renderowania interfejsu użytkownika w scenie gry), w którym znajduje się sześć obiektów, reprezentujących ikony zawodników, widoczne po prawej stronie od planszy. Dzięki nim użytkownik aplikacji widzi, którzy gracze są aktywni, ile posiadają gotówki oraz czyja jest tura. Przedstawia to poniższy obrazek, na którym widzimy dwóch aktywnych graczy, a kolej przypada na pierwszego z nich. Rys. 6 Wycinek sceny gry z wizerunkiem ikon graczy. • Windows – zawiera obiekty reprezentujące okna, za których pojawianie się odpowiada skrypt „Windows Control”, znajdujący się w wyżej opisanym obiekcie „WindowsControl”. • Houses and Hotels – przechowuje grafiki domów i hoteli, a także przyciski stosowane podczas ich kupna i sprzedaży. • Cards100 – mieści grafiki stosów kart „Szansa” i „Kasa społeczna” oraz przyciski służące do zastawiania, odstawiania lub sprzedaży nieruchomości. • Cards50 – znajdują się w nim ilustracje, mówiące użytkownikowi o tym, które nieruchomości są zastawione oraz jaki jest podstawowy koszt ich odstawienia (równy cenie sprzedaży zastawionej nieruchomości). • Side Buttons – zawiera przyciski znajdujące się po lewej stronie od planszy, możliwe do kliknięcia w dowolnym momencie rozgrywki. Wszystkie sterowane obiekty gry, kontrolowane są za pomocą w większości wspomnianych już powyżej skryptów. Każdy skrypt reprezentuje klasę, a prawie każda z nich dziedziczy po typowej dla silnika Unity klasie abstrakcyjnej „MonoBehaviour”. Większość tych klas implementuje dwie kluczowe metody: • Start() - metoda ta jest wywoływana tylko raz, zaraz po utworzeniu obiektu, na którym znajduje się skrypt. Służy do inicjalizacji zmiennych, komponentów i innych elementów, które będą wykorzystywane w dalszej pracy skryptu. Przykładowo, pozwala ustawić początkową pozycję obiektu, zainicjować zmienne itp. Jest ona bardzo przydatna, gdy potrzebujemy, aby pewne rzeczy były zainicjowane na początku, jeszcze przed wywołaniem innych metod; • Update() - jest wywoływana co klatkę (frame) i służy do obsługi zdarzeń zachodzących w trakcie działania programu. W tej metodzie można np. odczytywać dane z klawiatury lub myszy, zmieniać pozycję obiektów, aktualizować dane itp. Przykładowo, można zaimplementować poruszanie postacią po planszy, reakcję na naciśnięcie przycisków lub innych elementów interfejsu użytkownika czy aktualizację danych wyświetlanych na ekranie. Metoda ta jest bardzo ważna, ponieważ pozwala na dynamiczną interakcję z użytkownikiem i zapewnienie płynnego działania programu. Jedyna utworzona klasa, która nie dziedziczy po „MonoBehaviour” to klasa „TitleDeedCard”. Obiekty tej klasy reprezentują karty własności i przechowują następujące informacje: numer pola, na którym znajduje się dana nieruchomość, cena zakupu, wysokość czynszu za zatrzymanie się na danym polu, nazwa oraz typ nieruchomości, a także odpowiadający jej kolor. W klasie tej znajduje się jedna metoda – „Rent()” – zwracająca wartość czynszu należnego właścicielowi za pojawienie się tam innego gracza. 4.2. Składniki projektu Cały projekt składa się z katalogów i plików zawierających różnego rodzaju elementy, które są składowymi powstałej gry komputerowej. Poniżej znajdują się tabele z najważniejszymi elementami projektu (z pominięciem większości tych, które są na wstępie dostarczone przez silnik Unity i nie wymagają od twórcy aplikacji budowania ich samemu). Tab. 1 Obiekty gry umieszczone w hierarchicznej liście „Hierarchy”. Nazwa Opis funkcjonalności EventSystem Obsługa zdarzeń wejściowych Main Camera Widok gry z perspektywy gracza Board Elementy planszy Waypoints Punkty na planszy, w które może udać się pionek gracza Dices Kości do gry, decydują o ile pól przesunie się pionek gracza GameStart Początkowe czynności podczas rozpoczęcia gry Game Control Sterowanie przebiegiem rozgrywki WindowsControl Sterowanie wyświetlanymi oknami Players Przyjmowanie decyzji zawodników i sterowanie ruchem pionków MoneyStart Rozdanie zawodnikom początkowej ilości gotówki Field Markers Znaczniki pola, informujące o tym, kto posiada daną nieruchomość PlayerIconCanvas Ikony graczy Windows Wyświetlane w trakcie gry okna Houses and Hotels Domy i hotele oraz przyciski do ich kupna lub sprzedaży Cards100 Stosy kart "Szansa" i "Kasa społeczna" oraz przyciski do zastawiania, odstawiania lub sprzedaży nieruchomości Cards50 Ilustracje przedstawiające zastawione nieruchomości Side Buttons Przyciski znajdujące się po lewej stronie planszy Tab. 2 Zasoby stworzone na potrzeby projektu – elementy katalogu „Assets”. Nazwa Opis funkcjonalności Graphic Elements Zastosowane w projekcie elementy graficzne Scenes Sceny, w których umieszczone są komponenty aplikacji Scripts Skrypty sterujące przebiegiem gry TextMesh Pro Pakiet zawierający narzędzia do renderowania tekstu uipack_fixed Zestaw narzędzi do tworzenia interfejsu użytkownika Tab. 3 Skrypty sterujące aplikacją. Nazwa Opis funkcjonalności Dice1 Obsługa jednej z kości do gry Dice2 Obsługa drugiej kości do gry GameControl Sterowanie przebiegiem rozgrywki GameStart Początkowe czynności podczas rozpoczęcia gry MoneyStart Rozdanie zawodnikom początkowej ilości gotówki PlayerControl Przyjmowanie decyzji i sterowanie czynnościami gracza TitleDeedCard Karty własności WindowsControl Sterowanie wyświetlanymi oknami 4.3. Sposób uruchomienia i testowania aplikacji Aplikacja uruchamiana jest za pomocą pliku wykonywalnego .exe. Po jego otworzeniu, pojawia się widok planszy z góry oraz okno wyboru liczby graczy. Tak jak przedstawiono poniżej: Rys. 7 Widok gry tuż po jej uruchomieniu. Po wybraniu liczby od 1 do 6, znika okno wyboru liczby graczy, pojawiają się ikony graczy, pionki w pozycji początkowej oraz stosy kart „Szansa” i „Kasa społeczna”. Zaczyna się tura pierwszego zawodnika. Wyświetlone zostaje okno akcji, tak jak widać poniżej: Rys. 8 Widok rozpoczęcia się tury pierwszego gracza. Na początku jedyną możliwą akcją jest rzut kośćmi. W zależności od pola, na które przemieści się gracz możliwe są ewentualne różne akcje końcowe, w tym: możliwość zakupu nieruchomości, tudzież wystawienia jej na aukcję, odkrycie karty „Szansa” lub „Kasa społeczna” i wykonanie dodatkowej czynności zgodnie z instrukcją znajdującą się na wylosowanej karcie, konieczność zapłacenia czynszu w przypadku przejścia na nieruchomość należącą do innego gracza, zapłacenie podatku lub pójście do więzienia. Przykładową akcję końcową (kupowanie nieruchomości) przedstawiono poniżej: Rys. 9 Okno kupowania nieruchomości. Po dokonaniu zakupu, od pieniędzy gracza odejmowana jest cena nieruchomości, a pod jego ikoną prezentowana jest animacja reprezentująca przepływ gotówki. Przy odpowiednim polu na planszy pojawia się znacznik pola w kolorze pionka kupującego. Rozpoczyna się tura następnego zawodnika, co pokazuje pomarańczowy wskaźnik tury. Opisane czynności przedstawia poniższy rysunek: Rys. 10 Przepływ gotówki, tura drugiego gracza i pojawienie się niebieskiego znacznika pola. W przypadku zrezygnowania z zakupu i wystawieniu nieruchomości na aukcję, pojawia się dedykowany panel, służący do przeprowadzenia aukcji. Uczestniczą w niej wszyscy zawodnicy. Każdy ma możliwość podbicia ceny (pod warunkiem posiadania wystarczających środków) lub spasowania. Zwycięzca aukcji kupuje nieruchomość po wywalczonej cenie. Na poniższej ilustracji możemy zaobserwować wynik aukcji, w której zawodnik czerwony wystawił Bełchatów (podstawowa cena zakupu – M 600 k), natomiast wygrał zawodnik żółty proponując cenę M 1.03 M. Rys. 11 Okno aukcji oraz wynik zakupu Bełchatowa przez zawodnika żółtego. Po przejściu na jedno z pól „Szansa” lub „Kasa społeczna”, należy podnieść wierzchnią kartę z odpowiedniego stosu (kliknąć na wyświetloną grafikę karty). Pojawia się okno zawierające informacje o zawartości odkrytej karty. Po naciśnięciu przycisku „OK” wykonywana jest czynność zapisana na danej karcie. Poniżej przedstawiono przykładową kartę „Szansa”: Rys. 12 Procedura odczytu i wykonania instrukcji z przykładowej karty „Szansa”. Przejście na pole, na którym znajduje się nieruchomość należąca do innego gracza, powoduje pobranie przez właściciela czynszu. Widać to na poniższej ilustracji, gdzie zawodnik fioletowy stanął na nieruchomości zawodnika żółtego: Rys. 13 Grafika przedstawiająca opłatę czynszu za stanięcie na cudzej nieruchomości. Wejście w posiadanie wszystkich nieruchomości danego koloru, umożliwia zakup domów i hoteli. Po kliknięciu przycisku „Buy houses/hotels” w oknie akcji, następuje przejście do okna zakupu domów i hoteli. Na jego lewej stronie znajduje się lista zakupów, a na prawej kalkulator, kontrolujący cenę transakcji. Celem rozbudowy danego pola należy nacisnąć znajdujący się na nim przycisk. Kolejne naciśnięcie tego samego przycisku spowoduje wycofanie pozycji z listy. Aby zatwierdzić zakup należy kliknąć przycisk „Confirm”. W odpowiednich miejscach pojawią się nabyte budynki. W przypadku, gdy cena przekracza możliwości kupującego, przycisk „Confirm” staje się nieaktywny i trzeba wycofać któryś produkt z listy, tak by zakup był możliwy do zrealizowania. Poniżej przykład, gdzie zawodnik niebieski wszedł w posiadanie wszystkich nieruchomości koloru różowego i dokonał zakupu trzech domów, po jednym na każdym z pól: Rys. 14 Zakup domów na kolorze różowym – część 1. Rys. 15 Zakup domów na kolorze różowym – część 2. Rys. 16 Efekt przekroczenia dostępnych środków w trakcie podejmowania zakupu domów. W przypadku, gdy gracz zobowiązany jest dokonać opłaty, która przekracza ilość zgromadzonej gotówki, zmuszony jest do zastawiania nieruchomości i/lub sprzedaży domów. W sytuacji takiej wyświetlane jest dedykowane okno. Na jego lewej stronie znajduje się lista sprzedawanych lub zastawianych dóbr, a na prawej kalkulator kontrolujący zadłużenie. Poniższy rysunek ilustruje sytuację, w której gracz niebieski musi wpłacić do banku M 4 M: Rys. 17 Okno zastawiania nieruchomości i sprzedaży domów. Po uiszczeniu opłaty za naciśnięciem przycisku „Confirm”, z planszy usuwane sprzedane domy, a na pola zaznaczonych nieruchomości nakładana jest charakterystyczna czarna warstwa indykująca ich stan jako zastawione. Stanięcie innych graczy na takim polu nie powoduje pobrania od nich czynszu. Poniżej przedstawiono wizualny efekt powyższej zilustrowanej sprzedaży, na którym na polach „Łódź” i „Toruń” ubyło łącznie trzy domy, natomiast pola „Gorzów” i „Białystok” zostały zastawione: Rys. 18 Zmiany na planszy po zatwierdzeniu sprzedaży z rysunku 17. Gdy gracz posiada jakąś zastawioną nieruchomość i w swojej turze ma wystarczająco dużo gotówki, by móc ją odstawić, opcja taka pojawia się w oknie akcji. Po kliknięciu przycisku „Unmortgage”, wyświetlane jest okno odstawiania. W tytule okna zobaczyć można informację, że operacja ta wiąże się z dodatkowym kosztem wysokości 10 % ceny zastawu. Podobnie jak w oknie zakupu domów i hoteli, tutaj też po lewej stronie mamy listę zakupów, a po prawej kalkulator kontrolujący cenę transakcji. Po zatwierdzeniu operacji przyciskiem „Confirm”, pobierana jest odpowiednia opłata, odstawione nieruchomości na nowo stają się aktywne, a gracz może kontynuować swoją turę, wybierając następną z dostępnych akcji. Warto zaznaczyć, że tuż po odstawieniu nieruchomości, nie jest możliwa jej rozbudowa. Poniżej przedstawiono przebieg akcji „Unmortgage”: Rys. 19 Pojawienie się przycisku „Unmortgage” w oknie akcji. Rys. 20 Okno odstawiania nieruchomości. Rys. 21 Odstawienie wybranych nieruchomości. Kiedy gracz zmuszony zostanie dokonać opłaty przekraczającej jego wypłacalność, dochodzi do bankructwa. Zawodnik ten przegrywa i zostaje usunięty z planszy, a tym samym dalszej rozgrywki. Poniżej przedstawiona zostaje sytuacja, kiedy gracz żółty przegrywa poprzez bankructwo: Rys. 22 Bankructwo zawodnika „Player 4”. Gracz odbywający karę więzienia stoi w swojej turze przed maksymalnie trzema wyborami: • rzut kośćmi – tylko dublet powoduje wyjście z więzienia, w przeciwnym wypadku zawodnik pozostaje w więzieniu (opcja zawsze dostępna); • opłata kaucji – wyjście z więzienia za cenę M 500 k (możliwe pod warunkiem posiadania wystarczających środków); • skorzystanie ze specjalnej karty, umożliwiającej darmowe wyjście z więzienia, możliwej do zdobycia ze stosów „Szansa” i „Kasa społeczna” (możliwe w przypadku posiadania takowej karty). Rys. 23 Okno akcji podczas pobytu w więzieniu, zawierające wszystkie możliwe opcje. Jak już wspomniano wcześniej, w momencie, gdy gracz musi dokonać opłaty, która wykracza poza ilość posiadanej przez niego gotówki, rozpoczyna się proces sprzedaży domów i/lub zastawiania nieruchomości. Następnym etapem pozyskiwania brakującej gotówki jest sprzedaż zastawionych nieruchomości. Należy zaznaczyć, że zgodnie z zasadami gry, zawodnik nie może rozpocząć odsprzedawania nieruchomości z powrotem do banku, dopóki wszystkie jego posiadłości nie ulegną zastawieniu. Żeby uniknąć niepotrzebnego klikania, algorytm sterujący przebiegiem rozgrywki oblicza, czy sytuacja zmusza gracza do zastawienia wszystkich nieruchomości i jeszcze sprzedaży kart. W takim przypadku dokonywana jest automatyczna sprzedaż wszystkich domów i zastawianie pól, odpowiednia suma dodawana jest gotówki gracza i wyświetlane jest od razu okno sprzedaży nieruchomości. Po zatwierdzeniu transakcji, sprzedane nieruchomości trafiają z powrotem na rynek i są możliwe do kupienia przez dowolnego zawodnika, który stanie na odpowiednim polu. Poniższa grafika przedstawia sprzedaż trzech nieruchomości przez gracza fioletowego: Rys. 24 Okno sprzedaży nieruchomości. Rozgrywkę można zakończyć na dwa sposoby: • zwycięstwo ostatniego gracza pozostałego na planszy, poprzez doprowadzenie pozostałych do bankructwa; • naciśnięcie przycisku „Game Over”, znajdującego się w lewym górnym rogu ekranu. Po zakończeniu gry, wyłaniany zostaje zwycięzca. W przypadku skorzystania z opcji drugiej, wyświetlona zostaje lista graczy posortowana malejąco względem zdobytego przez nich majątku. Opisaną sytuację przedstawia poniższy rysunek: Rys. 25 Okno końca gry. 5. Podsumowanie W ramach niniejszej pracy wykonano projekt pt. "Turowa gra wieloosobowa w postaci pliku wykonywalnego", którego celem było utworzenie aplikacji umożliwiającej rozgrywkę w popularną grę planszową Monopoly. Projekt ten obejmował szereg zadań, których realizacja pozwoliła na uruchomienie aplikacji, wdrożenie mechanizmów związanych z implementacją zasad gry oraz powstanie przyjemnego dla użytkownika interfejsu. W niniejszym podsumowaniu zostaną przedstawione zrealizowane funkcjonalności, wady obecnej wersji aplikacji, jak również zaproponowane zostaną kierunki dalszego jej rozwoju, w tym uzupełnienie braków, ulepszenie interfejsu, czy wprowadzenie możliwości wspólnej gry na wielu urządzeniach oraz elementów AI. 5.1. Zrealizowane funkcjonalności 5.1.1. Związane z uruchomieniem gry: • zbudowano projekt w postaci niezależnego od silnika gry katalogu, zawierającego plik wykonywalny, pozwalający na uruchomienie aplikacji na dowolnym komputerze, bez konieczności posiadania programu Unity; • spakowano utworzony katalog w jeden samorozpakowujący się plik wykonywalny o dopasowanej ikonie, co umożliwia przechowywanie gry na komputerze w postaci pojedynczego, wizualnie wyróżniającego się pliku. 5.1.2. Związane z implementacją zasad gry: • możliwy wybór liczby graczy od 1 do 6; • losowe ułożenie kart „Szansa” i „Kasa społeczna” w postaci kolejek; • przydzielenie graczom początkowej ilości gotówki; • wyrzucenie dubletu umożliwia dodatkowy rzut kośćmi, a długość ruchu to suma z dwóch rzutów; • dwa dublety pod rząd powodują pójście do więzienia; • kara więzienia trwa trzy tury, po czym gracz kontynuuje normalną rozgrywkę; • wcześniejsze opuszczenie więzienia możliwe jest na trzy sposoby (wyrzucenie dubletu, opłata kaucji, użycie specjalnej karty); • wylosowanie karty umożliwiającej bezpłatne wyjście z więzienia, powoduje wyjęcie jej z odpowiedniej kolejki i przypisanie do odkrywającego ją gracza; natomiast zużycie tej karty, powoduje jej powrót na koniec tejże kolejki; • w zależności od okoliczności gracz może w swojej turze wykonywać różne akcje (dostępne akcje różnią się z uwagi na daną sytuację); w każdej swojej turze gracz musi rzucić kośćmi; czynność ta dzieli standardową turę (gdy zawodnik nie przebywa w więzieniu) na dwa etapy: przed rzutem kośćmi – wszystkie możliwe akcje to: zakup domów/hoteli, odstawianie nieruchomości; po rzucie kośćmi – ewentualne dodatkowe czynności zdeterminowane są tym, na jakie pole przeniesie się pionek gracza (lub czy wyrzuci dwukrotny dublet – kara więzienia); • stanięcie na niezajętą nieruchomość umożliwia jej zakup lub wystawienie na aukcję; • przejście na cudzą, niezastawioną nieruchomość wiąże się z koniecznością opłaty czynszu; • gracz nie pobiera czynszu, jeśli odbywa karę więzienia; • „Szansa” i „Kasa społeczna” skutkują podniesieniem karty z odpowiedniego stosu i wypełnieniem instrukcji zawartej na jej odwrocie; • pola numer 5 i 39 skutkują pobraniem przypisanych im opłat podatkowych; • dojście na pole 31 powoduje automatyczne trafienie do więzienia; • za przejście przez „Start” przysługuje premia M 2 M; • podczas zakupu domów/hoteli w danej turze nie jest możliwa rozbudowa nieruchomości o więcej niż wartość jednego domu; • jeżeli gracz posiada wszystkie nieruchomości danego koloru, zastawienie którejkolwiek z nich możliwe jest wyłącznie, gdy żadna nie jest rozbudowana; • sprzedaż nieruchomości z powrotem do banku możliwa jest wyłącznie, kiedy wszystkie są już zastawione; • odstawianie nieruchomości wiąże się z dodatkowym kosztem wysokości 10 % od ceny zastawu; • domy/hotele sprzedawane są za połowę ceny ich zakupu; • gra kończy się, gdy na planszy pozostanie ostatni zawodnik lub w dowolnym innym, wybranym momencie rozgrywki. W takim przypadku zwycięża najbardziej zamożny spośród graczy; 5.1.3. Związane z przyjemnym dla użytkownika interfejsem: • płynny ruch pionków pomiędzy polami; • pierwszy pionek na danym polu ustawia się na jego środku, a kolejne w pobliżu, w taki sposób, że nawet jeśli wszystkich sześciu graczy ustawi się na tym samym polu, to żaden nie będzie nachodzić na drugiego; • gracze nie muszą pamiętać czyja jest tura, gdyż informacji tej dostarcza dedykowany wskaźnik (pomarańczowa strzałka) przy ikonie gracza; • w każdej turze danego gracza w oknie akcji wyświetlane są wyłącznie przyciski odpowiadające akcjom aktualnie możliwym do przeprowadzenia; • jeśli jakiś przycisk jest nieaktywny, jego kolor przybiera poszarzały odcień (typowe dla przycisków „Confirm”, gdy zatwierdzenie akcji wymaga najpierw spełnienia warunków transakcji); • czytelnym z punktu widzenia użytkownika potwierdzeniem transakcji jest odpowiednia animacja w pobliżu ikony gracza, symbolizująca przepływ gotówki; • stanięcie na polu „Szansa” lub „Kasa społeczna” powoduje, że na odpowiednim stosie pojawia się podświetlona, przesunięta karta, będąca zarazem przyciskiem, na który należy kliknąć; dodatkowo pojawia się też strzałka wskazująca na tę kartę/przycisk; • wykorzystano fakt, że rysunek na polu numer 11 dzieli je na podobszary „W więzieniu” i „Tylko odwiedzający”; pozycja pionka na jednym z nich jednoznacznie wskazuje, czy gracz odbywa karę więzienia, czy nie; • ewentualna akcja końcowa realizowana jest dopiero, gdy pionek gracza przesunie się na swoje pole; • przejście do tury kolejnego gracza następuje dopiero, gdy ustąpią wywołane wcześniej animacje (ruch pionka lub transfer gotówki); • przynależność nieruchomości do danego gracza indykuje dedykowany znacznik pola w kolorze jego pionka; • wszystkie pokazujące się okna, wyświetlane są na środku planszy w taki sposób, aby nie zasłaniały informacji jakich ona dostarcza; dzięki temu gracz może bez przerwy mieć wgląd na stan rozgrywki i na tej podstawie podejmować przemyślane decyzje. 5.2. Krytyka • Do prawdziwie przyjemnego użytkowania aplikacja wymaga rozbudowy, gdyż w obecnym stanie, niezależnie od liczby graczy, rozgrywka prowadzona jest na jednym urządzeniu z użyciem jednej myszy. • Można zwrócić uwagę na drobną niespójność językową. Cały interfejs zbudowany jest w języku angielskim, natomiast sama gra jest po polsku. • W oknie aplikacji widocznych jest kilka nieaktywnych przycisków, symbolizujących istotne funkcjonalności, które w przyszłości zostaną zaimplementowane. Jednakże, w obecnej wersji aplikacji, brak tych mechanizmów uniemożliwia pełne odwzorowanie popularnej gry planszowej. • Podczas sprzedaży domów łatwo pogubić się w tym, które z nich zostały na tę sprzedaż wystawione, gdyż wyświetlana jest jedynie informacja o ich liczbie. Graczowi pozostaje pamiętać które przyciski kliknął, co może być trochę uciążliwe. • Po zakończeniu gry użytkownik pozostaje z widokiem planszy na ostatnim etapie rozgrywki i jedyne co może zrobić, to wymusić zamknięcie programu (np. skrótem Alt + F4). 5.3. Pomysł na dalszy rozwój. Aplikacja została zaprojektowana z myślą o zapewnieniu użytkownikom możliwości rozgrywki w popularną grę planszową Monopoly. Mimo zrealizowania wielu funkcjonalności, istnieją jeszcze możliwości rozwoju aplikacji. Warto zacząć od naprawienia uwag i sugestii zawartych w punkcie 5.2., a następnie skoncentrować się na dodaniu kolejnych funkcjonalności. Takich jak np.: • Uzupełnienie aplikacji o brakujące funkcjonalności związanie realizacją podstawowych zasad gry, które nie zostały jeszcze zaimplementowane. Należy dokładnie przeanalizować oryginalną grę planszową i zwrócić uwagę na to, czego wciąż brakuje. Można również skonsultować się z graczami i wziąć pod uwagę ich sugestie dotyczące brakujących funkcjonalności. Po zebraniu potrzebnych informacji, można przystąpić do dodawania nowych elementów do aplikacji. • Ulepszenie interfejsu. Interfejs użytkownika aplikacji powinien zostać ulepszony poprzez dodanie animacji oraz dźwięków, które wprowadzą grę w bardziej interaktywny wymiar. Dodanie animacji np. przy zakupie i sprzedaży nieruchomości lub rzucie kośćmi, zwiększy atrakcyjność aplikacji i pozwoli na lepsze zrozumienie przebiegu gry. Dźwięki natomiast pozwolą na wyostrzenie zmysłów graczy, co wpłynie na większą przyjemność z rozgrywki. • Wspólna gra przez internet. Jednym z pomysłów na dalszy rozwój aplikacji jest dodanie funkcjonalności pozwalającej na wspólną grę za pośrednictwem sieci. Umożliwi to grę w Monopoly z przyjaciółmi, którzy są w innych lokalizacjach, co zwiększy atrakcyjność aplikacji. Można zaimplementować tę funkcjonalność poprzez wykorzystanie technologii sieciowej, która pozwoli na połączenie graczy z różnych urządzeń i umożliwi rozgrywkę. • Sztuczna inteligencja. Kolejnym pomysłem na rozwój aplikacji jest dodanie sztucznej inteligencji, która pozwoli na rozgrywkę z komputerem. Dzięki temu, gracze będą mieli możliwość gry w Monopoly w sytuacji, gdy nie mają partnerów do gry. Można zaimplementować sztuczną inteligencję poprzez algorytmy, które będą symulować zachowanie gracza, takie jak decyzje o kupnie nieruchomości czy inwestycjach w grze. 6. [1] [2] [3] [4] Bibliografia http://www.zasadygry.pl/monopoly_31_2.htm https://pl.wikipedia.org/wiki/Unity_(silnik_gry) https://pl.wikipedia.org/wiki/Visual_Studio_Code https://pl.wikipedia.org/wiki/WinRAR [5] [6] https://www.youtube.com/watch?v=h6BcN6Z289w https://cloudconvert.com/png-to-ico Wykaz skrótów i symboli UI User Interface API Application Programming Interface AI Artificial Inteligence Spis ilustracji: Rys. 1 Plansza do gry Monopoly. 4 Rys. 2 Schemat algorytmu rozpoczęcia i zakończenia gry. 9 Rys. 3 Schemat przebiegu pojedynczej tury. 10 Rys. 4 Widok planszy z kamery głównej (Main Camera). 12 Rys. 5 Strony kostek do gry w postaci plików .png. 12 Rys. 6 Wycinek sceny gry z wizerunkiem ikon graczy. 13 Rys. 7 Widok gry tuż po jej uruchomieniu. 16 Rys. 8 Widok rozpoczęcia się tury pierwszego gracza. 17 Rys. 9 Okno kupowania nieruchomości. 18 Rys. 10 Przepływ gotówki, tura drugiego gracza i pojawienie się niebieskiego znacznika pola. 18 Rys. 11 Okno aukcji oraz wynik zakupu Bełchatowa przez zawodnika żółtego. 19 Rys. 12 Procedura odczytu i wykonania instrukcji z przykładowej karty „Szansa”. 19 Rys. 13 Grafika przedstawiająca opłatę czynszu za stanięcie na cudzej nieruchomości. 20 Rys. 14 Zakup domów na kolorze różowym – część 1. 20 Rys. 15 Zakup domów na kolorze różowym – część 2. 21 Rys. 16 Efekt przekroczenia dostępnych środków w trakcie podejmowania zakupu domów. 21 Rys. 17 Okno zastawiania nieruchomości i sprzedaży domów. 22 Rys. 18 Zmiany na planszy po zatwierdzeniu sprzedaży z rysunku 17. 22 Rys. 19 Pojawienie się przycisku „Unmortgage” w oknie akcji. 23 Rys. 20 Okno odstawiania nieruchomości. 23 Rys. 21 Odstawienie wybranych nieruchomości. 24 Rys. 22 Bankructwo zawodnika „Player 4”. 24 Rys. 23 Okno akcji podczas pobytu w więzieniu, zawierające wszystkie możliwe opcje. 25 Rys. 24 Okno sprzedaży nieruchomości. 26 Rys. 25 Okno końca gry. 27 Spis tabel: Tab. 1 Obiekty gry umieszczone w hierarchicznej liście „Hierarchy”. 15 Tab. 2 Zasoby stworzone na potrzeby projektu – elementy katalogu „Assets”. 15 Tab. 3 Skrypty sterujące aplikacją. 16