Wstęp
Przedmiotem zadania jest stworzenie pewnej gry, czy też raczej “gropodobnej symulacji”, którą tym niemniej dla uproszczenia będziemy nazywać Grą.
Plansza i pola
Gra rozgrywa się na dwuwymiarowej planszy (siatce kwadratowych pól). Istnieją różne typy pól, reprezentujące typy terenu świata gry, np. trawa, piach, drzewo, ziemia, woda itp. Na polu może znajdować się dowolna kolekcja obiektów, a także gracz. W niektórych sytuacjach interesować nas będą także krawędzie między polami - na krawędzi może się znajdować np. płot lub ściana.
Gracz porusza się w czterech kierunkach: do góry, na dół, w prawo lub w lewo. Gracz nie może przechodzić przez ściany i płoty - jeśli na krawędzi między polem, na którym stoi gracz, i polem, na które gracz chce przejść, znajduje się płot lub ściana, to gracz nie może wykonać ruchu. Gracz nie może chodzić po wodzie. Jeśli pole, na które gracz chce wejść, jest polem typu woda, to taki ruch jest niedozwolony.
Obiekty
W Grze istnieje wiele różnych rodzajów obiektów, mają one jednak pewne cechy wspólne:
- Każdy obiekt posiada masę (dodatnia liczba rzeczywista) i jakość (liczba z przedziału (0,100)).
- Pewne obiekty (np piasek, woda) są podzielne - jeśli mamy 3.14159kg piasku i zużyjemy 0.1kg, to pozostaje nam nadal 3.04159kg; inne są niepodzielne i możemy zużyć je tylko w całości.
- Niektóre obiekty mogą być pojemnikami - można w nich przechowywać inne obiekty. Pojemnik ma ustaloną pojemność.
- Jakość przedmiotu maleje z użyciem, gdy dojdzie do 0, przedmiot jest całkowicie zużyty i znika.
- Jakość przedmiotu maleje też z czasem - patrz dział “Upływ czasu”
- Jakość przedmiotu wpływa na skuteczność użycia danego przedmiotu. Im niższa jakość, tym częściej działanie za pomocą tego przedmiotu jest nieudane - patrz również dział “Akcje”
Akcje
- Gracz może podnosić przedmioty, które znajdują się na tym samym polu, co gracz. Łączna masa niesionych przez gracza przedmiotów nie może przekroczyć pewnej ustalonej liczby, która jest parametrem gry.
- Jeśli gracz przemieszcza się po planszy, razem z nim przemieszczają się przedmioty, które gracz niesie.
- Gracz może przy użyciu posiadanych obiektów oddziaływać na inne obiekty lub pole, i uzyskiwać różne efekty, np.
- działanie przy użyciu siekiery na pole z drzewem daje w efekcie pole trawy, na którym leży pień
- działanie przy użyciu siekiery na pień zużywa jego część i daje w wyniku belkę
- udane działanie przy użyciu piły na belkę daje w wyniku deskę i pewną ilość wiórów. Część belki zużywa się.
- nieudane działanie przy użyciu piły na belkę daje w wyniku tylko wióry.
- działanie przy pomocy skrzynki z narzędziami na pole, na którym znajduje się co najmniej 8 desek daje w efekcie fragment ściany. Deski zużywają się.
- działanie przy pomocy skrzynki z narzędziami na pole, na którym znajduje się co najmniej 5 desek daje w efekcie fragment płotu. Deski zużywają się.
- Fragment płotu lub ściany można postawić między dwoma polami.
- Fragment płotu lub ściany można zniszczyć przy pomocy siekiery. Płot lub ściana znikają, natomiast na polach sąsiadujących ze ścianą/płotem pojawiają się wióry.
- Działanie przy pomocy pojemników
- Działanie pustym pojemnikiem na pole z wodą daje w efekcie pojemnik całkowicie napełniony wodą. Działanie częściowo zapełnionym pojemnikiem na pole z wodą daje w efekcie pojemnik zapełniony wodą o niższej jakości (jakość wyraża się wzorem: wolna_przestrzen / calkowita_pojemnosc_pojemnika). Aby oddziaływać na pole z wodą gracz musi znajdować się w bezpośrednim sąsiedztwie pola z wodą.
- Działanie pustym pojemnikiem na pole z piachem daje w efekcie pojemnik całkowicie napełniony piaskiem. Oddziaływać na pole z piachem gracz może tylko znajdując się na tym polu.
- Gracz może wysypać zawartość pojemnika na pole, na którym znajduje się pojemnik. Jeśli zawartość nie jest wodą, to pozostaje na polu w takiej ilości, jaka znajdowała się w pojemniku. Jeśli zawartością pojemnika była woda, to wsiąka w podłoże i na polu pozostaje pusty pojemnik.
- W wyniku działania jeden z obiektów może być zużyty w części (jeśli jest podzielny) lub w całości.
Upływ czasu
Symulację można zrealizować na dwa sposoby:
- jako turową - jednostką czasu jest wtedy jeden ruch gracza. Wtedy musimy dopuścić także specjalny ruch - pas (nie rób nic), prawdopodobnie także ruch “czekaj N tur.”
- jako czasu (quasi)rzeczywistego - wtedy jednostką czasu jest np. sekunda
Format planszy
Opis planszy jest plikiem tekstowym. W pierwszym wierszu znajduje się informacja o wymiarach planszy: dwie liczby całkowite rozdzielone średnikiem, pierwsza oznacza szerokość (s), druga wysokość (w) planszy. W kolejnych w wierszach znajduje się opis pól planszy. W każdym wierszu znajduje się s symboli rozdzielonych średnikami. Lista symboli:
- T - pole trawa
- D - pole drzewo
- P - pole piach
- Z - pole ziemia
- W - pole woda
W następnym wierszu znajduje para liczb całkowitych. Jest to początkowe położenie gracza, pierwsza liczba oznacza kolumnę, druga oznacza wiersz. W tym samym wierszu, oddzielona spacją, znajduje się dodatnia liczba całkowita. Oznacza ona maksymalną masę, jaką może unieść gracz.
W kolejnych wierszach umieszczony jest opis położenia poszczególnych przedmiotów w formacie:
kod_przedmiotu kolumna;wiersz [informacje dodatkowe, np. pojemność pojemnika]
Kody przedmiotów obowiązkowych:
- S - siekiera
- P - piła
- Sk - skrzynka z narzędziami
Format planszy może zostać dostosowany do wprowadzonych rozszerzeń (patrz niżej).
Przykładowa plansza:
10;5
W;W;W;P;T;T;T;T;T;T
W;W;P;P;T;T;D;D;D;T
W;W;P;T;T;T;D;D;D;T
W;P;T;T;Z;Z;T;D;D;T
P;T;T;Z;W;Z;T;D;T;T
6;3 35
S 5;3
P 6;2
Sk 6;3
Rozszerzenia
- Obowiązkowe:
- Wymyśl kilka nowych obiektów oraz akcje dla nich (tudzież więcej akcji dla opisanych obiektów)
- Opcjonalne (na lepszą ocenę)
- Symulacja czasu rzeczywistego
- Umiejętności gracza wpływające na jakość tworzonych przedmiotów i prawdopodobieństwo powodzenia akcji, rosnące z ich wykorzystywaniem (uczenie się)
- …
Kilka pomysłów do samodzielnego rozwinięcia
- Kopalnie, rudy i wytop metali, kowalstwo
- Zioła i eliksiry podnoszące sprawność gracza
- …
Zadanie
Napisz program umożliwiający przeprowadzenie pojedynczej Gry. Program ma na początku wczytać planszę, potem ma ją wyświetlić i umożliwić graczowi wykonywanie ruchów. Ponadto program ma umożliwiać zapisanie stanu Gry w pliku i późniejsze jego odtworzenie. Interfejs powinien być graficzny (przyciski, mysz) i sensownie wygodny.
Pytania
- Do czego potrzebny są piasek, woda?
- To każdy powinien sobie sam wymyślić
- Do czego wióry?
- Jak wyżej, np. przy użyciu wiórów i krzesiwa można rozpalić ognisko, które można potem podsycać drewnem w dowolnej postaci. Ognisko można wykorzystać na wiele sposobów…
- Jak korzystamy z jakości? Czy jakość maleje z użyciem czy nie?
- Jakość maleje z użyciem i upływem czasu