2023-02-11 21:18:31 +00:00
# Rock Papper Scissors
2023-03-04 21:17:45 +00:00
2023-02-15 16:26:53 +00:00
## Introduction
2023-03-04 21:17:45 +00:00
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.
2023-02-15 16:26:53 +00:00
2023-02-11 21:18:31 +00:00
## Status
2023-03-04 21:17:45 +00:00
2023-03-06 04:18:32 +00:00
This is currently a work in progress!
Completed work:
2023-03-04 21:17:45 +00:00
2023-02-15 16:26:53 +00:00
- 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.
2023-03-04 21:17:45 +00:00
- Vibro on button press (valid move).
- "Song" when win/loss/draw.
2023-03-06 04:18:32 +00:00
- Show games found & let user pick the game to join.
- Config - Allow changing game number.
- Config - Allow changing frequency.
2023-03-06 17:40:58 +00:00
- Receiving a Join game does an ACK (to cause game on joiner to start).
2023-03-06 19:48:32 +00:00
- Log game results & contact info onto SD card.
2023-03-07 01:51:41 +00:00
- Allow viewing past games/scores.
2023-03-07 02:41:32 +00:00
- A join ACK removes it from the list of available games.
2023-03-22 18:10:57 +00:00
- Config - Allow changing hard-coded CONTACT_INFO message.
2023-02-11 21:18:31 +00:00
2023-02-15 16:26:53 +00:00
Remaining work (for subghz version):
2023-03-04 21:17:45 +00:00
2023-03-22 18:10:57 +00:00
- Config - Allow saving CONTACT_INFO message.
2023-02-15 16:26:53 +00:00
- Refactor the code, so it has less duplication.
- Write tutorial.
- Add game ending animations.
2023-02-11 21:18:31 +00:00
2023-02-15 16:26:53 +00:00
Future ideas:
2023-03-04 21:17:45 +00:00
2023-02-15 16:26:53 +00:00
- Create stand-alone hardware badges that can play the game too.
2023-03-06 17:40:58 +00:00
- Uses Princeton signals for second player.
2023-02-15 16:26:53 +00:00
- Instead of subghz, use IR.
- Instead of subghz, use GPIO.
2023-02-11 21:18:31 +00:00
## Installation Directions
2023-03-04 21:17:45 +00:00
2023-02-11 21:18:31 +00:00
This project is intended to be overlayed on top of an existing firmware repo.
2023-03-04 21:17:45 +00:00
- Clone, Build & Deploy an existing flipper zero firmware repo. See this [tutorial ](/firmware/updating/README.md ) for updating firmware.
2023-02-11 21:18:31 +00:00
- Copy the "rock_paper_scissors" [folder ](.. ) to the \applications\plugins\rock_paper_scissors folder in your firmware.
2023-03-04 21:17:45 +00:00
- Build & deploy the firmware. See this [tutorial ](/firmware/updating/README.md ) for updating firmware.
2023-02-11 21:18:31 +00:00
- 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.
2023-03-04 21:17:45 +00:00
2023-02-11 21:18:31 +00:00
### Open question - Should we use "applications" or "applications_user"?
## Running the updated firmware
2023-03-04 21:17:45 +00:00
These directions assume you are starting at the flipper desktop. If not, please press the back button until you are at the desktop.
2023-02-11 21:18:31 +00:00
- 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.
2023-03-06 04:18:32 +00:00
- On Flipper 1, choose "Host game".
2023-03-22 18:10:57 +00:00
- select a valid frequency. (like "433.92" in US region)
2023-03-06 04:18:32 +00:00
- choose a game number.
- click OK button to start game.
- On Flipper 2, choose "Join game".
2023-03-22 18:10:57 +00:00
2023-03-06 04:18:32 +00:00
- select the same valid frequency as Flipper 1.
2023-03-22 18:10:57 +00:00
- "game none" should change to show the game number from Flipper 1 & its name.
-click OK button to join game.
2023-02-14 20:49:09 +00:00
2023-02-11 21:18:31 +00:00
- Once two players are joined:
2023-03-04 21:17:45 +00:00
- 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!
2023-02-11 21:18:31 +00:00
- Rules:
- Rock beats Scissors.
- Paper beats Rock.
- Scissors beat Paper.
- Two identical items tie.
2023-03-06 04:18:32 +00:00
- Short press the BACK button for the main menu.
- Long press the BACK button to exit.
2023-02-11 21:18:31 +00:00
## HackRF One
2023-03-04 21:17:45 +00:00
- 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 ](https://www.youtube.com/watch?v=S0sgcDQrVOc ) video demo of how to record and broadcast messages.
2023-02-11 21:18:31 +00:00
- To record a message: (replace "flipper-chat.rf" with the file name you want to use, such as "select-rock.rf".)
2023-03-04 21:17:45 +00:00
2023-02-11 21:18:31 +00:00
```
sudo hackrf_transfer -r flipper-chat.rf -f 433920000 -s 8000000
```
2023-03-04 21:17:45 +00:00
- To broadcast a message: (replace "flipper-chat.rf" with the saved file name.)
2023-02-11 21:18:31 +00:00
```
sudo hackrf_transfer -r flipper-chat.rf -f 433920000 -s 8000000 -x 47
```
- What I typically do is:
2023-03-04 21:17:45 +00:00
- 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.)
2023-02-11 21:18:31 +00:00
## Details about the project files
2023-03-04 21:17:45 +00:00
2023-02-11 21:18:31 +00:00
- application.fam
2023-03-04 21:17:45 +00:00
2023-02-11 21:18:31 +00:00
- 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.
2023-03-06 04:18:32 +00:00
- specifies our application can be found in the "Game" category.
2023-02-11 21:18:31 +00:00
- rock_paper_scissors.png
2023-03-04 21:17:45 +00:00
2023-03-06 04:18:32 +00:00
- The icon for our application.
2023-02-11 21:18:31 +00:00
- rock_paper_scissors.c
2023-03-04 21:17:45 +00:00
- This is the game applcation.
2023-03-21 23:14:46 +00:00
## Example data
- Beacon for game 042:
2023-03-22 18:10:57 +00:00
RPS:BA042:Lumyphut
2023-03-21 23:14:46 +00:00
- Join game 042:
2023-03-22 18:10:57 +00:00
RPS:JA042NYourNameHere :Lumyphut
2023-03-21 23:14:46 +00:00
- Join-ack for game 042:
2023-03-22 18:10:57 +00:00
RPS:AA042NYourNameHere :Lumyphut
2023-03-21 23:14:46 +00:00
- Count 1 for game 042:
2023-03-22 18:10:57 +00:00
RPS:MA0421:Lumyphut
2023-03-21 23:14:46 +00:00
- Count 2 for game 042:
2023-03-22 18:10:57 +00:00
RPS:MA0422:Lumyphut
2023-03-21 23:14:46 +00:00
- Rock for game 042:
2023-03-22 18:10:57 +00:00
RPS:MA042R:Lumyphut
2023-03-21 23:14:46 +00:00
- Paper for game 042:
2023-03-22 18:10:57 +00:00
RPS:MA042P:Lumyphut
2023-03-21 23:14:46 +00:00
- Scissors for game 042:
2023-03-22 18:10:57 +00:00
RPS:MA042S:Lumyphut
2023-03-21 23:14:46 +00:00
2023-03-22 18:10:57 +00:00
RPS:AA042NYourNameHere :Lumyphut
123456789 0123456789 = 19bytes.
60-19 = 41 bytes is max length of name.