We will be learning about the *getKey* function and how to create a controlled movement in this program.

## Starting Out Edit

There are a few steps to ensure that your program will run smoothly:

### Check if you have the RAM to hold a program Edit

Click on *2nd* then *MEM* above the *+* sign. Make Sure that you have at least 500 RAM too use. If you don't i suggest you archive something by pressing 2 then 1 then press enter to anything that doesn't have a star next to it.

### Creating the program Edit

Click the *PRGM* key then use the *right arrow* until NEW is highlighted. You should get a screen like this:

PROGRAM NAME=

Go ahead and enter any name you want. Must be only A-Z, no numbers.

## The Program Edit

PROGRAM:MOVER :ClrHome :1→Y :1→X :Lbl 1 :Output(Y,X,"O" :getKey→G :If G=0 :Goto 1 :ClrHome :If G=25 :Y-1→Y :If G=34 :Y+1→Y :If G=24 :X-1→X :If G=26 :X+1→X :If X=0 :X+1→X :If Y=0 :Y+1→Y :If X=17 :X-1→X :If Y=9 :Y-1→Y :Goto 1

## Explanation Edit

PROGRAM:MOVER :ClrHome :1→Y :1→X

Setup the variables and clear the screen.

:Lbl 1

This is used to create a loop.

:Output(Y,X,"O"

This prints an "O" at the O's current position.

:getKey→G

Get a key and store it in G.

:If G=0 :Goto 1

If G is 0, a key wasn't pressed, so go back and wait for a key to be pressed.

:ClrHome

Clear the screen so a new "O" can be printed.

:If G=25 :Y-1→Y :If G=34 :Y+1→Y :If G=24 :X-1→X :If G=26 :X+1→X

Move the O in a direction depending on which key was pressed.

:If X=0 :X+1→X :If Y=0 :Y+1→Y :If X=17 :X-1→X :If Y=9 :Y-1→Y

If the O would have been off-screen, put it back on the screen.

:Goto 1

Go back to the begining of the loop.

## Result Edit

The user will be able to move a little circle around the screen.

## Optionals Edit

You can make your circle go through the side of the screen if you change this part of the program (changes are boldened).

... :If X=0 :16→X :If Y=0 :8→Y :If X=17 :1→X :If Y=9 :1→Y :Goto 1

## Alternative Edit

This is a much shorter program that does the exact same thing. It uses the properties of booleans to eliminate several of the If statements in the original.

PROGRAM:MOVER :ClrHome 1→A 1→B :While 1 :Output(A,B,"O :Repeat Ans :getKey→K :End :Output(A,B," //1 space to erase the O for update :B+(Ans=26 and B<16)-(Ans=24 and B>1→B :A+(K=34 and A<8)-(K=25 and A>1→A :End