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;
}
|