#include<iostream>#include<vector>#include<cstdlib>#include<ctime>classDream{protected:std::stringcontent;doubleserenityLevel; // 0 (pure terror) to 1 (absolute peace)public:Dream(std::stringcontent,doubleserenity) : content(content),serenityLevel(serenity){}virtualvoidexperience()const{std::cout<<"Drifting into a dream... "<<content<<"\n";}boolisNightmare()const{returnserenityLevel<0.3;}};classNightmare : publicDream{private:std::vector<std::string>fears = {"Falling","Being chased","Losing something","Darkness","Endless maze"};public:Nightmare(std::stringbaseContent) : Dream(baseContent,(std::rand()%30)/100.0){content+=" but something feels off... "+fears[std::rand()%fears.size()];}voidexperience()constoverride{std::cout<<"Slipping into a nightmare... "<<content<<"\n";}};classMind{public:voidsleep(){std::srand(std::time(0));Dream* dream;if(std::rand()%2==0){dream = newDream("Flying over mountains",0.8);}else{dream = newNightmare("Walking through a quiet forest");}dream->experience();if(dream->isNightmare()){std::cout<<"You wake up sweating... it was a nightmare!\n";}else{std::cout<<"A peaceful dream fades as morning arrives.\n";}deletedream;}};intmain(){MindmyMind;myMind.sleep();return0;}