## FANDOM

483 Pages

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
```