efa4553376
* Adapt the TEALS 'Best Friends' game * animate friend expressions * free hand packet box * missing paren in examples * better avatar message * use just on sim block
179 lines
6.8 KiB
Markdown
179 lines
6.8 KiB
Markdown
# Best Friends
|
||
|
||
## @description A game to find your "best friend" among the other players.
|
||
|
||
## ~ avatar
|
||
|
||
You have a friend out there. Send out messages to find your best friend!
|
||
|
||
## ~
|
||
|
||
![Sending your friend message](/static/mb/projects/best-friends.png)
|
||
|
||
You’ve lost the ability to speak. Oh no! However, even in silence you can make new friends. A new discovery has been made, radio transmission. Eureka! Now you must find the other person in your group who you are friends with by sending and receiving messages.
|
||
|
||
## Playing the game
|
||
|
||
You play "Best Friends" with lots of people like in a class full of students or as a party game. The number of players is even so that everyone will eventually find their own best friend. When using radio with the @boardname@, you transmit and receive with a _group_ number. This is like a channel number. Each pair of best friends will have their own group number.
|
||
|
||
### Assign group numbers
|
||
|
||
Make small pieces of paper to write group numbers on for every player. Write down the same group number, starting with `1`, on two pieces of paper. Now, write the next group number `2` on two more pieces. Continue to write the next group numbers on pairs of paper until they all have numbers on them. Put all the pieces into a box, bag, bucket, or other container and have each player pull out a number. Players will code their game using their own group number.
|
||
|
||
### Finding your friend
|
||
|
||
Your radio group number is what will help you find your new friend. They will have the same number as you. Also, by setting your radio transmit power to `1`, the distance your message is sent is about one foot, so make sure you are close to whoever is trying to receive your message.
|
||
|
||
When you press **A**, the program sends a number `1` and when you press **B**, it sends a `2`. You must also be able to receive messages from your friend by following these display clues:
|
||
|
||
* At the beginning, show a half heart.
|
||
* When receiving a `1` number, show a Smiley Face (friends).
|
||
* When receiving a `2` number, show a Heart (best friends).
|
||
|
||
```sim
|
||
let toggleIcon = false
|
||
basic.forever(function () {
|
||
basic.showLeds(`
|
||
. # . . .
|
||
# # # . .
|
||
# # # . .
|
||
. # # . .
|
||
. . # . .
|
||
`)
|
||
basic.pause(1000)
|
||
if (toggleIcon) {
|
||
basic.showIcon(IconNames.Heart)
|
||
} else {
|
||
basic.showIcon(IconNames.Happy)
|
||
}
|
||
toggleIcon = !(toggleIcon)
|
||
basic.pause(500)
|
||
})
|
||
```
|
||
|
||
## Code the game
|
||
|
||
### Set group and power
|
||
|
||
Get the ``||radio:radio set transmit power||`` block from ``||radio:Radio||`` and put it into the ``||basic:on start||``. Set the power level to `1`. Pull out the ``||radio:radio set group||`` and put it right after ``||radio:radio set transmit power||``. Change the group number to be the one that was assigned to you.
|
||
|
||
```blocks
|
||
radio.setTransmitPower(1)
|
||
radio.setGroup(212)
|
||
```
|
||
|
||
### Initial expression
|
||
|
||
At first you haven't found your friend yet. So, you need an initial expression that shows this. Make this expression be a half heart. Drag out a ``||basic:show leds||`` block from ``||basic:Basic||`` and put it in the ``||basic:on start||`` block too. Draw a half heart in the LEDs.
|
||
|
||
```blocks
|
||
radio.setTransmitPower(1)
|
||
radio.setGroup(212)
|
||
basic.showLeds(`
|
||
. # . . .
|
||
# # # . .
|
||
# # # . .
|
||
. # # . .
|
||
. . # . .
|
||
`)
|
||
```
|
||
|
||
### Be friendly
|
||
|
||
When you come close to another player, you can decide to be friendly. If you want to just be friends, you try and send them a `1`. Get an ``||input:on button A pressed||`` from ``||input:Input||``. Go over to ``||radio:Radio||`` again and get a ``||radio:radio send number||``. Place it inside the ``||input:on button A pressed||``. Make the number you send be a `1`.
|
||
|
||
```blocks
|
||
input.onButtonPressed(Button.A, function () {
|
||
radio.sendNumber(1)
|
||
})
|
||
```
|
||
|
||
If you think you want to be best friends with a player you're close to, you try to send them the number `2`. Copy the ``||input:on button A pressed||`` block you already have in your workspace (right click on it and choose **Duplicate**). In the new block, change the button from **A** to **B**. Set the number you send to be `2` in the ``||radio:radio send number||``.
|
||
|
||
```blocks
|
||
input.onButtonPressed(Button.B, function () {
|
||
radio.sendNumber(2)
|
||
})
|
||
```
|
||
|
||
### Are we friends?
|
||
|
||
If someone near you is your friend, you'll receive either the number `1` or `2` on the radio group assigned to you. Use the ``||radio:radio on received receivedNumber||`` block to get a friend message from another player. Go find it in ``||radio:Radio||`` and put it in the Workspace.
|
||
|
||
```blocks
|
||
radio.onReceivedNumber(function (receivedNumber) {
|
||
})
|
||
```
|
||
|
||
When you receive a message on your group, you need to check for the number in the message that says the other player is a friend or a best friend. From ``||logic:Logic||`` get an ``||logic:if then else||`` block an put inside the receive block. Go back to ``||logic:Logic||`` and get the ``||logic:0 = 0||`` condition. Place that after the ``||logic:if||`` on the ``||logic:if then else||``.
|
||
|
||
```blocks
|
||
radio.onReceivedNumber(function (receivedNumber) {
|
||
if (0 == 0) {
|
||
} else {
|
||
|
||
}
|
||
})
|
||
```
|
||
|
||
Go to ``||variables:Variables||`` and get the ``||variables:receivedNumber||`` variable and put it in first slot of the ``||logic:0 = 0||``. Change the `0` in the second slot to `1`.
|
||
|
||
|
||
```blocks
|
||
radio.onReceivedNumber(function (receivedNumber) {
|
||
if (receivedNumber == 1) {
|
||
|
||
} else {
|
||
|
||
}
|
||
})
|
||
```
|
||
|
||
Click the **(+)** at the bottom of the ``||logic:else||`` to open up another condition. Copy the ``||logic:receivedNumber = 1||`` and place the new block into the condition of the ``||logic:else if||``. Change the number in that block from `1` to `2`.
|
||
|
||
```blocks
|
||
radio.onReceivedNumber(function (receivedNumber) {
|
||
if (receivedNumber == 1) {
|
||
|
||
} else if (receivedNumber == 2) {
|
||
|
||
} else {
|
||
|
||
}
|
||
})
|
||
```
|
||
|
||
Inside the ``||logic:if then||`` section, put in a ``||basic:show icon||`` from ``||basic:Basic||``. Set the icon to the ``Smiley Face`` to mean that you're friends. Either copy that block or get another ``||basic:show icon||`` and put it into the ``||logic:else if||`` section. Change the icon for that one to be a ``Heart`` meaning you're best friends.
|
||
|
||
```blocks
|
||
radio.onReceivedNumber(function (receivedNumber) {
|
||
if (receivedNumber == 1) {
|
||
basic.showIcon(IconNames.Happy)
|
||
} else if (receivedNumber == 2) {
|
||
basic.showIcon(IconNames.Heart)
|
||
} else {
|
||
|
||
}
|
||
})
|
||
```
|
||
|
||
You don't need the final ``||logic:else||`` section so click the **(-)** at the side of the last ``||logic:else||`` to hide it.
|
||
|
||
```blocks
|
||
|
||
radio.onReceivedNumber(function (receivedNumber) {
|
||
if (receivedNumber == 1) {
|
||
basic.showIcon(IconNames.Happy)
|
||
} else if (receivedNumber == 2) {
|
||
basic.showIcon(IconNames.Heart)
|
||
}
|
||
})
|
||
```
|
||
|
||
### We're friends!
|
||
|
||
Your game is ready! Now go find your friend. Do you want to be a friend or best friends?
|
||
|
||
```package
|
||
radio
|
||
``` |