#include
using namespacestd;enumDirection {
North,
East,
South,
West,
};classMapSite {public:virtual void Enter() = 0;
};class Room : publicMapSite {public:
Room(introomNo):_roomNumber(roomNo) {};
MapSite*GetSide(Direction) const;virtual void SetSide(Direction direction, MapSite *) {
cout<< "Set the"
<<_roomnumber>
<
<
};intGetRoomNo() {return_roomNumber;
};virtual voidEnter() {
cout<< "Enter the Room." <
};private:
MapSite*_sides[4];int_roomNumber;
};class Wall : publicMapSite {public:
Wall() {};virtual voidEnter() {
cout<< "Enter the wall." <
};
};class Door : publicMapSite {public:
Door(Room* = 0, Room* = 0) {};virtual voidEnter() {
cout<< "Enter the door." <
};
Room*OtherSideFrom(Room*) {};private:
Room*_room1;
Room*_room2;bool_isOpen;
};classMaze {public:
Maze() {};void AddRoom(Room*room) {
cout<< "Add the room" << room->GetRoomNo() << "." <
};
Room* RoomNo(int) const{};
};//以下为工厂模式不同地方
classMazeFactory {public:
MazeFactory() {};virtual Maze* MakeMaze() const{return newMaze;
};virtual Wall* MakeWall() const{return newWall;
};virtual Room* MakeRoom(int n) const{return newRoom(n);
};virtual Door* MakeDoor(Room* r1, Room* r2) const{return newDoor(r1, r2);
};
};classMazeGame {public:
Maze* CreateMaze(MazeFactory &factory) {
Maze* aMaze =factory.MakeMaze();
Room* r1 = factory.MakeRoom(1);
Room* r2 = factory.MakeRoom(2);
Door* theDoor =factory.MakeDoor(r1, r2);
aMaze->AddRoom(r1);
aMaze->AddRoom(r2);
r1->SetSide(North, factory.MakeWall());
r1->SetSide(East, theDoor);
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, theDoor);returnaMaze;
};
};intmain() {
MazeGame mygame;
MazeFactory factory;
mygame.CreateMaze(factory);
system("pause");return 0;
}