Program zaliczeniowy
Należy napisać program, realizujący pewną grę.
Gra
Gra toczy się na prostokątnej planszy podzielonej na kwadratowe pola.
Na każdym polu może znajdować się:
- bohater, oznaczony przez znak *,
- kamień, oznaczony przez dużą literę; różne litery oznaczają różne rodzaje kamieni,
- wolne pole, oznaczone kropką,
- ścianę, oznaczona przez znak #.
Celem gracza jest doprowadzenie układu na planszy do pewnego zadanego układu docelowego. Bohater może wykonywać
ruchy w czterech kierunkach (w lewo, prawo, do góry, w dół). Skutki ruchu bohatera są następujące:
- Jeśli sąsiednie pole w kierunku ruchu jest wolne, bohater przemieszcza się na to pole,
- Jeśli sąsiednie pole w kierunku ruchu jest ścianą, nic się nie dzieje,
- Jeśli w kierunku ruchu napotkamy na ciąg kamieni, za którym znajduje się wolne pole, bohater oraz ciąg kamieni
przesuwają się o jedno pole,
- Jeśli ciąg kamieni kończy się ścianą, nic się nie dzieje.
Pola poza planszą traktowane są jak ściany, tzn. nie można wyjść poza planszę ani wypchnąć z niej kamieni. Gra kończy się
wygraną gracza, jeśli uda mu się doprowadzić układ kamieni do stanu docelowego. Gra kończy się porażką, jeśli gracz uzna
że mu się to nie uda lub gdy nie może wykonać żadnego ruchu.
Działanie programu
Program po rozpoczęciu działania powinien zapytać o nazwę pliku, w którym zapisana jest plansza. Następnie plansza
zostaje wyświetlona i rozpoczyna się gra. Gracz wykonuje ruchy wpisując odpowiednie litery
(np. L - lewo, P - prawo, G - góra, D - dół, M - poddanie się w przejście do początku, X - zakończenie programu);
po każdym ruchu układ na planszy powinien się aktualizować (należy wyświetlić zarówno aktualny stan gry jak i układ docelowy).
Jeśli gracz osiągnie układ docelowy, program powinien pogratulować graczowi i przejść do głównego menu. W dowolnym momencie
gracz powinien mieć możliwość zapisu aktualnego stanu gry oraz wczytania uprzednio zapisanej gry.
Format plików
Format plików zawierających plansze jest następujący:
- w pierwszej linijce znajdują się dwie liczby określające szerokość (s) i wysokość (w) planszy,
- w kolejnych w linijkach wiersze planszy o długości s, zapisane za pomocą znaków jak powyżej; dodatkowe znaki są ignorowane
- w kolejnej linijce znak -
- w kolejnych w linijkach układ docelowy
.
Format plików, w których zapisywany jest aktualny stan gry - do wyboru przez autora programu.
Dodatkowe opcje
Gra powinna posiadać dodatkowe opcje, pozostawione do wyboru twórcy programu, np.
- Dodatkowe pola przenoszące bohatera/kamienie na inne pole.
- Pola zmieniające rodzaj kamieni.
- Możliwość niszczenia niektórych ścian.
- Generator losowych plansz.
Wszystkie dodatkowe elementy gry należy opisać w dokumentacji.
Dodatkowe wymaganie
Program powinien używać klas - co najmniej klasy reprezentującej planszę.
Na co należy zwrócić uwagę:
- W przypadku użycia częsci kodu, który nie został napisany samodzielnie należy to jawnie zadeklarować.
- Kod programu powinien być czytelny i starannie skomentowany.
Kryteria oceny
- Poprawność działania. (2 pkt.)
- Użycie klas. (1 pkt.)
- Kod programu. (1 pkt.) - czytelność i opis kodu, podział na funkcje i klasy.
- Funkcje dodatkowe. (2 pkt.)
Rozwiązanie powinno zawierać:
- pliki źródłowe programu,
- dokumentację, zawierającą opis działania programu oraz opis dodatkowych elementów gry,
- kilka przykładowych plansz.
Rozwiązania należy nadsyłać na adres ziemians@mimuw.edu.pl w terminie do 30 czerwca.
Powodzenia
Krzysztof Ziemiański