Nicely done! I really like how you’ve set this up!
There are a couple errors I found that you might want to look at.
The first I saw was that you want to keep the user from leaving the board, but currently your conditions ending the game does not work to keep a user from leaving:
if (i<0 && i>newGame.field.length-1){
console.log( `You left the board, game over`);
flag = false;
} else if (j<0 && j>newGame.field[0].length-1){
console.log( `You left the board, game over`);
flag = false;
}
Currently you are using an and operator (&&
) in your conditions. This means it’s only trigger if I pass the boundary on both sides of the map, which of course can’t be done. Not only does this mean you can run around outside of bounds on the left and right sides of the board, but trying to go up or down crashes the game as it can’t read the index of an undefined
array.
Second thing is that you don’t want the user to retrace their steps but currently you only tell the user this if they run over their path, nothing is actually done to correct it. A couple ways you could go about fixing that are
- Don’t update their position if the direction their going is part of their path.
- If the direction they went is part of their path, change their position back to were they just were.
Personally I’d go with the first option as it is a lot smoother. So something like:
if (dir === 'd' && newGame.field[i++][j] != pathCharacter) {
// update position
} else {
// inform user they can't move there
}
You could also follow this same strategy to keep a user from going out of bounds without ending the game.
There are a few things you could improve that aren’t quiet errors, or just improvements to help keep it running smoothly.
One thing I’d love to see you do is make use of console.clear()
to clear the console before printing the board again, this would make it so you don’t have to keep scrolling down every time the board is printed.
Another is that currently you can end up with an impossible to win game, since holes are placed entirely at random. Often there is no way to make it to the hat. Of course this is a bit of an undertaking to make sure you have a path from start to the hat, but it certainly can be done.
A similar instance is if you make a path in a way that you can’t move without crossing your path again. Now you are stuck but the game still doesn’t end. Perhaps you could create a function to check if there is a space around you that you can move to, and if not end the game.
In your randomChar
function, you currently have this condition:
if (index>=0 && index<7){
randChar = fieldCharacter;
}
Currently index
can’t be less than 10 so you don’t actually need to check if it is more than or equal to 0.
Last thing I noticed is you seem a little inconsistent in your use of semicolons, though they aren’t usually necessary in JS it is still considered best practice to include them at the end of lines.
Overall nicely done! You have a working game, and a great place to build off of in the future if you end up wanting to make something bigger!! I’d love seeing you continue, and possibly make a full game out of it. 