130 lines
2.8 KiB
Markdown
130 lines
2.8 KiB
Markdown
|
# digital pet challenges
|
||
|
|
||
|
Coding challenges for the digital pet tutorial.
|
||
|
|
||
|
## Before we get started
|
||
|
|
||
|
Complete the following guided tutorial:
|
||
|
|
||
|
* [tutorial](/microbit/lessons/digital-pet/tutorial)
|
||
|
|
||
|
At the end of the tutorial, click `keep editing`. Your code should look like this:
|
||
|
|
||
|
```
|
||
|
basic.forever(() => {
|
||
|
if (input.buttonIsPressed("A")) {
|
||
|
setSleep()
|
||
|
basic.pause(5000)
|
||
|
} else {
|
||
|
setAwake()
|
||
|
}
|
||
|
})
|
||
|
```
|
||
|
|
||
|
### Challenge 1
|
||
|
|
||
|
Now let's feed the pet! Add an **ELSE IF** statement that checks if button `B` is pressed. Click on the **ELSE** and type **IF** next to it to get the **ELSE IF**.
|
||
|
|
||
|
```
|
||
|
basic.forever(() => {
|
||
|
if (input.buttonIsPressed("A")) {
|
||
|
setSleep()
|
||
|
basic.pause(5000)
|
||
|
} else if (input.buttonIsPressed("B")) {
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
setAwake()
|
||
|
}
|
||
|
})
|
||
|
```
|
||
|
|
||
|
### Challenge 2
|
||
|
|
||
|
### @video td/videos/digital-pet-2
|
||
|
|
||
|
Now we want to show your eating pet! Let's create a function called `set eat` that will do create an image. Store that image in a variable and then show it.
|
||
|
|
||
|
```
|
||
|
export function setEat() {
|
||
|
let img = images.createImage(`
|
||
|
. # . # .
|
||
|
. . # . .
|
||
|
. . # . .
|
||
|
. # . # .
|
||
|
. . # . .
|
||
|
`)
|
||
|
img.showImage(0)
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Once you create the function `set eat`, call it in the **ELSE IF** statement that checks if button `B` is pressed.
|
||
|
|
||
|
```
|
||
|
basic.forever(() => {
|
||
|
if (input.buttonIsPressed("A")) {
|
||
|
setSleep()
|
||
|
basic.pause(5000)
|
||
|
} else if (input.buttonIsPressed("B")) {
|
||
|
setEat()
|
||
|
}
|
||
|
else {
|
||
|
setAwake()
|
||
|
}
|
||
|
})
|
||
|
```
|
||
|
|
||
|
### Challenge 3
|
||
|
|
||
|
### @video td/videos/digital-pet-3
|
||
|
|
||
|
Have your pet tell you when it is going to sleep! Do this inside of the **IF** statement that checks if button `A` is pressed before you call the function `set sleep`.
|
||
|
|
||
|
```
|
||
|
basic.forever(() => {
|
||
|
if (input.buttonIsPressed("A")) {
|
||
|
basic.showString("I am going to sleep.", 150) // ***
|
||
|
setSleep()
|
||
|
basic.pause(5000)
|
||
|
} else if (input.buttonIsPressed("B")) {
|
||
|
setEat()
|
||
|
}
|
||
|
else {
|
||
|
setAwake()
|
||
|
}
|
||
|
})
|
||
|
```
|
||
|
|
||
|
### Challenge 4
|
||
|
|
||
|
### @video td/videos/digital-pet-4
|
||
|
|
||
|
Now, how about we keep track of how many times our pet eats? Add a global variable called `feed` that keeps track of how many times you feed your pet. If button `B` is pressed, increment `feed` by one. Add a condition `on shake` to check your total.
|
||
|
|
||
|
```
|
||
|
feed = 0 // ***
|
||
|
basic.forever(() => {
|
||
|
if (input.buttonIsPressed("A")) {
|
||
|
basic.showString("I am going to sleep.", 150)
|
||
|
setSleep()
|
||
|
basic.pause(5000)
|
||
|
} else if (input.buttonIsPressed("B")) {
|
||
|
feed = feed + 1 // ***
|
||
|
setEat()
|
||
|
}
|
||
|
else {
|
||
|
setAwake()
|
||
|
}
|
||
|
})
|
||
|
input.onGesture(Gesture.Shake, () => {
|
||
|
basic.showNumber(feed, 150) // ***
|
||
|
}) // ***
|
||
|
```
|
||
|
|
||
|
### Challenge 5
|
||
|
|
||
|
Program your pet to say that it is hungry after 60 seconds.
|
||
|
|
||
|
**Hint**: use `input->running time`
|
||
|
|