Torna alla pagina principale del codice del gioco


 

Oggetto

 
//______________________________________________________________________________
// Classe Base Oggetto
 
#include "dichiarazioni.h"
 
int oggetto::CodOgg = 0;
 
// *** Costruttore della classe Oggetto ***
oggetto::oggetto(string n, string d, bool i, bool t, bool s, bool a, bool ac, string sugg, string r){
      illuminabile=i; trasportabile=t;
      spostabile=s; apribile=a;
      nomeogg=n; desogg=d;
      cnt=false; idogg=CodOgg++;
      suggest=sugg; reagente=r; acceso=ac;
}
 
// *** Ridefinizione dell'operatore >> della classe Oggetto ***
fstream& operator>>(fstream& s, oggetto* &a){
    string linea, nomeoggetto, suggerimento, reagente, descrizione;
    bool illuminabile=false; bool trasportabile=false; bool acceso=false;
    bool spostabile=false; bool apribile=false;
    getline(s,linea);
    while (linea!="[EndOggetto]" && !s.eof()){
          string right, left;
          bool cerca=research(linea,right,left);
          if (cerca){
             if (left!="" && right!=""){
                if (left=="NOMEOGGETTO") nomeoggetto=right;
                else if (left=="REAGENTE") reagente=right;
                else if (left=="SUGGERIMENTO") suggerimento=right;
                else if (left=="DESCRIZIONE") descrizione=right;
                else if (left=="ILLUMINABILE") {maiuscolizza(right); if (right=="trUE") illuminabile=true;}
                else if (left=="trASPORTABILE") {maiuscolizza(right); if (right=="trUE") trasportabile=true;}
                else if (left=="SPOSTABILE") {maiuscolizza(right); if (right=="trUE") spostabile=true;}
                else if (left=="APRIBILE") {maiuscolizza(right); if (right=="trUE") apribile=true;}
                else if (left=="ACCESO") {maiuscolizza(right); if (right=="trUE") acceso=true;}
             }
          }
          else{
             cout<<"\n ! ERRORE: Comando "<<linea<<" non riconosciuto (oggetto).\n";
             system("pause");
             exit(1);
         }
         getline(s,linea);
    }     
    if (nomeoggetto!="")
       a = new oggetto(nomeoggetto, descrizione, illuminabile, trasportabile, spostabile, apribile, acceso, suggerimento, reagente);
    else cout<<"\n ! ERRORE: Nome dell'oggetto mancante.\n";
    return s;
}
 
