Source code for Rooms

# -*- coding: UTF-8 -*-
import copy

[docs]class Rooms(object): """ Collection of room. """ def __init__(self): self.rooms = []
[docs] def add(self, room): """Add a room to collection. :param room: room class. """ self.rooms.append(room)
[docs] def get(self, id): """Get a room from collection. :param id: unique key of the room. :rtype: Room class :return: Return room. if it does not exist, return None. """ for room in self.rooms: if room.id == id: return room else: return None
[docs] def get_all(self): """Get all rooms from collection. :rtype: List :return: List of Room. """ return self.rooms
[docs] def delete(self, id): """ Get a room from collection. :param id: unique key of the room. """ for room in self.rooms[:]: if room.id == id: self.rooms.remove(room)
[docs] def combine_roads(self, roads): """ Combine room and road. All room checks. When has door, the room records each direction road id. :param roads: List of road. """ # 全ての部屋と全ての道を探索し、部屋につながっている道があればその道のIDを設定する for room in self.rooms: for road in roads: if room.has_door(road.from_door) or room.has_door(road.to_door): from_door = road.from_door to_door = road.to_door north_door = room.get_north_door() if (north_door.x == from_door.x and north_door.y == from_door.y) or \ (north_door.x == to_door.x and north_door.y == to_door.y): room.has_road = True room.north_road_id = road.id south_door = room.get_south_door() if (south_door.x == from_door.x and south_door.y == from_door.y) or \ (south_door.x == to_door.x and south_door.y == to_door.y): room.has_road = True room.south_road_id = road.id east_door = room.get_east_door() if (east_door.x == from_door.x and east_door.y == from_door.y) or \ (east_door.x == to_door.x and east_door.y == to_door.y): room.has_road = True room.east_road_id = road.id west_door = room.get_west_door() if (west_door.x == from_door.x and west_door.y == from_door.y) or \ (west_door.x == to_door.x and west_door.y == to_door.y): room.has_road = True room.west_road_id = road.id
[docs] def get_copy_all(self): """ Get all copy of rooms from collection. When performing a destructive operation , use this. :rtype: List :return: List of Room. """ return copy.deepcopy(self.rooms)
def __str__(self): return str([str(room) for room in self.rooms])