Adapt the TEALS 'Best Friends' game (#1948)

* 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
This commit is contained in:
Galen Nickel 2019-04-01 13:23:24 -07:00 committed by Peli de Halleux
parent 98bff887f5
commit efa4553376
4 changed files with 185 additions and 0 deletions

View File

@ -27,6 +27,7 @@
* [Rock Paper Scissors Teams](/projects/rps-teams)
* [Micro:Coin](/projects/micro-coin)
* [Infection](/projects/infection)
* [Best Friends](/projects/best-friends)
* [Fashion](/projects/fashion)
* [Duct Tape Wallet](/projects/wallet)
* [Watch](/projects/watch)

View File

@ -0,0 +1,179 @@
# 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)
Youve 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
```

View File

@ -58,5 +58,10 @@ Here are some cool projects that you can build with your @boardname@!
"url": "/projects/infection",
"description": "An epidemic has broken out, see who will survive.",
"imageUrl": "/static/mb/projects/infection.png"
}, {
"name": "Best Friends",
"url": "/projects/best-friends",
"description": "Your best friend is out there, play this game and go find them.",
"imageUrl": "/static/mb/projects/best-friends.png"
}]
```

BIN
docs/static/mb/projects/best-friends.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB