I am making a program that solves a puzzle game, and it finds all the possible moves on a board and puts all the possible resulting boards in an object. Then it finds all the possible moves for the resulting boards, and so on. The object will look something like this:
{
"board": {
"starts": [[0,0],[0,3]],
"blocks": [[3,0],[3,3]],
"ends": [[2,4]]
},
"possibleMoves": [
{
"board": {
"starts": [[0,0],[2,3]],
"blocks": [[3,0],[3,3]],
"ends": [[2,4]]
},
"possibleMoves":[
{
"board": {},
"possibleMoves": [{}]
}
]
},
{
"board": {
"starts": [[0,3]],
"blocks": [[3,0],[3,3]],
"ends": [[2,4]]
},
"possibleMoves":[{}]
}]
}
I can figure out how to add the possible moves from the top-level board, but I cannot figure out how to loop through all the resulting boards in the second level and figure out their possible moves, and then loop through all the third level boards and so on. How can I add the possible moves and traverse the object using a breadth-first search?
Not completely tested:
var oo = {
board: {
starts: [[0,0],[0,3]],
blocks: [[3,0],[3,3]],
ends: [[2,4]]
},
possibleMoves: [{
board: {
starts: [[0,0],[2,3]],
blocks: [[3,0],[3,3]],
ends: [[2,4]]
},
}],
};
function traverseObject (o) {
for (var prop in o) {
if (typeof o[prop] == "array" || typeof o[prop] == "object") {
traverseObject(o[prop]);
console.log(prop);
} else {
console.log(prop, "=", o[prop]);
}
}
}
traverseObject(oo);
Recursion.
function traverse(state) {
handle(state.board);
if (state.possibleMoves) {
$.each(state.possibleMoves, function(i, possibleMove) {
traverse(possibleMove);
});
}
}
EDIT: For a breadth-first search, try something like this. It doesn't use recursion, but instead iterates over a growing queue.
function traverse(state) {
var queue = [],
next = state;
while (next) {
if (next.possibleMoves) {
$.each(next.possibleMoves, function(i, possibleMove) {
queue.push(possibleMove);
});
}
next = queue.shift();
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With