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

📄 builder.c

📁 design_patterns code设计模式书中的源码 对学习设计模式的人很有帮助的
💻 C
字号:
/**/#include "C++/MazeParts.H"#include "C++/MazeGame.H"#include <iostream.h>/**/class MazeBuilder {public:    virtual void BuildMaze() { }    virtual void BuildRoom(int room) { }    virtual void BuildDoor(int roomFrom, int roomTo) { }    virtual Maze* GetMaze() { return 0; }protected:    MazeBuilder();};/**/Maze* MazeGame::CreateMaze (MazeBuilder& builder) {    builder.BuildMaze();    builder.BuildRoom(1);    builder.BuildRoom(2);    builder.BuildDoor(1, 2);    return builder.GetMaze();}/**/Maze* MazeGame::CreateComplexMaze (MazeBuilder& builder) {    builder.BuildRoom(1);    // ...    builder.BuildRoom(1001);    return builder.GetMaze();}/**/class StandardMazeBuilder : public MazeBuilder {public:    StandardMazeBuilder();/**/    virtual void BuildMaze();    virtual void BuildRoom(int);    virtual void BuildDoor(int, int);/**/    virtual Maze* GetMaze();private:    Direction CommonWall(Room*, Room*);    Maze* _currentMaze;};/**/StandardMazeBuilder::StandardMazeBuilder () {    _currentMaze = 0;}/**/void StandardMazeBuilder::BuildMaze () {    _currentMaze = new Maze;}/**/Maze *StandardMazeBuilder::GetMaze () {    Maze* maze =  _currentMaze;    return maze;}/**/void StandardMazeBuilder::BuildRoom (int n) {    if (!_currentMaze->RoomNo(n)) {        Room* room = new Room(n);        _currentMaze->AddRoom(room);/**/        room->SetSide(North, new Wall);        room->SetSide(South, new Wall);        room->SetSide(East, new Wall);        room->SetSide(West, new Wall);    }}/**/void StandardMazeBuilder::BuildDoor (int n1, int n2) {    Room* r1 = _currentMaze->RoomNo(n1);    Room* r2 = _currentMaze->RoomNo(n2);    Door* d = new Door(r1, r2);/**/    r1->SetSide(CommonWall(r1,r2), d);    r2->SetSide(CommonWall(r2,r1), d);}/**/void dummy() {/**/Maze* maze;MazeGame game;StandardMazeBuilder builder;game.CreateMaze(builder);maze = builder.GetMaze();/**/}/**/class CountingMazeBuilder : public MazeBuilder {public:    CountingMazeBuilder();/**/    virtual void BuildMaze();    virtual void BuildRoom(int);    virtual void BuildDoor(int, int);    virtual void AddWall(int, Direction);/**/    void GetCounts(int&, int&) const;private:    int _doors;    int _rooms;};/**/CountingMazeBuilder::CountingMazeBuilder () {    _rooms = _doors = 0;}/**/void CountingMazeBuilder::BuildRoom (int) {    _rooms++;}/**/void CountingMazeBuilder::BuildDoor (int, int) {    _doors++;}/**/void CountingMazeBuilder::GetCounts (    int& rooms, int& doors) const {    rooms = _rooms;    doors = _doors;}/**/void dummy1() {/**/int rooms, doors;MazeGame game;CountingMazeBuilder builder;game.CreateMaze(builder);builder.GetCounts(rooms, doors);cout << "The maze has "     << rooms << " rooms and "     << doors << " doors" << endl;/**/}/**/

⌨️ 快捷键说明

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