🧩 About the Project — KeyMaze Daily

Inspiration

Puzzle games that rely on fast reflexes often reward repetition more than thinking. I wanted to build something quieter and stricter — a game where one bad move matters, and planning is more important than speed. KeyMaze Daily was inspired by classic grid-based logic puzzles and daily challenges like chess problems and newspaper riddles, where a single decision can define the outcome.


What it does

KeyMaze Daily is a daily 2D maze puzzle where players must collect required items and unlock passages using limited movement. Each puzzle is:

  • Generated once per day
  • Guaranteed to be solvable
  • Designed to punish careless exploration

The goal is simple: think first, move second.


How I built it

The game is built as a 2D grid-based system where each cell encodes walls, paths, collectibles, and locked exits.

Key technical components:

  • Deterministic daily puzzle generation using a date-based seed
  • Movement constrained to grid adjacency (no diagonal shortcuts)
  • Automatic solvability validation using Dijkstra’s algorithm
  • Pre-submission checks to ensure the exit remains reachable after item placement

To verify solvability, the shortest path to the exit is calculated:

[ d(v) = \min_{u \in \text{adj}(v)} (d(u) + w(u, v)) ]

If no valid path exists, the maze is regenerated before being released.


Challenges I faced

  • Balancing difficulty: Small grids can become trivial, while larger ones can overwhelm players.
  • Preventing soft-locks: Random item placement can accidentally block progression if not validated.
  • Designing meaningful constraints: Limited moves must feel fair, not arbitrary.
  • Scope control: Keeping the game minimal while still engaging was harder than adding features.

What I learned

  • Constraint-driven design often creates deeper gameplay than complexity
  • Validating game states is just as important as generating them
  • Simple mechanics become interesting when consequences are permanent
  • “Less” is a design choice, not a limitation

Built With

Share this project:

Updates