📄 mapsite.h
字号:
enum Direction {North, South, East, West};
static int roomNumber = 0;
class MapSite
{
public:
virtual void Enter() = 0;
};
//////////////////////////////////////
class Wall:public MapSite
{
public:
Wall()
{
cout<<"You haved created a wall!\n";
}
virtual void Enter()
{
cout<<"You cannot entered a wall!!!\n";
}
};
/////////////////////////////////////////////////////
class Room:public MapSite
{
public:
Room(int roomNo)
{
roomNumber = roomNo;
cout<<"You have created a room with a id( ";
cout<<roomNo;
cout<<" )\n";
}
MapSite* GetSide(int no) const
{
return _sides[no];
}
void SetSide(int no,MapSite* mapSite)
{
_sides[no] = mapSite;
}
virtual void Enter()
{
cout<<"You hava entered a room!\n";
}
private:
MapSite* _sides[4];
};
///////////////////////////////////////////////////////
class Door:public MapSite
{
public:
Door(Room* r1,Room* r2)
{
_room1 = r1;
_room2 = r2;
cout<<"You have created a door with two rooms!\n";
}
virtual void Enter()
{
cout<<"You have entered a door!\n";
}
Room* OtherSideFrom(Room* r)
{
return r;
}
bool getOpenStatus()
{
return _isOpen;
}
void setOpenStatus(bool flag)
{
_isOpen = flag;
}
private:
Room* _room1;
Room* _room2;
bool _isOpen;
};
////////////////////////////////////////////////////////
class Maze
{
public:
Maze()
{
for(int i=0;i<100;i++)
rooms[i] = 0;
roomNumber = 0;
}
void AddRoom(Room* r)
{
rooms[roomNumber] = r;
cout<<"You have added a room with a id( ";
cout<<roomNumber;
cout<<" )\n";
roomNumber++;
}
Room* RoomNo(int no) const
{
return rooms[no];
}
int getRoomNumber()
{
return roomNumber;
}
void setRoomNumber(int no)
{
if(no>99 || no<0)
cout<<"The roomNumber is error!\n";
roomNumber = no;
}
private:
Room* rooms[100];
int roomNumber;
};
/////////////////////////////////////////////////////////
class MazeFactory
{
public:
MazeFactory()
{
}
virtual Maze* MakeMaze() const
{
return new Maze;
}
virtual Wall* MakeWall() const
{
return new Wall;
}
virtual Room* MakeRoom( int n ) const
{
return new Room(n);
}
virtual Door* MakeDoor( Room* r1, Room* r2 ) const
{
return new Door( r1, r2 );
}
};
//////////////////////////////////////////////
class Spell
{
public:
Spell()
{
cout<<"The enchantedDoor has to be opened with a spell!\n";
}
Spell* CastSpell() const
{
return new Spell;
}
};
//////////////////////////////////////////////////
class EnchantedRoom:public Room
{
public:
EnchantedRoom(int no,Spell* sp):Room(no)
{
spell = sp;
cout<<"You haved created a enchantedRoom!\n";
}
void Enter()
{
cout<<"You haved entered a enchantedRoom!\nBe Care!!!\n";
}
private:
Spell* spell;
};
////////////////////////////////////////////////////
class DoorNeedingSpell:public Door
{
public:
DoorNeedingSpell(Room* r1,Room* r2):Door(r1,r2)
{
cout<<"You have created a enchanted door!\n";
}
void Enter()
{
cout<<"You have entered a enchanted door!\nBe Care!!!\n";
}
};
//////////////////////////////////////////////////
class BombedWall:public Wall
{
public:
BombedWall()
{
cout<<"You have created a bombed wall!\n";
}
void Enter()
{
cout<<"You have entered a bombed wall!\nBe Care!!!\n";
}
};
//////////////////////////////////////////////
class RoomWithABomb:public Room
{
public:
RoomWithABomb(int no):Room(no)
{
cout<<"You haved created a roomWithABomb!\n";
}
void Enter()
{
cout<<"You haved entered a roomWithABomb!\nBe Care!!!\n";
}
};
/////////////////////////////////////////////////////////
class EnchantedMazeFactory:public MazeFactory
{
public:
EnchantedMazeFactory()
{
}
virtual Room* MakeRoom( int n ) const
{
return new EnchantedRoom( n, CastSpell() );
}
virtual Door* MakeDoor( Room* r1, Room* r2 ) const
{
return new DoorNeedingSpell( r1, r2 );
}
protected:
Spell* CastSpell() const
{
return new Spell;
}
};
//////////////////////////////////////////////////
class BombedMazeFactory:public MazeFactory
{
public:
BombedMazeFactory()
{
}
virtual Wall* MakeWall() const
{
return new BombedWall;
}
virtual Room* MakeRoom ( int n ) const
{
return new RoomWithABomb(n);
}
};
///////////////////////////////////////////////////
class MazeGame
{
public:
MazeGame()
{
}
Maze* CreateMaze( MazeFactory& );
};
Maze* MazeGame::CreateMaze( MazeFactory& factory )
{
Maze* aMaze = factory.MakeMaze();
Room* r1 = factory.MakeRoom(1);
Room* r2 = factory.MakeRoom(2);
Door* aDoor = factory.MakeDoor( r1, r2 );
aMaze->AddRoom( r1 );
aMaze->AddRoom( r2 );
r1->SetSide( North, factory.MakeWall() );
r1->SetSide( East, aDoor );
r1->SetSide( South, factory.MakeWall() );
r1->SetSide( West, factory.MakeWall() );
r2->SetSide( North, factory.MakeWall() );
r2->SetSide( East, factory.MakeWall() );
r2->SetSide( South, factory.MakeWall() );
r2->SetSide( West, aDoor );
return aMaze;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -