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.