Signal Hunter

Game Design Document: “Signal Hunter”

Objective: Be the first player to sync your gamepad to the robot PU by scanning for its secret radio channel.


1. Game Overview

In this fast-paced technical challenge, a “Judge” hides the robot’s communication frequency. Players must use their knowledge of the gamepad’s interface to cycle through channels, testing for a connection. The first person to “hijack” the robot and prove they found the number wins.


2. Game Setup

  • The Robot (PU): * The Judge selects a random Radio Group between 0 and 50.
    • The Judge programs the robot to perform a clear action when it receives a specific signal (e.g., “On Radio Received ‘A’, Show Icon: Heart”).
  • The Gamepads:
    • Each player starts with a gamepad set to Channel 0.
    • The gamepad must have a way to change the radio set group (e.g., Pressing Button A increases the channel number).
  • The Arena: The robot is placed in the center of the room so all players can see its LED display or movements.

3. Gameplay Mechanics

Phase 1: The Lockdown

The Judge moves out of sight, sets the Robot PU to the secret channel, and starts the robot. The Judge then announces: “The Signal is Live!”

  • Tuning: Players use their gamepad buttons to increment their radio channel.
  • Testing: After changing the channel, the player presses a “Test” button (e.g., Button B) which sends a command to the robot.
  • Visual Feedback: Players must watch the robot. If the robot reacts (spins, displays an icon, or makes a sound), the player has found the correct frequency.

Phase 3: The Claim

To win, the player must:

  1. Demonstrate Control: Make the robot perform the designated action three times in a row.
  2. Report the Channel: Shaking the gamepad or looking at the screen, the player must shout out the exact channel number (0–50).

4. Technical Configuration (MakeCode)

To make this game work, you can use these logic snippets in your extension/program:

For the Robot (PU):

Code snippet

radio.setGroup(randint(0, 50)) // Set by Judge
radio.onReceivedString(function (receivedString) {
    if (receivedString == "ping") {
        basic.showIcon(IconNames.Heart)
        basic.pause(500)
        basic.clearScreen()
    }
})

For the Player Gamepad:

Code snippet

let currentChannel = 0
input.onButtonPressed(Button.A, function () {
    currentChannel += 1
    if (currentChannel > 50) currentChannel = 0
    radio.setGroup(currentChannel)
    basic.showNumber(currentChannel)
})

input.onButtonPressed(Button.B, function () {
    radio.sendString("ping")
})

5. Win Conditions

  • The Winner: The first player to successfully trigger the robot’s “Heart” icon and correctly identify the Radio Group number.
  • The Penalty: If a player shouts the wrong number or claims they have it without the robot reacting, they must sit out for 30 seconds (a “Signal Timeout”).