## 9. Peter in a Maze

Peter has wandered into a large maze. He cannot find his way out, and we have to help him.

We will start by creating a new program. In the program window, click the New button. Type Way as the program name.

In the Global Variables and Functions window, we will prepare two items for the maze — a wall and a door. We could draw them, but we may use the items that are already prepared in the item library. The library is in the bottom right window called Library of Variables and Functions. There are data elements like number, item, or picture in it. Expand the item element, and in the [examples] groups, Cottage subgroup, find the elements labeled Door and Wall . Drag them into the Global Variables and Functions window. This is a quick and easy way to create new items, which have already been named and drawn.

Now we will create the maze sheet. Double-click the sheet element. We will make the sheet smaller, so that the maze does not have to be too big. Click the Dimensions button. A window for specifying sheet dimensions appears. Type 12 as the width and 10 as the height.

Use the Door and Wall elements to create the following maze:

The program will be based on a conditional repeating of commands . We want Peter to repeat his steps around the maze until he finds the door. In the cycle condition, we will use the item on Peter's position element. It is similar to the item in front of Peter element, but it applies to the square, on which Peter is standing. It can be found in the Peter - extension group.

The cycle condition could be expressed like this: "If it is not true that the item on Peter’s position is the door, repeat…" The word not tells us that we need the opposite of the item identity test. For this, we have an element called is not valid that . The element is called logical negation, and its function is to invert the result of the comparison from true to false, and from false to true. It is located in the calculations group, logic operations subgroup.

First, we will place the is not valid that element into the while is valid cycle condition. We will attach the item identity element, and insert the item on Peter's position and Door elements into it.

In the cycle body, we will ensure that when walking around the maze, Peter will stick to the border on his right. In the beginning of the cycle, we will tell Peter to turn right by using the right command. The following command will be a conditional repeating of commands cycle. This will tell Peter to turn to the left, until he will find a square onto which he can go. For this, we will use the left command.

In the second (inner) cycle, we will test if there is a blocked square in front of Peter, i.e. if he should turn further to the left. The first blocked square is the Wall . Peter also cannot go through the border of the sheet. This can be tested by a special element called sheet border (located in the sheet group). It is special by the fact that it is not a data variable, but a constant, and so you cannot edit it. Its value can be kept in variables and tested, but it cannot be viewed by putting it on the sheet.

We have two tests of items in front of Peter, and we need to express this: "As long as there is a wall or a sheet border in front of Peter, repeat left." The word or is a logical element again — or , and it is called logical sum. It is located in the calculations group, logic operations subgroup. We will insert the or element into the cycle condition and add two comparisons of items in front of Peter, with the wall and the border.

Peter is facing an empty square now, so we have to add one last element into the main cycle — step . This tells Peter to go to the empty square.

Finally, we will tell Peter that when he finds the door, he should turn towards us and wait untill we press a key. Behind the main cycle, add the left and key input (waits to be pressed) elements. The resulting program is shown here:

Run the program. Peter walks around the maze, until he finds the exit. It is just behind the corner on the left side, but he does not know it and tries to find the exit from the right, so it takes some time.

Let us replace the left and right elements. This changes Peter’s search method, so that he will stick to the wall on his left. In our maze, he finds the exit much sooner.