// *** Salva della classe Oggetto ***
oggetto::salva(fstream& uscita){
    uscita<<"\n[Oggetto]";
    uscita<<"\nNOMEOGGETTO="<<nomeogg<<"\nDESCRIZIONE="<<desogg;
    uscita<<"\nSUGGERIMENTO="<<suggest<<"\nREAGENTE="<<reagente;
    uscita<<"\nILLUMINABILE=";
    if (illuminabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\ntrASPORTABILE=";
    if (trasportabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nSPOSTABILE=";
    if (spostabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nAPRIBILE=";
    if (apribile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nACCESO=";
    if (acceso) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\n[EndOggetto]\n";
    return 0;
}
 
// *** Usa della classe Oggetto *** 
oggetto::usa(luogo* &utente, string& ogg){
    if (illuminabile) this->accendi(ogg);
    return utente;
}
 
// *** Accendi della classe Oggetto (anche accendi con) ***
oggetto::accendi(string& ogg){
     if (illuminabile && ogg==reagente){
        if (!acceso){
           acceso = true;
           cout<<"\n - Hai acceso l'oggetto "<<nomeogg<<".\n";
        } else cout<<"\n - L'oggetto "<<nomeogg<<' '<<e<<" gi"<<a<<" acceso.\n";
     }
     else if(illuminabile && ogg!="" && ogg!=reagente) cout<<"\n - L'oggetto "<<nomeogg<<" non si accende
     con l'oggetto "<<ogg<<".\n";
     else if(illuminabile && ogg=="" && reagente!="") cout<<"\n - Hai bisogno di un'altro oggetto per accendere
     l'oggetto "<<nomeogg<<".\n";
     else cout<<"\n - L'oggetto "<<nomeogg<<" non si accende!\n";
}
 
// *** Apri della classe Oggetto *** 
luogo* oggetto::apri(luogo* &utente, string& ogg){
     if (apribile && ogg==reagente) cout<<"\n Hai aperto l'oggetto "<<nomeogg<<".\n";
     else if (apribile && ogg!="" && reagente!=ogg && reagente!="") cout<<"\n - Non puoi aprire l'oggetto
     "<<nomeogg<<" con l'oggetto "<<ogg<<".\n";
     else if (apribile && ogg=="" && reagente!="") cout<<"\n - Hai bisogno di un'altro oggetto per aprire
     l'oggetto "<<nomeogg<<".\n";
     else cout<<"\n - L'oggetto "<<nomeogg<<" non "<<e<<" apribile.\n";
     return utente;
}
 
// *** Sposta della classe Oggetto *** 
luogo* oggetto::sposta(luogo* &utente, string& ogg){
     if (spostabile && ogg==reagente) cout<<"\n - Hai spostato l'oggetto "<<nomeogg<<".\n";
     else if(spostabile && ogg!="" && reagente!=ogg) cout<<"\n - L'oggetto "<<nomeogg<<" non si sposta con  
     l'oggetto "<<ogg<<".\n";
     else if(spostabile && ogg=="" && reagente!="") cout<<"\n - L'oggetto "<<nomeogg<<" ha bisogno di
     un'altro oggetto per spostarsi.\n";
     else cout<<"\n - Non puoi spostare "<<nomeogg<<" perch"<<e<<' '<<e<<" troppo pesante.\n";
     return utente;
}
 
//______________________________________________________________________________
// SottoClasse Oggetto Ostruzione
 
// *** Ridefinizione dell'operatore >> della classe Oggetto Ostruzione ***
fstream& operator>>(fstream& s, oggostr* &a){
    string linea, nomeoggetto, suggerimento, reagente, descrizione, direzione;
    bool illuminabile=false; bool trasportabile=false; bool acceso=false;
    bool spostabile=false; bool apribile=false; bool aperto=false;
    getline(s,linea);
    while (linea!="[EndOggOstruzione]" && !s.eof()){
          string right, left;
          bool cerca=research(linea,right,left);
          if (cerca){
             if (left!="" && right!=""){
                if (left=="NOMEOGGETTO") nomeoggetto=right;
                else if (left=="REAGENTE") reagente=right;
                else if (left=="SUGGERIMENTO") suggerimento=right;
                else if (left=="DESCRIZIONE") descrizione=right;
                else if (left=="DIREZIONE") direzione=right;
                else if (left=="ILLUMINABILE") {maiuscolizza(right); if (right=="trUE") illuminabile=true;}
                else if (left=="trASPORTABILE") {maiuscolizza(right); if (right=="trUE") trasportabile=true;}
                else if (left=="SPOSTABILE") {maiuscolizza(right); if (right=="trUE") spostabile=true;}
                else if (left=="APRIBILE") {maiuscolizza(right); if (right=="trUE") apribile=true;}
                else if (left=="ACCESO") {maiuscolizza(right); if (right=="trUE") acceso=true;}
                else if (left=="APERTO") {maiuscolizza(right); if (right=="trUE") aperto=true;}
             }
          }
          else {
             cout<<"\n ! ERRORE: Comando "<<linea<<" non riconosciuto (ostruzione).\n";
             system("pause");
             exit(1);
          }
          getline(s,linea);
    }     
    if (nomeoggetto!="")
       a = new oggostr(nomeoggetto, descrizione, illuminabile, trasportabile, spostabile, apribile, acceso, suggerimento, reagente, direzione,aperto);
    else cout<<"\n ! ERRORE: Nome dell'oggetto ostruttore mancante.\n";
    return s;
}
 
// *** Salva della classe Oggetto Ostruzione ***
oggostr::salva(fstream& uscita){
    uscita<<"\n[OggOstruzione]";
    uscita<<"\nNOMEOGGETTO="<<nomeogg<<"\nDESCRIZIONE="<<desogg;
    uscita<<"\nSUGGERIMENTO="<<suggest<<"\nREAGENTE="<<reagente;
    uscita<<"\nDIREZIONE="<<direzione<<"\nILLUMINABILE=";
    if (illuminabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\ntrASPORTABILE=";
    if (trasportabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nSPOSTABILE=";
    if (spostabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nAPRIBILE=";
    if (apribile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nACCESO=";
    if (acceso) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nAPERTO=";
    if (stato) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\n[EndOggOstruzione]\n";
    return 0;
}

// *** Apri della classe Oggetto Ostruzione (anche apri con) ***
luogo* oggostr::apri(luogo* &utente, string& ogg){
    if (apribile && ogg==reagente){
       if (!stato){
          stato = true;
          utente->delostr(direzione);
          cout<<"\n - Hai aperto l'oggetto "<<nomeogg<<".\n";
          if (suggest!=""){cout<<'\n'<<suggest<<'\n'; suggest="";};
       }
       else cout<<"\n - L'oggetto "<<nomeogg<<' '<<e<<" gi"<<a<<" aperto.\n";
    }  
    else if(apribile && ogg!="" && ogg!=reagente) cout<<"\n - L'oggetto "<<nomeogg<<" non si apre con l'oggetto "<<ogg<<".\n";
    else if(apribile && ogg=="" && reagente!="") cout<<"\n - L'oggetto "<<nomeogg<<" ha bisogno di un altro oggetto per aprirsi.\n";
    else cout<<"\n - L'oggetto "<<nomeogg<<" non "<<e<<" un oggetto apribile.\n";
    return utente;
}
 
// *** Sposta della classe Oggetto Ostruzione (anche sposta con) *** 
luogo* oggostr::sposta(luogo* &utente, string& ogg){
      if (spostabile && ogg==reagente){
         utente->delostr(direzione);
         cout<<"\n - Hai spostato l'oggetto "<<nomeogg<<".\n";
         if (suggest!=""){cout<<'\n'<<suggest<<'\n'; suggest="";};
      }
      else if(spostabile && ogg!="" && ogg!=reagente) cout<<"\n - L'oggetto "<<nomeogg<<" non si sposta con
      l'oggetto "<<ogg<<".\n";
      else if(spostabile && ogg=="" && reagente!="") cout<<"\n - L'oggetto "<<nomeogg<<" ha bisogno di un
      altro oggetto per essere spostato.\n";
      else cout<<"\n - L'oggetto"<<nomeogg<<" non "<<e<<" spostabile.\n";
      return utente;
}
 
// *** Usa della classe Oggetto Ostruzione ***
luogo* oggostr::usa(luogo* &utente, string& ogg){
     if (ogg==reagente){
        utente->delostr(direzione);
        if (suggest!=""){cout<<'\n'<<suggest<<'\n'; suggest="";};
     }else cout<<"\n - Spiacente, nulla di fatto.\n";
     return utente;  
}
 
//______________________________________________________________________________
// SottoClasse Oggetto Contenitore (Contenitore di oggetti)
 
// *** Distruttore della classe Oggetto Contenitore ***
oggcont::~oggcont(){
    for (map<string,oggetto*>::iterator i=cont.begin(); i!=cont.end(); i++)
    delete (i->second);
}
 
// *** Ridefinizione dell'operatore >> della classe Oggetto Contenitore ***
fstream& operator>>(fstream& s, oggcont* &a){
    string linea, nomeoggetto, suggerimento, reagente, descrizione;
    bool illuminabile=false; bool trasportabile=false; bool acceso=false;
    bool spostabile=false; bool apribile=false; bool aperto=true;
    getline(s,linea);
    while (linea!="[EndOggContenitore]" && !s.eof()){
          string right, left;
          bool cerca=research(linea,right,left);
          if (cerca){
             if (left!="" && right!=""){
                if (left=="NOMEOGGETTO") nomeoggetto=right;
                else if (left=="REAGENTE") reagente=right;
                else if (left=="SUGGERIMENTO") suggerimento=right;
                else if (left=="DESCRIZIONE") descrizione=right;
                else if (left=="ILLUMINABILE") {maiuscolizza(right); if (right=="trUE") illuminabile=true;}
                else if (left=="trASPORTABILE") {maiuscolizza(right); if (right=="trUE") trasportabile=true;}
                else if (left=="SPOSTABILE") {maiuscolizza(right); if (right=="trUE") spostabile=true;}
                else if (left=="APRIBILE") {maiuscolizza(right); if (right=="trUE") apribile=true;}
                else if (left=="ACCESO") {maiuscolizza(right); if (right=="trUE") acceso=true;}
                else if (left=="APERTO") {maiuscolizza(right); if (right=="FALSE") aperto=false;}
             }
          }
          else{
             cout<<"\n ! ERRORE: Comando "<<linea<<" non riconosciuto (contenitore).\n";
             system("pause");
             exit(1);
          }
          getline(s,linea);
    }     
    if (nomeoggetto!="")
       a = new oggcont(nomeoggetto, descrizione, illuminabile, trasportabile, spostabile, apribile, acceso,
       suggerimento, reagente, aperto);
    else cout<<"\n ! ERRORE: Nome dell'oggetto contenitore mancante.\n";
    getline( s,linea);
    while(linea.begin()==linea.end() && !s.eof()) getline(s,linea);
    if (linea =="[OggInContenitore]"){
        while (linea!="[EndOggInContenitore]"){
              getline( s,linea);
              while(linea.begin()==linea.end() && !s.eof()) getline(s,linea);
              if (linea=="[Oggetto]"){oggetto* obj; s>>obj; *a+=*(obj);}
              else if (linea!="[EndOggInContenitore]")
                   cout<<"\n ! ERRORE: Non si possono creare oggetti derivati, o errore comando "<<linea<<".\n";
       }
    }
    return s;
}
 
// *** Salva della classe Oggetto Contenitore ***
oggcont::salva(fstream& uscita){
    uscita<<"\n[OggContenitore]";
    uscita<<"\nNOMEOGGETTO="<<nomeogg<<"\nDESCRIZIONE="<<desogg;
    uscita<<"\nSUGGERIMENTO="<<suggest<<"\nREAGENTE="<<reagente;
    uscita<<"\nILLUMINABILE=";
    if (illuminabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\ntrASPORTABILE=";
    if (trasportabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nSPOSTABILE=";
    if (spostabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nAPRIBILE=";
    if (apribile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nACCESO=";
    if (acceso) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nAPERTO=";
    if (stato) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\n[EndOggContenitore]\n\n[OggInContenitore]\n";
    for (map<string,oggetto*>::iterator i=cont.begin(); i!=cont.end(); i++)
        (i->second)->salva(uscita);
    uscita<<"[EndOggInContenitore]\n";
    return 0;
}
 
// *** Salvazaino della classe Oggetto Contenitore ***
oggcont::salvazaino(fstream& uscita){
    uscita<<"[OggInContenitore]\n";
    for (map<string,oggetto*>::iterator i=cont.begin(); i!=cont.end(); i++)
        (i->second)->salva(uscita);
    uscita<<"\n[EndOggInContenitore]\n";
}
 
// *** Usa della classe Oggetto Contenitore ***
luogo* oggcont::usa(luogo* &utente, string& ogg){
    this->apri(utente, ogg);
    return utente;
}
 
// *** Apri della classe Oggetto Contenitore (anche apri con) ***
luogo* oggcont::apri(luogo* &utente, string& ogg){
     if (apribile && ogg==reagente){
        if (!stato){
           stato = true;
           cout<<"\n - Hai aperto l'oggetto "<<nomeogg<<".\n";
        }else cout<<"\n - L'oggetto "<<nomeogg<<' '<<e<<" gi"<<a<<" aperto.\n";
     }  
     else if(apribile && ogg!="" && ogg!=reagente) cout<<"\n - L'oggetto "<<nomeogg<<" non si apre con
     l'oggetto "<<ogg<<".\n";
     else if(apribile && ogg=="" && reagente!="") cout<<"\n - L'oggetto "<<nomeogg<<" ha bisogno di un altro
     oggetto per aprirsi.\n";
     else cout<<"\n - L'oggetto "<<nomeogg<<" non "<<e<<" apribile.\n";
     return utente;
}
 
// *** Ridefinizione dell'operatore += della classe Oggetto Contenitore ***
oggcont& oggcont::operator+=(oggetto& ogg){
     string desc = ogg.nome();
     pair<string,oggetto*> a(desc,&ogg);
     cont.insert(a);
     return *this;
}
 
// *** Search della classe Oggetto Contenitore ***
bool oggcont::search(string ogg){
     map<string,oggetto*>::iterator i = cont.find(ogg);
     if (i!=cont.end()) return true;
     return false;
}
 
// *** Estrai della classe Oggetto Contenitore (con specificazione per lo zaino) ***
oggetto* oggcont::estrai(string& ogg, string& tipo){
   oggetto* trovato = NULL;
   if (cont.begin()!=cont.end()){
      map<string,oggetto*>::iterator i = cont.find(ogg);
      if (i!=cont.end() && tipo=="zaino"){
         trovato = (i->second);
         cont.erase(i);
      }
      else if (i==cont.end() && tipo=="zaino") cout<<"\n - L'oggetto "<<ogg<<" non "<<e<<" presente nello
      "<<tipo<<"\n";
      else if (i!=cont.end() && tipo!="zaino"){
         if (stato){
            string chiedi;
            cout<<"\n - Vuoi prendere questo oggetto "<<ogg<<" da "<<tipo<<" ? si/no\n";
            cout<<"\nRisposta => ";
            getline(cin,chiedi);
            if (chiedi=="si"){
               if ((i->second)->prendi()){
                  trovato = (i->second);
                  cont.erase(i);
                  cout<<"\n - Hai messo l'oggetto "<<ogg<<" nello zaino\n";
                  if ((i->second)->prntsugg()!=""){cout<<'\n'<<(i->second)->prntsugg()<<'\n'; (i->second)->
                  deletesugg();};
               }
               else cout<<"\n - L'oggetto "<<ogg<<" non "<<e<<" trasportabile\n";
            }
         }
      }
   }
   return trovato;
};
 
// *** Guarda della classe Oggetto Contenitore ***
oggcont::guarda(){
     cout<<"\n "<<nomeogg<<" - "<<desogg<<'\n';
       if (!stato) cout<<"\n  - Spiacente: "<<nomeogg<<' '<<e<<" chiuso/a.\n";
       else
          if (cont.begin()!=cont.end()){
             cout<<"\n  Questi sono gli oggetti presenti in questo/a "<<nomeogg<<":\n";
             for (map<string,oggetto*>::iterator i=cont.begin(); i!=cont.end(); i++)
                 cout<<"  - "<<(i->second)->nome()<<" ("<<(i->second)->descrizione()<<")\n";
          }
          else cout<<"\n - Non ci sono oggetti in questo/a "<<nomeogg<<'\n';
}
 
//______________________________________________________________________________
// SottoClasse Oggetto Nascondiglio (Contenitore di oggetti)
 
// *** Distruttore della classe Oggetto Nascondiglio ***
oggnasc::~oggnasc(){
     for (map<string,oggetto*>::iterator i=nascondiglio.begin(); i!=nascondiglio.end(); i++)
         delete(i->second);
}
 
// *** Ridefinizione dell'operatore *= della classe Oggetto Nascondiglio ***
oggnasc& oggnasc::operator*=(oggetto &ogg){
     string desc = ogg.nome();
     pair<string,oggetto*> a(desc,&ogg);
     nascondiglio.insert(a);
     return *this;
}
 
// *** Ridefinizione dell'operatore >> della classe Oggetto Nascondiglio ***
fstream& operator>>(fstream& s, oggnasc* &a){
    string linea, nomeoggetto, suggerimento, reagente, descrizione;
    bool illuminabile=false; bool trasportabile=false; bool acceso=false;
    bool spostabile=false; bool apribile=false;
    getline(s,linea);
    while (linea!="[EndOggNascondiglio]" && !s.eof()){
          string right, left;
          bool cerca=research(linea,right,left);
          if (cerca){
             if (left!="" && right!=""){
                if (left=="NOMEOGGETTO") nomeoggetto=right;
                else if (left=="REAGENTE") reagente=right;
                else if (left=="SUGGERIMENTO") suggerimento=right;
                else if (left=="DESCRIZIONE") descrizione=right;
                else if (left=="ILLUMINABILE") {maiuscolizza(right); if (right=="trUE") illuminabile=true;}
                else if (left=="trASPORTABILE") {maiuscolizza(right); if (right=="trUE") trasportabile=true;}
                else if (left=="SPOSTABILE") {maiuscolizza(right); if (right=="trUE") spostabile=true;}
                else if (left=="APRIBILE") {maiuscolizza(right); if (right=="trUE") apribile=true;}
                else if (left=="ACCESO") {maiuscolizza(right); if (right=="trUE") acceso=true;}
             }
          }
          else{
             cout<<"\n ! ERRORE: Comando "<<linea<<" non riconosciuto (nascondiglio).\n";
             system("pause");
             exit(1);
          }
          getline(s,linea);
    }     
    if (nomeoggetto!="")
       a = new oggnasc(nomeoggetto, descrizione, illuminabile, trasportabile, spostabile, apribile, acceso,
       suggerimento, reagente);
    else cout<<"\n ! ERRORE: Nome dell'oggetto nascondiglio mancante.\n";
    getline( s,linea);
    while(linea.begin()==linea.end() && !s.eof()) getline(s,linea);
    if (linea =="[OggNascosti]"){
        while (linea!="[EndOggNascosti]"){
              getline( s,linea);
              while(linea.begin()==linea.end() && !s.eof()) getline(s,linea);
              if (linea=="[Oggetto]"){oggetto* obj; s>>obj; (*a)*=(*obj);}
              else if (linea!="[EndOggNascosti]")
                   cout<<"\n ! ERRORE: Non si possono creare oggetti derivati, o errore comando "<<linea<<".\n";
       }
    }
    return s;
}
 
// *** Salva della classe Oggetto Nascondiglio ***
oggnasc::salva(fstream& uscita){
    uscita<<"\n[OggNascondiglio]";
    uscita<<"\nNOMEOGGETTO="<<nomeogg<<"\nDESCRIZIONE="<<desogg;
    uscita<<"\nSUGGERIMENTO="<<suggest<<"\nREAGENTE="<<reagente;
    uscita<<"\nILLUMINABILE=";
    if (illuminabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\ntrASPORTABILE=";
    if (trasportabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nSPOSTABILE=";
    if (spostabile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nAPRIBILE=";
    if (apribile) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\nACCESO=";
    if (acceso) uscita<<"trUE"; else uscita<<"FALSE";
    uscita<<"\n[EndOggNascondiglio]\n";
    uscita<<"\n[OggNascosti]\n";
    for (map<string,oggetto*>::iterator i = nascondiglio.begin(); i!=nascondiglio.end(); i++)
        (i->second)->salva(uscita);
    uscita<<"[EndOggNascosti]\n";
    return 0;
}
 
// *** Sposta della classe Oggetto Nascondiglio (anche sposta con) ***
luogo* oggnasc::sposta(luogo* &utente, string& ogg){
    if (spostabile && ogg==reagente){
       cout<<"\n - Hai spostato l'oggetto "<<nomeogg<<"\n";
       if (suggest!=""){cout<<'\n'<<suggest<<'\n'; suggest="";};
       if (nascondiglio.begin()!=nascondiglio.end()){
          for(map<string,oggetto*>::iterator i = nascondiglio.begin(); i!=nascondiglio.end(); i++){
             *utente+=*(i->second);
             nascondiglio.erase(i);
          }
          utente->guarda();
       }
    }  
    else if (spostabile && ogg!="" && ogg!=reagente) cout<<"\n - L'oggetto "<<nomeogg<<" non si sposta con
    l'oggetto "<<ogg<<".\n";
    else if (spostabile && ogg=="" && reagente!="") cout<<"\n - L'oggetto "<<nomeogg<<" ha bisogno di
    un'altro oggetto per spostarsi.\n";
    else cout<<"\n - Spiacente: l'oggetto "<<nomeogg<<" non "<<e<<" spostabile.\n";
    return utente;
}
 
// *** Usa con della classe Oggetto Nascondiglio ***
luogo* oggnasc::usa(luogo* &utente, string& ogg){
     if (ogg==reagente){
        if (nascondiglio.begin()!=nascondiglio.end()){
           for (map<string,oggetto*>::iterator i = nascondiglio.begin(); i!=nascondiglio.end(); i++){
               *utente+=*(i->second);
               nascondiglio.erase(i);
           }
           if (suggest!=""){cout<<'\n'<<suggest<<'\n'; suggest="";};
        }
     }
     else if ((ogg!="" && ogg!=reagente) || (ogg=="" && reagente!=""))
        cout<<"\n - L'oggetto "<<nomeogg<<" deve essere usato con un'altro oggetto.\n";
     return utente;
}