🎵 SIMON SAYS

Watch the pattern, then play it back — one pad longer every round

← Back to Fun Time
Round
1
Score
0
Length
1
Best round
0

⌨️ Controls

  • Click or tap a pad — or use 1 2 3 4
  • Q W A S work too, as do the arrow keys
  • P pause  •  R new game
  • Presses during the flashing are ignored — wait for YOUR TURN.
  • 🎮 Xbox controller? Just plug it in or pair it — the stick and D-pad are the arrow keys, A is SPACE, Menu pauses and View starts again

🎯 How to play

  • The game flashes a pattern of pads. Watch carefully.
  • When it says YOUR TURN, press the same pads in the same order.
  • Get it right and the pattern grows by one and flashes again.
  • One wrong pad ends the game — so take your time on the early rounds.

🏆 Scoring

  • Finishing a round is worth 10 × the round number.
  • Round 1 flashes each pad for 620 ms; by round 15 it is down to 260.
  • Most people manage 5 or 6. Ten is genuinely impressive.
  • Tip: say the numbers out loud as they flash. It really works.

🧑‍💻 For young coders: build this game yourself

This game is split into small library files inside funtime/lib/, and every function has a comment saying exactly what goes in, what comes out, and the algorithm in plain English. Empty any function out, read its comment, and write it yourself.

File What it does Good functions to try re-writing
lib/simon-rules.js The rules: the sequence, the checking, the phases addStep, isCorrectSoFar, pressPad, updateGame
lib/simon-draw.js Painting the four pads drawPad, padAtPixel, renderGame
lib/simon-main.js The glue: clicks, keyboard, the loop doAction, connectBoard, gameLoop

💡 The big idea: the game is always in one of three phases — watching, playing, or over — and almost every rule starts by asking which one it is in. A little word like phase can organise a whole program.

🛠️ Want to be walked through it? Build Simon Says Yourself takes you through the key functions one step at a time and tests each one you write. There is a Python version too.