⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapsite.h

📁 这个小程序是我们上课时做的
💻 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 + -