コード例 #1
0
    def generateRooms(self, numRooms):
        """
        Generate a random graph of rooms
        """
        self.rooms = {}

        if numRooms < 1:
            print("Must create at least 1 room")
            return None

        # The coordinates of our room. We start from (0,0)
        xy = [0, 0]

        # Keep track of which grid spots are occupied
        self.occupied = set()

        # Create a set that will hold the IDs of rooms with valid connections available
        validRooms = set()

        # Create n rooms
        for i in range(0, numRooms):
            # Create a room
            new_room = Room(f"Room {i}", "You are standing in an empty room.")
            self.rooms[i] = new_room
            if i == 0:
                # Our first room is always valid
                validRooms.add(i)
                self.occupied.add(str(xy))
            else:
                # If it's not the first room....
                # ...connect to the previous room in a random direction
                random_dir = None

                # In case we run into a room with no valid connections, keep looping
                # until we find a room with valid connections.
                # Note that there will ALWAYS be a valid room available
                while random_dir is None:
                    # Get a room that we think is valid
                    connectingRoom = validRooms.pop()
                    # Get the coordinates of that room
                    xy = self.rooms[connectingRoom].xy
                    # See if we can get a random direction from that room
                    random_dir = self.getRandomDirection(
                        self.rooms[connectingRoom], xy)
                    # If our room is valid (i.e. not None) then we put it back in our
                    # set of valid rooms.
                    if random_dir is not None:
                        validRooms.add(connectingRoom)
                    # If it's NOT valid, then we don't put it back into validRooms
                    # and we try again with a different room.

                # We have a valid direction, so update the room and make the connection
                xy = self._updateCoordinates(xy, random_dir)
                self.rooms[connectingRoom].connectRooms(random_dir, new_room)
                self.occupied.add(str(xy))
                new_room.xy = xy
                validRooms.add(i)
                if i == numRooms - 1:
                    new_room.addItem(Item("Treasure", "This is treasure"))

        # Set the starting room to the first room. Change this if you want a new starting room.
        self.startingRoom = self.rooms[0]

        if len(self.occupied) == numRooms:
            print("World successfully created!")
        else:
            print("Something is wrong....")

        return self.rooms
コード例 #2
0
    def createRooms(self):

        #Salas

        sala = Room("sala")
        comedor = Room("comedor")
        cocina = Room("cocina")
        lavadero = Room("lavadero")
        jardin = Room("jardin")
        pasillo = Room("pasillo")
        dormitorio = Room("dormitorio")
        baño = Room("baño")
        balcon = Room("balcon")

        #Definimos las salas cerradas
        garaje = lockedRoom("garaje")

        #Definimos salidas

        garaje.setExit('east', sala)
        sala.setExit('north', comedor)
        sala.setExit('east', pasillo)
        sala.setExit('west', garaje)
        comedor.setExit('north', lavadero)
        comedor.setExit('east', cocina)
        comedor.setExit('south', sala)
        cocina.setExit('north', jardin)
        cocina.setExit('west', comedor)
        lavadero.setExit('south', comedor)
        jardin.setExit('south', cocina)
        pasillo.setExit('up', dormitorio)
        pasillo.setExit('west', sala)
        dormitorio.setExit('north', baño)
        dormitorio.setExit('east', balcon)
        dormitorio.setExit('down', pasillo)
        baño.setExit('south', dormitorio)
        balcon.setExit('west', dormitorio)

        #Definimos items

        lampara = Item('lampara', 'Una lámpara rota', 2)
        botella = Item('botella', 'Una botella vacía', 3)
        zapato = Item('zapato', 'Un zapato', 1.5)
        heladera = Item('heladera', 'Una heladera', 8)
        lavarropas = Item('lavarropas', 'Lavarropas', 10)
        tender = Item('tender', 'Un tender con ropa', 6)
        muñeco = Item('muñeco', 'Un muñeco de trapo', 3)
        cuadro = Item('cuadro', 'Un cuadro', 2)
        banco = Item('banco', 'Un banco', 4)
        mesa = Item('mesa', 'Una mesa de madera', 6)
        espejo = Item('espejo', 'Un espejo', 3)
        computadora = Item('computadora', 'Una computadora de escritorio', 6)
        cama = Item('cama', 'Una cama', 7)
        linterna = Item('linterna', 'Una linterna', 1)

        #Definimos items comestibles con sus respectivas propiedades.

        manzana = Comestible('manzana', 'Una manzana ordinaria', 1, 0, None)
        galleta = Comestible('galleta', 'Una galleta mágica', 2, 2, 'weight')

        #Definimos items utilizables, con su respectiva función.
        key = Usable('llave', 'Llave maestra', 1, 'key')
        beamer = Usable('portalgun', 'Arma de portales', 3, 'teleport')

        #Definimos cofres

        magic_box = Chest('Cofre', 'Magico cofre con muchos tesoros dentro',
                          1000, [manzana, galleta, espejo])

        #Añadiendo items a las distintas salas.
        comedor.addItem(zapato)
        sala.addItem(linterna)
        sala.addItem(lampara)
        cocina.addItem(botella)
        cocina.addItem(heladera)
        lavadero.addItem(lavarropas)
        jardin.addItem(tender)
        jardin.addItem(muñeco)
        pasillo.addItem(cuadro)
        balcon.addItem(banco)
        balcon.addItem(mesa)
        baño.addItem(espejo)
        dormitorio.addItem(cama)
        dormitorio.addItem(galleta)
        dormitorio.addItem(computadora)
        sala.addItem(manzana)
        sala.addItem(beamer)
        sala.addItem(key)
        sala.addItem(magic_box)

        #Definimos misiones
        mision1 = Mission('1ra mision',
                          'Llegar al dormitorio en menos de 10 movimientos',
                          10, 'checkpoint', 'dormitorio')

        #Definiendo NPC
        mago = NPC('Mago', sala,
                   'Traeme un arma de portales y te devolveré una galleta',
                   beamer, galleta)
        aprendiz = NPC(
            'Aprendiz', cocina,
            'Bienvenido a Zuul, revisa toda la casa para encontrar objetos importantes'
        )

        #Agregandolo a la sala
        sala.addNPC(mago)
        cocina.addNPC(aprendiz)

        #Definiendo jugador
        self.player = Player('Peter', None, 0)
        self.player.addMission(mision1)

        #Definiendo sala
        self.currentRoom = sala
        self.player.setActualRoom(self.currentRoom)

        return
コード例 #3
0
outside.n_to = foyer

foyer.s_to = outside
foyer.n_to = overlook
foyer.e_to = narrow

overlook.s_to = foyer

narrow.w_to = foyer
narrow.n_to = treasure

treasure.s_to = narrow

# Add items to rooms

narrow.addItem(treasureX)
narrow.addItem(key)

outside.addItem(treasureY)
outside.addItem(mirror)

foyer.addItem(flashlight)

overlook.addItem(treasureZ)


# Basic user commands
def print_user_controls():
    global score
    print("\n ~ Directions: move [n, s, e, w]")
    print(" ~ Actions: [get, drop, use] item")