#include #include #include using namespace std; class failure {public: virtual void view()=0; virtual void Repair()=0; virtual bool Check()=0; virtual string GetStatus()=0; }; class EngineFailed:public failure {private: string status; public: virtual bool Check(){return status.compare("Engine is OK!")==0;} virtual string GetStatus(){return status;} virtual void Repair(){if (rand()%3) status="Engine is OK!";}; virtual void view(){cout<Check()) {if(Power%5>rand()%10) cout<<"++ No one survive"<rand()%10) cout<<"+ Destroyed!!!"<view(); } ~Weapon(){delete f;} }; class Engine {private: int Number; int Power; bool started; public: EngineFailed E; failure *f; void SetNumber(int N){Number=N;} void SetPower(int P){Power=P;} Engine(){started=false; f=new EngineFailed; f=&E; Power=rand()%10; f->view(); } void Start(){ if (f->Check()){started=true; cout<<"Engine starting"<view();} void Open(){ if (f->Check()) {opened=true; cout<<"Lock openning"<>i; switch (i) {case 1: cout<<"select engine's number"<>j; cout<<"1- engine's status"<<"\n"<<"2- start engine"<<"\n"<<"3- stop engine"<<"\n"<<"4- repair engine"<<"\n"<<"0- return"<>k; switch (k) {case 1:SHIP.e[j].f->view();break; case 2:SHIP.e[j].Start();break; case 3:SHIP.e[j].Stop();break; case 4:SHIP.e[j].f->Repair();break; default: break; } break; case 2: cout<<"select weapon's number"<>j; cout<<"1- weapon's status"<<"\n"<<"2- fire"<<"\n"<<"3- repair engine"<<"\n"<<"0- return"<>k; switch (k) {case 1:SHIP.w[j].f->view();break; case 2:SHIP.w[j].Fire();break; case 3:SHIP.w[j].f->Repair();break; default: break; } break; case 3: cout<<"select lock's number"<>j; cout<<"1- lock's status"<<"\n"<<"2- open lock"<<"\n"<<"3- close lock"<<"\n"<<"4- repair lock"<<"\n"<<"0- return"<>k; switch (k) {case 1:SHIP.l[j].f->view();break; case 2:SHIP.l[j].Open();break; case 3:SHIP.l[j].Close();break; case 4:SHIP.l[j].f->Repair();break; } break; } } return 0; };