Trying to force turtle back to beginning of maze after collides with wall

Denis McMahon denismfmcmahon at gmail.com
Mon Oct 14 09:25:27 EDT 2013


On Sun, 13 Oct 2013 15:26:03 -0700, baujacob wrote:

> Hi everyone, I'm trying to create a simple maze program. When the user
> finishes the maze, I want to print in big letters "You Win!" and when
> the user hits a wall, I want the user to go back to the beginning of the
> maze. The problem is "collision detection" which is an advanced topic
> and I'm only in a beginning programming class. Is there anyway I can
> force the user back to the starting point when the turtle hits the wall?

OK

My first observation is that "maze" could be an array of "rooms" each of 
which starts life with 4 exits.

Generating the maze would involve turning exits into walls.

You could create a set maze, or you could randomly generate a maze at the 
start of each "game".

Once you have created a maze, define your start and end points.

If you want to apply your logic, then if the "solver" turtle enters a 
"room" with only one exit, it is in a dead end.

The "solver" turtle would probably need to store which paths led to dead 
ends to ensure it did not follow them again. This extends back to any 
exit that only leads to dead ends.

Let's consider a simple maze, 2x2 so 4 rooms. Room 0 is the top left (nw) 
room, and rooms are numbered across, down. Each room number has 4 exit 
directions, nesw. 'x' is an external exit, a number is an internal room, 
None is no exit (ie a wall).

maze = { 0: { 'n': 'x', 'e': 1, 's': None, w: None }, 
         1: { 'n': None, 'e': None, 's': 3, w: 0 }, 
         2: { 'n': None, 'e': 3, 's': 'x', w: None }, 
         3: { 'n': 1, 'e': None, 's': None, w: 2 } }

Room 0 (nw) has an exit (or entrance) to the north and an internal path 
to the east (rm 1).

Room 1 (ne) has internal paths to the west (rm 0) and south (rm 3).

Room 2 (sw) has an entrance (or exit) to the south and an internal path 
to the east (rm 3).

Room 3 (se) has internal links to the north (rm 1) and west (rm 2).

The data structure shown (a dictionary of dictionaries) is just one way 
of holding the maze data, and perhaps not the most elegant. The maze 
could be stored as a dictionary of tuples thus:

maze = { 0: ( 'x', 1, None, None ), 
         1: ( None, None, 3, 0 ), 
         2: ( None, 3, 'x', None ), 
         3: ( 1, None, None, 2 ) }

Drawing such a maze graphically would require allocating co-ordinates in 
some drawing space to the vertices of each room, and drawing lines along 
the edges that represent walls.

Navigating such a maze graphically would require allocating co-ordinates 
in the same drawing space to the centres of the rooms, and moving between 
adjacent room centres provided the exit was "open".

-- 
Denis McMahon, denismfmcmahon at gmail.com



More information about the Python-list mailing list