Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85070
  • 博文数量: 34
  • 博客积分: 1640
  • 博客等级: 上尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-17 14:37
文章分类
文章存档

2008年(34)

我的朋友
最近访客

分类:

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"

 

阅读(453) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~