class RoomError(Exception):
    pass

class Room:

    def __init__(self, floor, id, percentage, tag = []):
        if not isinstance(floor, (int, float)):
            raise RoomError("The floor must be a int or float")
        if not isinstance(percentage, (int, float)):
            raise RoomError("The percentage must be a int or float")
        if not isinstance(id, str):
            raise RoomError("The id must be a str")
        if isinstance(tag,list):
            for e in tag:
                if not isinstance(e, str):
                    raise RoomError("The tag must be a list str")
        else:
            raise RoomError("The tag must be a list str")

        self.floor = floor
        self.id = id
        self.percentage = percentage
        self.tag = tag

class Middle(Room):

    def __init__(self, floor, id, percentage, tag = []):
        super().__init__(floor, id, percentage, tag)

        self.type = "middle"

class Armory(Room):

    def __init__(self, floor, id, percentage, tag = []):
        super().__init__(floor, id, percentage, tag)

        self.type = "armory"

class Boss(Room):

    def __init__(self, floor, id, percentage, tag = []):
        super().__init__(floor, id, percentage, tag)

        self.type = "boss"

class Spawn(Room):

    def __init__(self, floor, id, percentage, tag = []):
        super().__init__(floor, id, percentage, tag)

        self.type = "spawn"

class Wall(Room):

    def __init__(self, floor, id, percentage, type):
        super().__init__(floor, id, percentage, [])

        self.type = "wall"
        self.wall_type = type
