A programming game where the goal is to guide a robot through various levels using programmatic controls.
- Multi-language programming support (PHP, Python, JavaScript, Lua, Ruby, BASIC, and Google Blockly)
- Custom code editor
- Cloud Saves
- Tutorial Levels
- Level fast-forwarding
- UI Themes
- Robotic Text to Speech for code debugging
- Android Rewarded ads for level solutions
- LibGDX (Game framework)
- Blockly (Graphical programming)
- Jython (Desktop Python)
- Chaquopy (Android Python)
- LuaJ (Lua)
- Quercus (PHP)
- Duktape Android (Android JavaScript)
- duktape4j (Desktop JavaScript)
- Jasic (BASIC interpreter base code)
- JRuby (Ruby)
- MaryTTS (Desktop text to speech)
- Android MaryTTS (Android text to speech)
- Project Lombok (Boilerplate generation)
- JCEF (Desktop embedded browser)
- JavaPackager (Gradle plugin to package desktop builds)
- Debug/step through mode
- Tab to double-space functionality in editor
- Make the UI not terrible
- Mobile HTML custom keyboard (Or not if it's not worth it and just disable code editor on mobile browsers)
- Code testing (JS code transformations, for instance)
- Level editor
- Prevent Firefox '/' quick search functionality
- Robot customization
- Make Robot.move(int) return distance traveled
The github actions workflow for the project builds and packages the releases for each platform, in addition to deploying the web demo to the gh-pages branch, and the Android application to the Google Play Store.
Building the project requires several external libraries depending on which modules you want to build. Regardless of
which platform you are building, the Android SDK is required to compile to project. To build without it, it would be
necessary to comment out parts of settings.gradle
and build.gradle
at the project root. To enable debug mode
(mostly logging) for the entire project, add debug=true
to a local.properties
file at the root for the project.
For the Desktop module, the respective JCEF library for your platform is required at
<project>/Libraries/jcef/<linux64|win64|mac64>
if you intend to use the Google Blockly functionality. To run without
Blockly support, simply run the desktop:run
gradle task. To run with Blockly, the JCEFDesktopLauncher
class needs to
be run specifically with the VM option:
-Djava.library.path=<project>/Libraries/jcef/<platform>/:<project>/desktop/natives/<platform>
. To package the
desktop project, a JRE is needed at <project>/Libraries/jre/<platform>
or the jrePath
values need to be changed in
<project>/desktop/build.gradle
tasks, and not setting it should use the system default.
For the Android module, a Chaquopy key is required in the local.properties
file. The
normal Android building methods should work as long as the Android SDK is installed. Google Play Services need to be
setup in addition to setting the AdMob IDs in the AndroidGameServies
class.
For the HTML subproject, there aren't any additional dependencies. To run the game in a browser, run the html:superDev
gradle task and open localhost:8080
in a browser. To package it, just run html:dist
.
For IOS, it works, but requires the whole OSX setup and developer account for more than running on a test device. Blockly and text-to-speech aren't supported at present.
For GameJolt cloud support, a gameJoltKey
from GameJolt needs to be set in the local.properties
file.
To build and copy Blockly, run the updateBlockly
task.
To update to a new JCEF release, download the platform assets from jcefbuild.
The 6 native platform JARs in the release archives need to have their native libraries extracted to the desktop/natives
directory with the existing format. The desktop/libs
directory should have its contents updated from one of the new platform
release archives. The Libraries/jcef
directory needs to be updated using the archive bin/lib
directories.