# What's wrong with my dungeon walk algorithm?

Attention Topic was automatically imported from the old Question2Answer platform.
Asked By Roodiger

Hey guys! So, I’m working on a project and am looking to build a binding of isaac type of dungeon generation. I’ve build it out, but keep getting issues with it. I wanted it to loop through and have exactly the amount of rooms that I specify, but when I added a unique room check it just keeps crashing.

Could you point to me what I’m doing wrong?

I know my code is probably garbage, and I’m sure the answer is obvious.

``````extends Node

var walker = {"x":0,"y":0}
var rooms = []
var player
var uniqueRoom

func _ready():
generate_dungeon()

func check_for_unique_room():
uniqueRoom = true
print(rooms)
for room in rooms:
print(str(room.get_position()) + " --- " + str(rooms.back().get_position()))
if room.get_position() == rooms.back().get_position():
print(str(room.get_position()) + " --- " + str(rooms.back().get_position()))
rooms.pop_back()
uniqueRoom = false
break
if uniqueRoom == true:
break

func generate_dungeon():
randomize()

while rooms.size() <= 15:

if rooms.empty() == false:

print("not first room")
var uniqueRoom = false

while uniqueRoom == false:
rooms.push_back(load("res://World/DungeonRoom.tscn").instance())
rooms.back().set_name("room_" + str(rooms.size()) + "_" + str(walker["x"]) + '_' + str(walker["y"]))
var room_pos = Vector2((335 * 1.5)*walker["x"], (195 * 1.5)*walker["y"])+Vector2(-335 * 1.5, -195 * 1.5)
rooms.back().set_position(room_pos)
self.add_child(rooms.back())
check_for_unique_room()
print('')
walker_step()

if uniqueRoom == true:
rooms.back().get_node("Label").text = str(rooms.size())
rooms.back().show()
print(rooms.size())
print('Room ' + str(rooms.size()) + ' = ' + str(rooms.back().get_position()) + " " + str(walker))
walker_step()

elif rooms.empty() == true:
rooms.push_front(load("res://World/DungeonRoom.tscn").instance())
rooms[0].set_name("room_0," +  str(walker["x"]) + '_' + str(walker["y"]))
rooms[0].get_node("Label").text = "0"
rooms[0].set_position(Vector2.ZERO)
self.add_child(rooms[0])
rooms[0].show()
print('Room 0 = ' + str(rooms[0].get_position()) + " " + str(walker))
if get_tree().get_root().has_node("Player") == false:
player = load("res://Player/Player.tscn").instance()
player.set_position(rooms[0].get_position() + Vector2((320 /2), (180/2)))
player.show()
get_parent().call_deferred("add_child", player)
print("Player = " + str(player.get_position()))

print(rooms.size())
print('Room ' + str(rooms[0]) + ' = ' + str(rooms[0].get_position()) + " " + str(walker))
walker_step()
print('first room')
else:
break;
for room in rooms:
print(room.get_name())

func walker_step():
var choice = (randi() % 4)
if choice == 0:
walker["x"]+=1
if choice == 1:
walker["x"]-=1
if choice == 2:
walker["y"]+=1
if choice == 3:
walker["y"]-=1
``````