#include #include #include "griglia.h" #include "robot.h" /**************************** * realizzare la funzione visita * che data una griglia con un robot, * guidi quest'ultimo alla posizione * di arrivo. *********************************/ void visita( Griglia&, Robot& ); int main() { Griglia g( 15, 25 ); cout << "Griglia g( 15, 25 ) \n"; g.disegna(); Robot rob; g.inserisciRobot( rob ) ; cout << "Robot r; g.inserisciRobot( r ) \n"; g.disegna(); visita( g, rob ); if ( g.getArrivo() == rob.getPosizione() ) cout << "Arrivato !!" << endl; else cout << "Fallimento !!" << endl; return 0; } /*void visita( Griglia& g, Robot& rob){ //Scrivere qui il codice della funzione di visita. }; */ //********************************* //** Una possibile soluzione: /* void visita( Griglia& g, Robot& rob) { Posizione oldPos; //memorizza la posizione del robot rob bool fine =false; //sara' true quando rob non puo' piu' avanzare do{ bool trovato=false; //sarà vero quando rob trova una nuova posizione in percorso int i=0; //conta le quattro direzioni while( !trovato && i < 4){ Posizione pos = rob.getPosizione(); //memorizzo la nuova posizione del robot rob.avanza(); if ((rob.getPosizione()!= oldPos) && // se la nuova posizione non è già stata occupata precedentemente g.inPercorso(rob.getPosizione())) { // ed è in percorso, trovato = true; //ho trovato una nuova posizione nel percorso g.disegna(); oldPos = pos; //memorizzo la posizione precedentemente occupata } else { rob.retrocedi(); //torno indietro rob.giraADestra(); //e cambio direzione i++; } }; if (i == 4) fine = true; //ho provato le quattro direzioni senza trovare una posizione nel percorso }while(! fine) ; } */ //********************************* //** Atra possibile soluzione: /* void visita( Griglia& g, Robot& rob) { Posizione oldPos = rob.getPosizione(); while( g.getArrivo() != rob.getPosizione()){ Posizione aux = rob.getPosizione(); rob.avanza(); while(!g.inPercorso(rob.getPosizione()) || oldPos == rob.getPosizione()){ rob.retrocedi(); rob.giraADestra(); rob.avanza(); } oldPos = aux; g.disegna(); } } */ //********************************* //** Soluzione che non cosidera il percorso: void visita( Griglia& g, Robot& rob) { string dir; if(g.getArrivo().getX() > rob.getPosizione().getX()) dir = "SUD"; else dir = "NORD"; rob.setDirezione(dir); g.disegna(); while(rob.getPosizione().getX() != g.getArrivo().getX()){ rob.avanza(); // cout << rob.getPosizione().getX() << endl; g.disegna(); } if(g.getArrivo().getY() > rob.getPosizione().getY()) dir = "EST"; else dir = "OVEST"; rob.setDirezione(dir); g.disegna(); while(rob.getPosizione().getY() != g.getArrivo().getY()){ rob.avanza(); // cout << rob.getPosizione().getY() << endl; g.disegna(); } }