Bennett Purdy

Full Stack Web Developer

Simon

Simon is a pattern-matching game where the player must remember an increasingly long series of inputs. The game features low-latency sound effects and a leaderboard.

Screenshot of a game showing colored tiles and dispplaying the user's high score.

Tech Stack

  • SvelteKit
  • SQLite
  • Drizzle
  • Tailwind
  • Docker

State Management

The app uses Svelte’s state management tools to track the user’s actions and produce effects such as changing the appearance of the buttons and producing sound effects. The game logic also interacts with the UI via Svelte.

Data Persistence

The leaderboard requires some read and write operations, and I decided to use an embedded database to simplify deployment and maintenance of the app. The app uses cookies to persist the user’s name and high score in their browser. The database and cookie operations are accessed through a set of API endpoints.

Design & Testing

For the aesthetic of the app, I wanted to create something that was similar to the original simon game, but put my own spin on it. I changed the shapes and colors of the buttons, but kept a skeuomorphic style to give it a tactile feeling. Through user testing, I discovered and fixed some bugs in the game logic. I also found that people were accidentally zooming the page a lot, so I disabled zooming to improve the feel of the app.

Audio

After adding sound effects to the game, I noticed they were very laggy. I did some research and found that the Web Audio API is a good choice for high-performance audio in web apps. I used Copilot in VSCode to help me implement the sound effects with the Web Audio API, and the resulting audio experience is very low-latency.