Simularea unui robot în labirint

În cele ce urmează este explicată o versiune simplificată, în modul text. Dvs. veţi realiza o versiune cu interfaţă grafică.
Un robot telecomandat, 
trebuie să exploreze un labirint. Labirintul are ziduri şi goluri (coridoare). Configuraţia labirintului, pe care robotul urmează să-l exploreze este dată în fişierul labirint.txt sub forma unor linii formate din caractere: 'z' pentru zid, 'e' pentru spaţiu exterior labirintului şi spaţii pentru gol interior. Robotul cunoaşte configuraţia labirintului pe măsură ce îl explorează. Robotul înţelege următoarele comenzi date de utilizator (literele mari şi mici au aceeaşi semnificaţie):

a.            Vezi, codificată prin litera  'v', face ca robotul să primească un răspuns de la senzorul său visual sub forma unui String de 9 caractere din setul 'z' (zid), ' ' (spaţiu pentru gol interior) şi 'e' (spaţiu exterior labirintului) în funcţie de ce vede în cele 9 celule care îl înconjoară. Prima celulă văzută este cea din faţă, apoi urmează celelalte în sens orar. Roby e miop, nu vede mai departe de atât.

b.            Roteşte, codificată prin 2 litere: prima este 'r', iar cea de a doua indică direcţia stânga ('S') sau dreapta ('D') care face ca robotul să se întoarcă cu 90o în direcţia indicată;

c.            Păşeşte, codificată prin 'p', care face ca robotul să avanseze cu o celulă spre înainte, în direcţia în care este orientat. Dacă nu se poate deplasa în directia respectivă, atunci comanda nu are nici un efect.


Exemplu de conţinu pentru fişierul labirint.txt. Robotul este marcat cu litera R:

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

ezzzzzzzzzzzzzzzzzzzzzzzzzzzzzze

e          z                  ze

ezzzzzzzzz z zzzzzzzzzzzzzzzz ze

ez       z z z              z ze

ez       z z z z          z z ze

ez       z z z zzzzzzzzzzzz z ze

ez       z   z            z   ze

ezzzzzzzzzzzzzRzzzzzzzzzzzzzzzze

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

Exemplu de comenzi:

      v           // returneaza "  zooozz"

p

      v           // returneaza " z z zzz"

p

      v           // returneaza " zz  zzz"

p

      v           // returneaza "  zz zzz"

p

      v           // returneaza "zz z zzz"

r D

v           // returneaza " z zzzzz"

p

După aceste comenzi, imaginea robotului asupra labirintului este următoarea:

zzz

zR

z z

z z

z 

z z

eee