## Lesson: Introduction to SmartPy

Ask QuestionChapter 10

## Tinkering with integers and basic math in SmartPy

### Intro:

Let us quickly understand how integers are handled under the hood in SmartPy!

In the later half of the chapter, you will also learn to add movement ability to our `Cryptobot`

!

## Study Time:

### Integer:

The type of integer values i.e -42, 4, 10000.

Most common use cases of integers are represented by the following types:

- Non-negative integers: eg: 4 is represented by
`sp.TNat`

- Signed integers (i.e integers that can hold negative values): eg: -42 is represented by
`sp.TInt`

```
## x_coordinate is a variable that
## stores the current x coordinate of your Cryptobot.
## Range between [-10, 10].
## Useful when you want to move your Cryptobot horizontally.
self.init(coordinate_x = 0)
## y_coordinate is a variable
## that stores the current y coordinate of your Cryptobot.
## Range between [1, 5].
## Useful when you want to move your Cryptobot vertically.
self.init(coordinate_y = 1)
## Move 4 steps backward.
self.data.coordinate_x -= 4
## You can also explicitly give type by doing the following:
self.data.coordinate_x = sp.int(-2)
self.data.coordinate_y = sp.nat(3)
```

Notes:

- You will rarely be setting types for integer values in your code.
- There is a third type as well called
`sp.TIntOrNat`

whose type is undetermined between`sp.TInt`

or`sp.TNat`

. This is an advanced concept which will be taught in later chapters. - You can read more in depth about how SmartPy handles integers here.

## #buidl-ing time:

#### New feature request:

Our current Cryptobot lacks the ability to move! It is basically like this package at the moment:

How do you imagine a Cryptobot to hide and seek aliens without it being able to move?

#### Step by step walkthrough:

Let’s add

`coordinate_x`

,`coordinate_y`

state variables to act as the initial coordinate of our`Cryptobot`

.Initialize

`coordinate_x`

with`sp.int(0)`

as we know coordinate x can range from [-10, 10] i.e coordinate x can hold signed integers.Initialize

`coordinate_y`

with`sp.nat(0)`

as we know coordinate y can range from [0, 5] i.e coordinate y can only hold non-negative integers.

Then add two entry point functions

`move_horizontally`

and`move_vertically`

which will update the coordinates of our Cryptobot.- Both these functions take an argument
`update_to`

which is used to update the coordinate’s values.

- Both these functions take an argument

We have left this exercise a little vague so that you can practice working with state variables and entry point functions. Check out Chapter 5 and Chapter 7 for a quick refresher.

#### Testing our code:

Let us test our movement ability by moving it forward by 2 and vertically by 1:

- Call
`move_horizontally`

and pass the value`2`

- Call
`move_vertically`

and pass the value`1`

When you’re finished:

- Click on “Check” to check your submission with the correct answer.
- Click on “Show Answer” in case you get stuck.

You can also tinker around with the final code on SmartPy’s online IDE. Try running the test by clicking on the ▶️ button!

Contract.py