... or checking a track for errors
Let's start with a screen shot and jump right into the fun stuff, without messing much with the underlying game (where users can create their own tracks).
[a very simple user (read: me) created track]
As always the problem is with teaching that damn computer to see if this is a valid track before it can be played. So what makes a valid track?
- only one start tile is allowed
- it must be a closed loop
- the AI track must be valid and reach all tiles
Only one start tile is allowed
This is an easy one, loop over the map and count the number of start tiles. Another easy step to prevent 2 or more of these would be to disable the tile after it has been used one time.
I guess not.
What if you decide that the start you placed in the beginning might be better suited just before that bend you added a few minutes before, you could however just delete it, place it at the new location, then fill the gap ... yeah sure.
It must be a closed loop
Now that's a tough one and it took a few minutes to get the right idea. Basically it's using a node based pathfinder (again) and dungeon cells (stolen from Hellstrom.
A screenshot first.
[dungeon cells "applied"]
So each track gets a new property "exits", which is a four character string "0" (white) for a closed exit and "1" (orange) for an open one and as bonus "2" for start tile's start direction. A simple straight track becomes "0101" (N, E, S, W) a corner "0011".
Let's go over all the tiles connected, starting with the start tile ("0201") ... next one is a "0101" and a "0011" (which also change the direction to the next tile to "2" or "South"). While adding new cells to the map we also add a node for the pathfinder and connect it to the previous cell's center.
Blabla bla (new Screenshot)
[Cell'ed up and connected]
At last, we add another node to the start tile when we reach it (and we don't connect it to the first node), just run the pathfinder and see what happens (we should end up on the start tile ...).
We continue with the last check after this entertaining commercial about SEO scum that spams our mailbox with the promise to bring us into the top 5 positions on google - or, if you can't see the commercial, when I've written that check.