分类:
2008-04-17 15:53:45
// MapSite.h
#ifndef _MAPSITE_H
#define _MAPSITE_H
class MapSite {
public:
virtual void Enter() = 0;
virtual ~MapSite() {}
};
#endif
// MapSite.cpp
#include "MapSite.h"
// Door.h
#ifndef _DOOR_H
#define _DOOR_H
#include "MapSite.h"
#include "Room.h"
class Door : public MapSite {
public:
Door(Room* r1, Room* r2);
virtual void Enter();
Room* OtherSideFrom(Room* r1);
bool IsOpen() {
return _isOpen;
}
void Open() {
_isOpen = true;
}
void Close() {
_isOpen = false;
}
virtual ~Door() {
}
private:
Room* _room1;
Room* _room2;
bool _isOpen;
};
#endif
// Door.cpp
#include "Door.h"
#include
using namespace std;
Door::Door(Room* r1, Room* r2) {
cout << "Door Constructor" << endl;
cout << "Door (" << r1->GetRoomNo() << "," << r2->GetRoomNo() << ") Created." << endl;
_room1 = r1;
_room2 = r2;
}
void Door::Enter() {
cout << "Door (" << _room1->GetRoomNo() << "," << _room2->GetRoomNo() << ") Entered." << endl;
}
Room* Door::OtherSideFrom(Room* r1) {
return (r1 == _room1) ? _room1 : _room2;
}
// Room.h
#ifndef _ROOM_H
#define _ROOM_H
#include
#include "MapSite.h"
enum Direction {North = 0, South, East, West};
class Room : public MapSite {
public:
Room(int roomNo);
MapSite* GetSide(Direction d) {
return _sides[d];
}
void SetSide(Direction d, MapSite* side) {
_sides[d] = side;
}
virtual void Enter() {
std::cout << "Room " << _roomNumber << " is Entered." << std::endl;
}
int GetRoomNo() {
return _roomNumber;
}
virtual ~Room() {
for (int i = 0; i < 4; i++)
delete _sides[i];
}
private:
MapSite* _sides[4];
int _roomNumber;
};
#endif
//Room.cpp
#include "Room.h"
#include
using namespace std;
Room::Room(int roomNo) {
cout << "Room Constructor." << endl;
cout << "Room " << roomNo << " Created." << endl;
_roomNumber = roomNo;
}
// Wall.h
#ifndef _WALL_H
#define _WALL_H
#include "MapSite.h"
#include
class Wall : public MapSite {
public:
Wall() {
std::cout << "Wall Constructor." << std::endl;
}
virtual void Enter() {
std::cout << "Wall Entered." << std::endl;
}
virtual ~Wall() {
}
};
#endif
// Wall.cpp
#include "Wall.h"
// Maze.h
#ifndef _MAZE_H
#define _MAZE_H
#include "Room.h"
#include
const int MAX_ROOM_NUM = 20;
class Maze {
public:
Maze() {
std::cout << "Maze Constructor." << std::endl;
_cur = 0;
}
void AddRoom(Room* r) {
_rooms[_cur++] = r;
}
Room* RoomNo(int index) const {
for (int i = 0; i < _cur; i++) {
if (_rooms[i]->GetRoomNo() == index)
return _rooms[i];
}
return NULL;
}
virtual ~Maze() {
for (int i = 0; i < _cur; i++)
delete _rooms[i];
}
private:
Room* _rooms[MAX_ROOM_NUM];
int _cur;
};
#endif
// Maze.cpp
#include "Maze.h"