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:

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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

  1. Poprawność działania. (3 pkt.) - za punkty 1.-3.
  2. Kod programu. (1.5 pkt.) - przejrzystość kodu, opisy, użycie klas
  3. 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