Exemplo n.º 1
0
def angDungeon(depth, width=128, height=128, rooms=50, noPrint=False):
    dungeon = numpy.ones((height, width), dtype=numpy.uint)
    roomFlag = numpy.zeros((height, width), dtype=numpy.uint)

    roomList = []

    newRoomList = []

    #generate rooms
    for x in range(0, rooms):
        #print "what?"
        if depth < 3:
            room = rectRoom(6, 12)
        else:
            #print x
            room = cellular.getRoom(
                width=int(random.random() * (4 + (depth - 3)) + 8 +
                          (depth - 3) / 3),
                height=int(random.random() * (4 + (depth - 3)) + 8 +
                           (depth - 3) / 3),
                first=2,
                second=0,
                c=4)
            #cellular.printDungeon(room)
        roomList = roomList + [room]

    #attempt to place rooms
    for room in roomList:
        loc = [
            int(random.random() * (width - room.shape[1])),
            int(random.random() * (height - room.shape[0]))
        ]

        valid = True

        #check if room can be placed
        for x in range(loc[0], loc[0] + room.shape[1]):
            for y in range(loc[1], loc[1] + room.shape[0]):
                if roomFlag[y, x] == 1:
                    valid = False
                    break
            if not (valid):
                break

        if valid:
            #place room
            for x in range(loc[0], loc[0] + room.shape[1]):
                for y in range(loc[1], loc[1] + room.shape[0]):
                    dungeon[y, x] = room[y - loc[1], x - loc[0]]
                    roomFlag[y, x] = 1

            center = loc
            center[0] += room.shape[1] / 2
            center[1] += room.shape[0] / 2
            newRoomList += [center]

    #dungeon[newRoomList[len(newRoomList)-1][1],newRoomList[len(newRoomList)-1][0]] = 4

    #Block outer walls
    for xr in range(0, dungeon.shape[1]):
        dungeon[0, xr] = 2
        dungeon[dungeon.shape[0] - 1, xr] = 2

    for yr in range(0, dungeon.shape[0]):
        dungeon[yr, 0] = 2
        dungeon[yr, dungeon.shape[1] - 1] = 2

    for x in range(0, len(newRoomList)):
        for dest in newRoomList[x + 1:]:
            dungeon = tunnel(dungeon,
                             roomFlag, [newRoomList[x][0], newRoomList[x][1]],
                             [dest[0], dest[1]],
                             maxLength=(width + height) / 2 +
                             4 * max(depth - 3, 0) + 3 * max(depth - 9, 0))

    while not (cellular.connected2(dungeon)):
        #cellular.printDungeon(dungeon)
        dungeon = angDungeon(depth, width, height, rooms, noPrint=True)

    if not (noPrint):
        dungeon = placeStairs(dungeon)
        cellular.printDungeon(dungeon)

    return dungeon
Exemplo n.º 2
0
def angDungeon(depth,width=128,height=128,rooms=50,noPrint=False):
    dungeon = numpy.ones((height,width),dtype=numpy.uint)
    roomFlag = numpy.zeros((height,width),dtype=numpy.uint)

    roomList = []

    newRoomList = []

    #generate rooms
    for x in range(0,rooms):
        #print "what?"
        if depth<3:
            room = rectRoom(6,12)
        else:
            #print x
            room = cellular.getRoom(width=int(random.random()*(4+(depth-3))+8+(depth-3)/3),height=int(random.random()*(4+(depth-3))+8+(depth-3)/3),first=2,second=0,c=4)
            #cellular.printDungeon(room)
        roomList = roomList+[room]

    #attempt to place rooms
    for room in roomList:
        loc = [int(random.random()*(width-room.shape[1])), int(random.random()*(height-room.shape[0]))]

        valid = True

        #check if room can be placed
        for x in range(loc[0],loc[0]+room.shape[1]):
            for y in range(loc[1],loc[1]+room.shape[0]):
                if roomFlag[y,x] == 1:
                    valid=False
                    break
            if not(valid):
                break

        if valid:
            #place room
            for x in range(loc[0],loc[0]+room.shape[1]):
                for y in range(loc[1],loc[1]+room.shape[0]):
                    dungeon[y,x] = room[y-loc[1],x-loc[0]]
                    roomFlag[y,x] = 1

            center = loc
            center[0] += room.shape[1]/2
            center[1] += room.shape[0]/2
            newRoomList+=[center]

    #dungeon[newRoomList[len(newRoomList)-1][1],newRoomList[len(newRoomList)-1][0]] = 4

    #Block outer walls
    for xr in range(0,dungeon.shape[1]):
        dungeon[0,xr] = 2
        dungeon[dungeon.shape[0]-1,xr]=2

    for yr in range(0,dungeon.shape[0]):
        dungeon[yr,0] = 2
        dungeon[yr,dungeon.shape[1]-1]=2

    for x in range(0,len(newRoomList)):
        for dest in newRoomList[x+1:]:
            dungeon = tunnel(dungeon,roomFlag,[newRoomList[x][0],newRoomList[x][1]],[dest[0],dest[1]],maxLength=(width+height)/2+4*max(depth-3,0)+3*max(depth-9,0))
          
    while not(cellular.connected2(dungeon)):
        #cellular.printDungeon(dungeon)
        dungeon = angDungeon(depth,width,height,rooms,noPrint=True)
        
    

    if not(noPrint):
        dungeon = placeStairs(dungeon)
        cellular.printDungeon(dungeon)
    
    return dungeon
Exemplo n.º 3
0
                        bestDist = dist
                        bestUp = randList[j]
                        bestDown = randList[k]

    dungeon[bestUp[1], bestUp[0]] = 7
    dungeon[bestDown[1], bestDown[0]] = 8

    if dungeon[bestUp[1] + 1, bestUp[0]] == 0:
        dungeon[bestUp[1] + 1, bestUp[0]] = 9
    elif dungeon[bestUp[1] - 1, bestUp[0]] == 0:
        dungeon[bestUp[1] - 1, bestUp[0]] = 9
    elif dungeon[bestUp[1], bestUp[0] + 1] == 0:
        dungeon[bestUp[1], bestUp[0] + 1] = 9
    elif dungeon[bestUp[1], bestUp[0] - 1] == 0:
        dungeon[bestUp[1], bestUp[0] - 1] = 9

    if dungeon[bestDown[1] + 1, bestDown[0]] == 0:
        dungeon[bestDown[1] + 1, bestDown[0]] = 9
    elif dungeon[bestDown[1] - 1, bestDown[0]] == 0:
        dungeon[bestDown[1] - 1, bestDown[0]] = 9
    elif dungeon[bestDown[1], bestDown[0] + 1] == 0:
        dungeon[bestDown[1], bestDown[0] + 1] = 9
    elif dungeon[bestDown[1], bestDown[0] - 1] == 0:
        dungeon[bestDown[1], bestDown[0] - 1] = 9

    return dungeon


if __name__ == "__main__":
    cellular.printDungeon(angDungeon(9, 64, 64, 50))
Exemplo n.º 4
0
                        bestDist = dist
                        bestUp = randList[j]
                        bestDown = randList[k]
                        
    dungeon[bestUp[1],bestUp[0]] = 7
    dungeon[bestDown[1],bestDown[0]] = 8
                    
    if dungeon[bestUp[1]+1,bestUp[0]] == 0:
        dungeon[bestUp[1]+1,bestUp[0]] = 9
    elif dungeon[bestUp[1]-1,bestUp[0]] == 0:
        dungeon[bestUp[1]-1,bestUp[0]] = 9
    elif dungeon[bestUp[1],bestUp[0]+1] == 0:
        dungeon[bestUp[1],bestUp[0]+1] = 9
    elif dungeon[bestUp[1],bestUp[0]-1] == 0:
        dungeon[bestUp[1],bestUp[0]-1] = 9
        
    if dungeon[bestDown[1]+1,bestDown[0]] == 0:
        dungeon[bestDown[1]+1,bestDown[0]] = 9
    elif dungeon[bestDown[1]-1,bestDown[0]] == 0:
        dungeon[bestDown[1]-1,bestDown[0]] = 9
    elif dungeon[bestDown[1],bestDown[0]+1] == 0:
        dungeon[bestDown[1],bestDown[0]+1] = 9
    elif dungeon[bestDown[1],bestDown[0]-1] == 0:
        dungeon[bestDown[1],bestDown[0]-1] = 9
        
    return dungeon
            

if __name__=="__main__":
    cellular.printDungeon(angDungeon(9,64,64,50))