4.3 KiB
Rock Papper Scissors
Introduction
This is game of Rock, Paper, Scissors. In version 1, we use the subghz radio to find other players, communicate moves, and exchange contact information.
Status
This is currently a work in progress...
- Most of the game logic is complete (two flippers should be able to play against each other.)
- UI to show Flipper images instead of just debug text.
Remaining work (for subghz version):
- Tone when button pressed.
- Show games found & let user pick the game to join.
- Log joined game into SD card.
- Log game results into SD card.
- Allow viewing past games/scores.
- Config - Allow changing game number.
- Config - Allow changing frequency.
- Config - Allow changing message on join.
- Refactor the code, so it has less duplication.
- Write tutorial.
- Add game ending animations.
Future ideas:
- Uses Princeton signals for second player.
- Create stand-alone hardware badges that can play the game too.
- Instead of subghz, use IR.
- Instead of subghz, use GPIO.
Installation Directions
This project is intended to be overlayed on top of an existing firmware repo.
- Clone, Build & Deploy an existing flipper zero firmware repo. See this tutorial for updating firmware.
- Copy the "rock_paper_scissors" folder to the \applications\plugins\rock_paper_scissors folder in your firmware.
- Build & deploy the firmware. See this tutorial for updating firmware.
- NOTE: You can also extract the rock_paper_scissors.FAP from resources.tar file and use qFlipper to copy the file to the SD Card/apps/Misc folder.
Open question - Should we use "applications" or "applications_user"?
Running the updated firmware
These directions assume you are starting at the flipper desktop. If not, please press the back button until you are at the desktop.
-
Press the OK button on the flipper to pull up the main menu.
-
Choose "Applications" from the menu.
-
Choose "Games" from the sub-menu.
-
Choose "Rock Paper Scissors"
-
Do the same steps on your second Flipper.
-
On one of the flippers press Left arrow to join the game.
-
Once two players are joined:
- Press "OK" to send "1". The other player should also press "OK" to send "1" back (at the same time!)
- Press "OK" to send "2". The other player should also press "OK" to send "2" back (at the same time!)
- Press "UP" to send a "Rock", or "RIGHT" to send a "Paper", or "DOWN" to send a "Scissors". The other player should send at same time!
- Rules:
- Rock beats Scissors.
- Paper beats Rock.
- Scissors beat Paper.
- Two identical items tie.
-
Press the BACK button to exit.
HackRF One
-
If you do not have two Flipper Zero devices, you can use a HackRF One to record messages & broadcast those messages at a future date. I made a YouTube video demo of how to record and broadcast messages.
-
To record a message: (replace "flipper-chat.rf" with the file name you want to use, such as "select-rock.rf".)
sudo hackrf_transfer -r flipper-chat.rf -f 433920000 -s 8000000
- To broadcast a message: (replace "flipper-chat.rf" with the saved file name.)
sudo hackrf_transfer -r flipper-chat.rf -f 433920000 -s 8000000 -x 47
- What I typically do is:
- Use the Flipper Zero to send a messasge that I record, then I play back that message at a later time when I want to pretend the other Flipper Zero is sending a message. You can use the chat app in https://lab.flipper.net/cli, like shown in the video to send a specific packet (or you can use your own code to create the packet.)
- Use the HackRF One to record the message from my Fliiper Zero. Then later I use the chat app in https://lab.flipper.net/cli, to see what the message was (or I replay the message to see how my application would respond.)
Details about the project files
-
application.fam
- specifies the name of our application.
- specifies the entry point for our application.
- specifies we use the GUI.
- specifies our icon is the rock_paper_scissors.png file.
- specifies our application can be found in the "Misc" category.
-
rock_paper_scissors.png
- The icon for our application that shows up in the "Misc" folder.
-
rock_paper_scissors.c
- This is the game applcation.