.


:




:

































 

 

 

 


3.




. , . , , , , , , .

, , . , , , . , , .

. -, , .

-, , . , , - , . , , ,

, . ( ) ( ).

.

, , , . . , , , , .

, : , . - .

, , .

; . , , , . , .

, , . . , , .

Room (), Door () Wall () . , . , , .

Room, Door Wai 1.

. , , Direction C++:

 

enum Direction {North, South, East, West};

 

MapSite - . Enter. , . . , . , :

 

class MapSite {

public:

virtual void Enter () = 0;

};

 

Enter .

, , , Map Si te , Enter. Enter , . Enter , .

 

Room - MapSite, . MapSite, . :

 

class Room: public MapSite {

public:

Room(int roomNo);

MapSite* GetSide(Direction) const;

void SetSide(Direction, MapSite*);

virtual void Enter();

private:

MapSite* _sides[4];

int _rbomNumber;

};

 

, :

 

class Wall: public MapSite {

public:

Wall();

virtual void Enter();

};

 

class Door: public MapSite {

public:

Door(Room* = 0, Room* = 0);

virtual void Enter();

Room* OtherSideFrom(Room*);

private:

Room* _rooml;

Room* _room2;

bool _isOpen;

};

 

. Maze . RoomNo :

 

class Maze {

public:

Maze();

void AddRoom(Room*);

Room* RoomNo(int) const;

private:

//...

};

 

RoomNo , - . . , , .

MazeGame, . - , , . , - :

 

Maze* MazeGame::CreateMaze () {

Maze* aMaze = new Maze;

Room* rl = new Room(l);

Room* r2 = new Room(2);

Door* theDoor = new Door(rl, r2);

aMaze->AddRoom(rl);

aMaze->AddRoom(r2);

rl->SetSide(North, new Wall);

rl->SetSide(East, theDoor);

rl->SetSide(South, new Wall);

rl->SetSide(West, new Wall);

r2->SetSide(North, new Wall);

r2->SetSide(East, new Wall);

r2->SetSide(South, new Wall);

r2->SetSide(West, theDoor);

return aMaze;

 

, , . . , Room . . -, . . , , ( ), . .

, , . , , .

, . , DoorNeedingSpell - , , Enchant edRoom - , , , . CreateMaze, ?

, . , :

CreateMaze

, , , MazeGame . ;

CreateMaze , , , , . ;

CreateMaze , , , . ;

CreateMaze , , , , - . .

, , , . , .

Abstract Factory





:


: 2015-11-23; !; : 458 |


:

:

,
==> ...

1865 - | 1706 -


© 2015-2024 lektsii.org - -

: 0.021 .