karel the robot a gentle introduction to the art of programming

Post on 31-Dec-2015

232 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Karel the Robot

A Gentle Introduction to the Art of Programming

Schools Using Karel

•UC-Berkeley

•U. of Washington

•Air Force Academy

•Westpoint (USMA)

•Carnegie-Mellon

•Purdue

•Stanford

What is Karel the Robot?

• Karel is essentially a programmable cursor that can move across the flat world of a CRT screen.

• Shown on the screen is a grid work of vertical and horizontal lines, representing avenues and streets.

Karel’s Capabilities

• Karel is restricted to moving from street corner to street corner, one such move at a time.

• Karel can pivot 90 degrees to the left when requested.

• Karel can only face North, South, East, or West.

Beepers

• To add variety to Karel’s environment, Karel’s designer added beepers, flashing symbols that Karel can detect (we say he “hears” them), pick up, carry, and put down.

• It is possible to program Karel to locate beepers, transport them, or place them in some graphic pattern.

For example, it might look like the figure below on a computer screen.

Walls

• Also in Karel’s environment are impenetrable wall sections that can be placed between streets.

• Karel can “see” wall sections that are immediately to his front or to his left and right sides.

Wall Sections

• Can be used to form a maze that Karel must navigate

Wall Sections

…or to represent hurdles that Karel must “jump” in a hurdle race

Karel’s Capabilities

• Karel is a mobile robot: he can move forward, in the direction he is facing, and he can turn in place.

• Karel possesses rudimentary senses: Sight Sound Direction Touch

• Karel is equipped with a mechanical arm that he can use to pick up and put down beepers.

• To carry these beepers, Karel has a soundproof “beeper bag.”

• Karel can determine if he is carrying any beepers in this bag by probing it with his arm.

Tasks

• A “task” is just something that we want Karel to do.

• Examples: Move to the corner of 3rd street & 5th avenue. Run a hurdle race (with wall sections

representing hurdles). Run a maze.

• Whenever we want Karel to accomplish a task in the world, we must apply a detailed set of instructions that explains how to perform the task. Karel is able to read and follow such a set of instructions, which is called a program.

Situations

• A “situation”, or “world”, is an exact description of what Karel’s world looks like.

• The basic structure of streets, avenues, and outer boundary walls is fixed.

• What else do we need to specify?

•Karel’s position: location & direction•Location & size of wall sections•Location of beepers•Initial number of beepers in beeper_bag

Initial and Final Situations

•The initial situation for any task is defined to be the situation that Karel is placed in at the start of the task.•The final situation is the situation that Karel is in when he turns himself off.

Karel initially understands only six imperative commands:

Move();

TurnLeft();

PickBeeper();

PutBeeper();

TurnOn();

TurnOff();

When these commands, or function calls, are executed in a Karel program, the results are depicted on the screen.

Move();

• A Move() command will graphically show Karel moving from one street corner to the next.

Move();

• A Move() command will graphically show Karel moving from one street corner to the next.

• Should a wall section be in the way, a Move() command would cause an “Error Shutoff”

TurnLeft();

• A TurnLeft() instruction causes Karel to pivot 90 degrees to the left. Karel remains on the same street corner. For example, if Karel is facing east, a TurnLeft() causes him to face north.

TurnLeft();

• A TurnLeft() instruction causes Karel to pivot 90 degrees to the left. Karel remains on the same street corner. For example, if Karel is facing east, a TurnLeft() causes him to face north.

PickBeeper();

• When Karel executes a PickBeeper() instruction, he picks up a beeper from the corner on which he is standing and then deposits it in his beeper_bag.

• On a corner with multiple beepers, Karel randomly picks one up – and only one – of the beepers.

PickBeeper();

• When Karel executes a PickBeeper() instruction, he picks up a beeper from the corner on which he is standing and then deposits it in his beeper_bag.

• On a corner with multiple beepers, Karel randomly picks one up – and only one – of the beepers.

PickBeeper();

• If a PickBeeper() command is issued and there are no beepers on the corner, then he performs an error shutoff.

PutBeeper();

• Karel executes a PutBeeper() instruction by extracting a beeper from his beeper_bag and placing it on his current street corner.

PutBeeper();

• Karel executes a PutBeeper() instruction by extracting a beeper from his beeper_bag and placing it on his current street corner.

More about beepers

• If Karel has no beepers in his beeper_bag and a PutBeeper() command is issued, he performs an error shutoff.

• Beepers are so small that Karel can move right by them; only wall sections and boundary walls can block his movement.

TurnOn();

• The TurnOn() instruction must be the first instruction to be performed in a robot program. This instruction sets up the situation and prepares Karel so he can perform the task defined by the instructions that follow.

TurnOff();

• When Karel executes a TurnOff() instruction, he turns himself off and is incapable of executing any more instructions. The last instruction to be executed in every robot program must be a TurnOff() instruction.

A complete robot program: Karel’s task is to transport the beeper from 2nd street, 4th avenue to 4th

street and 5th avenue then to move one street further north before stopping.

TurnOn();

TurnOn();Move();

TurnOn();Move();Move();

PickBeeper();

TurnOn();Move();Move();

PickBeeper();Move();

TurnOn();Move();Move();

PickBeeper();Move();TurnLeft();

TurnOn();Move();Move();

PickBeeper();Move();TurnLeft();Move();

TurnOn();Move();Move();

PickBeeper();Move();TurnLeft();Move();Move();

TurnOn();Move();Move();

PickBeeper();Move();TurnLeft();Move();Move();PutBeeper();Move();

TurnOn();Move();Move();

PickBeeper();Move();TurnLeft();Move();Move();PutBeeper();Move();TurnOff();

#include “karel.h”

int main()

{

TurnOn();

Move();

Move();

PickBeeper();

Move();

TurnLeft();

Move();

Move();

PutBeeper();

Move();

TurnOff();

}

top related