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

📄 c18-生成器例.txt

📁 C++课件,很好用的,帮助大家学习C++.
💻 TXT
字号:
//使用生成器模式

class MazeBuilder
{
public:	
	virtual void BuildMaze()  	{}
	virtual void BuildRoom(int n) 	{}
	virtual void BuildDoor(int roomFrom,int roomTo) {}

	virtual Maze * GetMaze() {return 0;}
protected:
	MazeBuilder();
};

Maze * Game::CreateMaze(MazeBuilder & builder)
{
	builder.BuildMaze();

	builder.BuildRoom(1);
	builder.BuildRoom(2);
	builder.BuildDoor(1,2);

	builder.BuildRoom(3);
	builder.BuildRoom(4);
	builder.BuildDoor(3,4);

	//...

	return builder.GetMaze();
}
//-------------------------------------------------------------------------------------------

//具体的生成器

class StandardMazeBuilder:public MazeBuilder
{
public:	
	StandardMazeBuilder() {curMaze=0;}

	void BuildMaze()  	{curMaze=new Maze;}
	void BuildRoom(int n) 	
		{
		   if (!curMaze->RoomNo(n) {
			Room * room=new Room(n);
			curMaze->AddRoom(room);
			
			room->SetSide(1,new Wall);
			room->SetSide(2,new Wall);
			room->SetSide(3,new Wall);
			room->SetSide(4,new Wall);
		   }
		}

	void BuildDoor(int n1,int n2) 
		{
			Room * r1=curMaze->RoomNo(n1);
			Room * r2=curMaze->RoomNo(n2);
			Door * d=new Door(r1,r2);

			r1->SetSide(CommonWall(r1,r2),d);
			r2->SetSide(CommonWall(r2,r1),d);
		}

	Maze * GetMaze() 	{return curMaze;}
private:
	int CommonWall(Room * r1,Room * r2); //r1和r2之间的墙相对于r1的方向
	Maze * curMaze;
};


// 实际使用
Game mygame;
StandardMazeBuilder builder;
mygame.CreateMaze(builder);
Maze * maze=Builder->GetMaze();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -