Running Roulette is a Garmin watch app that gamifies your running routine by spinning a roulette wheel to randomly select your next running distance. Perfect for runners who want to add spontaneity and fun to their training!
- Interactive Roulette Wheel: Animated spinning wheel with visual feedback and smooth transitions
- Multiple Distance Profiles: Choose from four pre-configured distance ranges:
- 5K Profile: Random distances from 0.5K to 5K (10 segments)
- 10K Profile: Random distances from 1K to 10K (16 segments)
- Half Marathon Profile: Random distances from 1K to 21K (16 segments)
- Marathon Profile: Random distances from 1K to 42K (16 segments)
- Multi-Language Support: Available in English, Spanish, and Portuguese
- Visual Design: Casino-style roulette with alternating red/black segments and gold accents
- Launch the App: Open Running Roulette on your Garmin watch
- Select Distance Profile (Optional): Press the menu button and choose "Distances" to select your preferred distance range (5K, 10K, Half Marathon, or Marathon)
- Spin the Wheel: Press the menu button and select "Spin" to start the roulette animation
- Get Your Distance: Watch the wheel spin and land on a random distance
- Go Run!: The selected distance is displayed in the center with a "GO RUN!" prompt
This app is compatible with a wide range of Garmin devices, including:
- Forerunner Series: 165, 165M, 255, 255M, 255S, 255SM, 265, 265S, 570 (42mm/47mm), 955, 965, 970
- Fenix Series: 7, 7S, 7X, 7 Pro, 8 (43mm/47mm), 8 Pro, 8 Solar, Fenix E
- Epix Series: Epix 2, Epix 2 Pro (42mm/47mm/51mm)
Tested primarily on Garmin Forerunner 965.
-
Garmin Connect IQ SDK:
- Download and install the Connect IQ SDK from Garmin's developer portal
- Set up your development environment following Garmin's official documentation
-
IDE Options:
- Visual Studio Code with the Monkey C extension (recommended)
- Eclipse with the Connect IQ plugin
-
Clone the repository:
git clone <repository-url> cd roulette
-
Build the project:
- Using VS Code: Open the project and use the Monkey C build commands
- Using command line: Use the MonkeyC compiler with the appropriate device target
-
Deploy to device:
- Connect your Garmin device via USB
- Use the Connect IQ SDK tools to deploy the compiled
.prgfile to your device
roulette/
├── source/ # MonkeyC source files
│ ├── RouletteRunnerApp.mc # Main application entry point
│ ├── RouletteRunnerAppView.mc # View rendering and animation logic
│ ├── RouletteRunnerMenuDelegate.mc
│ ├── RouletteRunnerMenuBehavior.mc
│ └── RouletteRunnerMenuDistancesDelegate.mc
├── resources/ # App resources
│ ├── drawables/ # Icons and images
│ ├── jsonData/ # Distance profile data
│ ├── layouts/ # UI layouts
│ ├── menus/ # Menu definitions
│ └── strings/ # English strings
├── resources-spa/ # Spanish translations
├── resources-por/ # Portuguese translations
├── manifest.xml # App manifest and device compatibility
└── monkey.jungle # Build configuration
Distance profiles are defined in resources/jsonData/resources.xml. Each profile is a JSON array of distance strings:
<jsonData id="customProfile">["1K", "2K", "3K", "5K", "8K", "13K"]</jsonData>To add a new profile:
- Add your JSON data to
resources/jsonData/resources.xml - Update the menu in
resources/menus/roulette_runner_distances_menu.xml - Add corresponding string resources for the profile name
- Update the menu delegate to handle the new profile selection
The roulette wheel colors are defined in RouletteRunnerAppView.mc:
- Red segments:
0xCC0000 - Black segments:
0x1A1A1A - Gold accents:
0x888800 - Selected segment:
0x444400
To add a new language:
- Create a new
resources-{lang}/directory (e.g.,resources-fra/for French) - Copy
strings.xmlfromresources/strings/and translate all strings - Add the language code to
manifest.xmlunder<iq:languages>
- Language: MonkeyC (Garmin's proprietary language)
- Min API Level: 3.2.0
- App Type: Watch App
- Animation: Custom wheel rotation with physics-based deceleration
- Rendering: Canvas-based drawing with polygon fills for segments
- Add customizable distance values (time-based, rep-based workouts)
- Support for additional Garmin device families (Venu, Enduro)
- Display workout suggestions based on training objectives
- Save spin history and statistics
- Integration with Garmin training plans
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
For issues, questions, or feature requests, please open an issue on the GitHub repository.
