Zadanie zaliczeniowe z Programowania Obiektowego i C++.
Matematyka, 16.11.01, wersja 1.01.

Napisz program umożliwiający grę w Sokobana++.

Gra Sokoban++ polega na przemieszczeniu wszystkich znajdujących się w jaskini skrzyń ze skarbami 
do wyjścia. Za przesuwanie odpowiedzialni są pracownicy, którymi steruje gracz. Jaskinia ma płaskie 
dno i jest wypełniona różnorodnymi skrzyniami (oczywiście tylko część z nich zawiera skarby).

Niektóre skrzynie są tak ciężkie, że nie da się ich przesuwać (ale niektóre z nich daje się wysadzić w 
powietrze). Inne skrzynie mają kółka i nawet najlżejsze ich popchnięcie powoduje, że toczą się po linii 
prostej aż do uderzenia w najbliższą przeszkodę. Jeszcze inne dają się przesuwać, ale tylko o jedno 
pole. Jeszcze inne są dość delikatne, tak że w celu ich przesunięcia, należy je unieść.

Gracz ma do dyspozycji kilku pracowników (ich liczba i rodzaje zależą od planszy).Niektórzy z nich 
potrafią tylko pchać skrzynie. Inni potrafią tylko przesuwać skrzynie unosząc je (nie da się tak 
przesunąć innych skrzyń niż delikatnych). Jeszcze inni potrafią tylko wysadzać skrzynie w powietrze. 
Są wreszcie pracownicy uniwersalni, którzy potrafią wykonywać wszystkie wymienione operacje, ale 
szybko się męczą i po k (k parametr) ruchach (wykonanych przez siebie) muszą odpoczywać przez 
następne m (m parametr) kolejek. Pracownicy mogą się przesuwać tylko o jedno pole w pionie lub 
poziomie (oczywiście o ile pole, na które chcą wejść jest wolne). Pracownicy potrafią przesuwać 
skrzynie tylko w kierunku w jakim sami się poruszają (tzn. potrafią tylko pchać, nie potrafią np. 
ciągnąć skrzyń za sobą). Skrzynię można przesunąć tylko wtedy, gdy za nią jest wolne pole (nie 
można więc przesunąć naraz dwu skrzyń).

Gra odbywa się na planszy N*M (N,M >=1, można założyć, że jest tak dobrane, by plansza mieściła 
się na ekranie w całości). Zakładamy, że plansza jest otoczona ścianami jaskini. Na jednym polu może 
znajdować się co najwyżej jeden pracownik albo co najwyżej jedna skrzynia. Gracz wydaje komendy 
swoim pracownikom. Jedna kolejka gry polega na wybraniu przez użytkownika pracownika i wydaniu 
mu polecenia. Gra toczy się aż do przesunięcia wszystkich skrzyń ze skarbami do wyjścia lub do 
przekroczenia przez użytkownika limitu ruchów (limit ruchów jest parametrem planszy). ). Wyjście 
jest jednym (niekoniecznie skrajnym) polem planszy. Skrzynie ze skarbami przepchnięte na to pole 
znikają, pozostałe nie. Interfejs programu może być tekstowy (bez straty punktów) lub graficzny 
(zalecany ze względów estetycznych). Użytkownik może podawać polecenia z klawiatury, program 
może umożliwiać korzystanie z myszki. 

Na początku gry użytkownik wczytuje dane o planszy gry z pliku. Plik z danymi powinien mieć 
postać tekstową. Pierwszych kilka wierszy należy przeznaczyć na parametry planszy (jak np. rozmiary 
planszy). Wygodną postacią zapisu tych parametrów jest format:
		parametr=wartość
Reszta pliku powinna zawierać informacje o poszczególnych elementach znajdujących się na planszy, 
np. w postaci: 
		jednoznakowy_kod_elementu: nr_wiersza, nr_kolumny.
Można użyć innej postaci zapisywania danych o planszy.

Program powinien wyświetlać liczbę już wykonanych ruchów i limit ruchów przysługujący na danej 
planszy graczowi. Plansza nie musi zawierać wszystkich rodzajów skrzyń ani wszystkich rodzajów 
pracowników.