Rebound / Case study
I built five sports around one simple gesture.
I made Rebound as a local multiplayer game where players draw lines across a dot grid and bounce from point to point. Instead of rebuilding the game for every sport, I wrote one shared system and used it for soccer, sumo, hockey, fencing, and Soccer Blitz.

My idea
I wanted pencil-and-paper play to feel physical.
I kept the main action small: drag from the current dot to an available neighbor. If I reach an occupied point, the line rebounds and the turn keeps going. I changed the board, scoring, art, and win conditions for each sport without making the player relearn the controls.


How I built it
I separated the shared rules from each sport.
I put turns, dots, lines, rebounds, cancellations, player switching, and victory events in an abstract Game class. Then I let each mode define its own board size, art, setup, and win check. I used BoardManager to generate the grid and GameController to load the selected sport.
Details I added
- I made undo restore both the last line and any mode-specific state.
- I built a tutorial that reacts to the player’s actual bounces and completed lines.
- I separated scene transitions, victory UI, sound, haptics, localization, and screen sizing from the rules.
- I shipped the same Unity project for WebGL and mobile.
What I learned
I learned to build the mechanic once and leave clear places to extend it.
- I only use inheritance when the shared behavior is real. Every mode uses the same board and turn loop, but I can replace the scoring rules.
- I treat recovery as part of touch controls. Cancel and undo matter just as much as a successful drag.
- I pay attention to small feedback. Sound, haptics, motion, and player indicators make the abstract board easier to understand.
- I keep platform-specific work at the edge. Android haptics and browser packaging do not need to know the game rules.