Program zaliczeniowy III
Celem pracy zaliczeniowej jest zaimplementowanie gry polegającej na usuwaniu kolorowych kulek.
Kulki ułożone są w dwóch rzędach - jednym na planszy i drugim, nazywanym dalej pulą.
Gracz wykonuje ruchy, które polegają na przemieszczeniu pierwszej kulki z puli
w dowolne miejsce w rzędzie na planszy (dozwolone jest wstawianie kulek w środek rzędu na planszy).
Jeśli w wyniku umieszczenia kulki powstaje ciąg co najmniej 3 kulek o tym samym kolorze,
kulki te znikają, a gracz otrzymuje tyle punktów, ile kulek znikło. Jeśli w wyniku zniknięcia
kulek utworzy się nowy ciąg jednakowych kulek, one również znikają, a gracz otrzymuje 2 punkty
za każdą kulkę, która zniknęła. Jeśli sytuacja się powtarza, premia się zwiększa (tj. kolejno 3, 4, 5 ... punktów za każdą kulkę).
Celem gry jest uzyskanie jak największej liczby punktów.
Uwaga: Usuwane są tylko i wyłącznie ciągi kulek tego samego koloru, które powstają w wyniku
ruchu. Jeśli ciąg kulek znajduje się na planszy od początku to nie jest usuwany - zniknie dopiero, gdy
dorzucimy do niego jeszcze jedną kulkę (i powstanie nowy ciąg).
Gra kończy się w momencie gdy spełniony zostanie jeden z poniższych warunków:
- Z planszy zostaną usunięte wszystkie kulki - gracz otrzymuje wówczas premię w wysokości
2 punktów za każdą kulkę, która pozostała w puli.
- Liczba kulek na planszy przekroczy 60 - gracz wówczas otrzymuje karę w wysokości 2 punktów
za każdą kulkę, która pozostała w puli.
- Skończą się kulki w puli.
Kulki reprezentowane są przez duże litery, różne litery odpowiadają poszczególnym kolorom.
Można założyć, że w grze występuje nie więcej niż 26 kolorów. Kolory powinny być reprezentowane
przez kolejne litery A, B, C, itd.
Program powinien umożliwiać następujące funkcje:
-
Losowanie stanu początkowego gry. Program powinien zapytać o parametry gry, takie jak liczba kulek
na planszy, liczba kulek w puli, liczba kolorów i być może poziom trudności. Nastepnie powinna wyświetlić się plansza
odpowiadająca wylosowanym wartościom.
-
Wczytanie stanu początkowego z pliku. Program powinien zapytać o nazwę pliku i wczytać zapisany tam układ gry.
Oto przykładowy plik:
AABBBBBACCABBBACA
BCACCB
W pierwszej linii zapisany jest układ na planszy, a w drugiej układ puli.
Kule z puli są pobierane w porządku od lewej do prawej.
-
Gra użytkownika. Kiedy stan początkowy gry zostanie ustalony, użytkownik może przystąpić do gry.
Ruchy wykonuje się przez wpisanie liczby, która mówi, w którym miejscu umieścić kulkę, przy czym 0 oznacza
lewy brzeg ciągu kulek, 1 - na prawo od dokładnie jednej kulki, 2 - na prawo od dokładnie dwóch kulek, itd. Po każdym
ruchu program powinien wyświetlić nowy układ planszy, liczbę zdobytych punktów
oraz (jeśli gra się nie zakończyła) zapytać o kolejny ruch.
-
Gra przez program (opcjonalnie). Po ustaleniu początkowego stanu gry powinna być możliwość rozegrania
partii przez sam program. Program powinien zaproponować sekwencję ruchów i zapisać ją do pliku o zadanej nazwie.
Ocena za ten element będzie tym wyższa, im więcej punktów zdobędzie dany program w kilku modelowych partiach.
Generowanie sekwencji ruchów nie powinno trwać dłużej niż 15 sekund (na komputerze takim jak w laboratorium).
W zapisanym pliku powinien znajdować się ciąg liczb odpowiadających kolejno wykonywanym ruchom.
Kryteria oceny
- Poprawność działania. (3 pkt.) - za punkty 1.-3.
- Kod programu. (1.5 pkt.) - przejrzystość kodu, opisy, użycie klas
- Jakość gry. (1.5 pkt.) - za punkt 4. - zależy bezpośrednio od liczby punktów zdobytych przez program podczas testów.
Uwaga: W przypadku użycia części kodu, która nie została napisana samodzielnie należy to zadeklarować.
Rozwiązania należy nadsyłać na adres ziemians@mimuw.edu.pl w terminie do 31 sierpnia 2009.
Powodzenia
Krzysztof Ziemiański