WaveLearn
What inspired it
We’ll do almost anything to avoid studying, but we’ll happily play a turn-based RPG for hours straight. So, the idea felt obvious. What if studying was the RPG? Drop in your notes, fight a sea creature, and learn the material whether you want to or not.
How it works
You pick a file. It could be a PDF of lecture slides, a photo of handwritten notes, or a markdown file, basically anything. GPT-4o reads it and produces 25 to 35 multiple-choice questions in JSON. The game drops you into a battle as a dolphin against a Starfish, Shark, or Evil Shark depending on the difficulty selected.
Each turn, players choose Attack or Heal, then answer a question. Get it right, your dolphin slams the enemy and builds a combo. Get it wrong, the screen flashes red, the correct answer appears so the student actually learns it, and the enemy gets a chance to bite back. Win the fight, earn coins, and spend them in the shop on damage or healing upgrades. Damage scales with combo length to reward consistency.
Every quiz battle is saved so students can replay it later from their dashboard, making it useful for long-term review and exam preparation.
How we built it
We used Java with LibGDX for rendering, Jackson for JSON serialization, and PDFBox for extracting text from PDFs. All saving is handled through local JSON files stored in a folder under the user’s home directory, allowing study sessions to persist between launches.
Challenges
One of the strangest bugs took us way longer than it should have. The background GIF rendered perfectly during development, then suddenly turned completely black the moment we added the red wrong-answer flash. It ended up being a rendering issue, and resetting the draw color to white at the start of every frame fixed it.
Another frustrating bug was just a naming mismatch. Menu music worked during development but disappeared in the packaged build because the file on disk was named MainMenu.ogg while the code looked for mainmenu.ogg.
The thing we’re proudest of solving was making the game actually feel satisfying to play. Originally, health dropped instantly after answering questions and the sprites barely moved, which made the game feel like a dressed-up online quiz. Adding impactful slam animations, visual feedback, and better timing made combat feel much more engaging.
What we learned
LibGDX was thinner than we expected. It gives a lot of flexibility, but that also means you’re responsible for building many systems yourself, so teamwork, documentation, and online resources were huge in helping us get everything working.
We also learned that the OpenAI API rewards being extremely careful with both prompting and parsing. A large part of our system prompt focuses on telling the model what not to do, and we built a defensive parser that filters malformed questions before they ever reach the player.



Log in or sign up for Devpost to join the conversation.