// @topic W010202 FLTK Graphics -- maze navigation // @brief Business class: room with doors #ifndef _ROOM_H_INCLUDED_ #define _ROOM_H_INCLUDED_ #include <cassert> class Room { int light_switch; Room* door_N; Room* door_E; Room* door_S; Room* door_W; const std::string name; public: enum { COMPASS_NORTH, COMPASS_NORTHEAST, COMPASS_EAST, COMPASS_SOUTHEAST, COMPASS_SOUTH, COMPASS_SOUTHWEST, COMPASS_WEST, COMPASS_NORTHWEST, COMPASS_NORTH_2, COMPASS_UNKNOWN }; Room( char const* name ) : light_switch( 0 ), door_N( 0 ), door_E( 0 ), door_S( 0 ), door_W( 0 ), name( name ) { } Room* get_room( int direction ) { switch( direction ) { case COMPASS_NORTH_2: case COMPASS_NORTH: return door_N; case COMPASS_EAST: return door_E; case COMPASS_SOUTH: return door_S; case COMPASS_WEST: return door_W; default: //assert( !"Bad direction param" ); return NULL; } } int get_direction( Room* door ) { if ( door_N == door ) return COMPASS_NORTH; if ( door_E == door ) return COMPASS_EAST; if ( door_S == door ) return COMPASS_SOUTH; if ( door_W == door ) return COMPASS_WEST; return COMPASS_UNKNOWN; } void add_door( int direction, Room* another_room ) { switch( direction ) { case COMPASS_NORTH: door_N = another_room; another_room->door_S = this; break; case COMPASS_EAST: door_E = another_room; another_room->door_W = this; break; case COMPASS_SOUTH: door_S = another_room; another_room->door_N = this; break; case COMPASS_WEST: door_W = another_room; another_room->door_E = this; break; default: assert( !"Bad door request" ); } } char const* get_name() { return name.c_str(); } };//class Room #endif //_ROOM_H_INCLUDED_