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:
		
				
					committed by
					
						
						Peli de Halleux
					
				
			
			
				
	
			
			
			
						parent
						
							98bff887f5
						
					
				
				
					commit
					efa4553376
				
			@@ -27,6 +27,7 @@
 | 
				
			|||||||
  * [Rock Paper Scissors Teams](/projects/rps-teams)
 | 
					  * [Rock Paper Scissors Teams](/projects/rps-teams)
 | 
				
			||||||
  * [Micro:Coin](/projects/micro-coin)
 | 
					  * [Micro:Coin](/projects/micro-coin)
 | 
				
			||||||
  * [Infection](/projects/infection)
 | 
					  * [Infection](/projects/infection)
 | 
				
			||||||
 | 
					  * [Best Friends](/projects/best-friends)
 | 
				
			||||||
* [Fashion](/projects/fashion)
 | 
					* [Fashion](/projects/fashion)
 | 
				
			||||||
  * [Duct Tape Wallet](/projects/wallet)
 | 
					  * [Duct Tape Wallet](/projects/wallet)
 | 
				
			||||||
  * [Watch](/projects/watch)
 | 
					  * [Watch](/projects/watch)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										179
									
								
								docs/projects/best-friends.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								docs/projects/best-friends.md
									
									
									
									
									
										Normal 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!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## ~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
@@ -58,5 +58,10 @@ Here are some cool projects that you can build with your @boardname@!
 | 
				
			|||||||
  "url": "/projects/infection",
 | 
					  "url": "/projects/infection",
 | 
				
			||||||
  "description": "An epidemic has broken out, see who will survive.",
 | 
					  "description": "An epidemic has broken out, see who will survive.",
 | 
				
			||||||
  "imageUrl": "/static/mb/projects/infection.png"
 | 
					  "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
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/static/mb/projects/best-friends.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 20 KiB  | 
		Reference in New Issue
	
	Block a user