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
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
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))
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))