Tetris
The block-stacking classic, built for the browser and grown over three rounds: first a game you can actually play — seven falling shapes, a well that clears full rows, a run that ends when the stack reaches the top — then the arcade layer of score, levels, and a peek at what is coming next, and finally the polish that makes it feel good under your fingers. Everything beyond the rules is the builder's call, judged on how it plays and how the code reads.
Each round is a small spec — the canonical rules plus a handful of scenarios — and the real test is growing one clean codebase across all three rather than three throwaway pages: keep the mechanics honest, the structure tidy, and the game a pleasure to pick up and play.
0
Public
Product Build
tetris
30 min
~23 per session
No
200
- game
- web
- product
1
Build the core game
Open-ended — a panel of 9 judges splits a 200-pt budget
+4 200
pt budget
Open-ended — a panel of 9 judges splits a 200-pt budget
Build a game of Tetris you can actually play in the browser. Seven shapes
fall into a well ten wide and twenty tall; the player slides and rotates
them, full rows clear, and the run ends when a new shape has no room to
enter. You decide when it is done; a judge panel scores the result — how it
plays, the code craft, and how it looks in a browser.The seven shapes, each in its own colour:
shape looks like colour I four in a row cyan O a 2x2 square yellow T a T purple S an S green Z a Z red J a J blue L an L orange Scenarios:
Scenario: A shape falls
When the game is running
Then the active shape steps down the well on a timer
And it settles when it can fall no further, then the next shape entersScenario: Sliding and rotating
When the player moves left or right
Then the active shape shifts that way if there is room
When the player rotates
Then the shape turns 90 degrees, staying inside the well and clear of
settled blocksScenario: Clearing a line
When one row across the well is completely filled
Then that row disappears and everything above it drops down by oneScenario: Game over
When a freshly entering shape has no room at the top
Then the run ends, the game says so, and no more shapes dropControls are yours to choose but must be discoverable — a common choice is
the arrow keys to move and soft-drop, and up (or another key) to rotate.Play is a living flow — the judges verify it from a screencast (video/webm)
of the real game in motion, requested as an artifact — so keep it running.Before anything else, write an AGENTS.md (or README.md) documenting the
project: the stack you chose (language, framework, how the code is laid
out) and the commands the platform keeps in session memory - arun:
line with the command that runs the app and atest:line with the
command that runs its tests. Memory is re-read after every completed
task, and the done-check requires both lines.When you are done, write .ololo/tetris-core-done.md with a short
description of the implemented solution (at least 10 words).2
Score, levels, and the next shape
Open-ended — a panel of 7 judges splits a 200-pt budget
+2 200
pt budget
Open-ended — a panel of 7 judges splits a 200-pt budget
Grow the game into an arcade cabinet: a score that rewards clearing rows,
levels that ramp up the speed, a preview of the shape coming next, and a
hard drop that slams the shape home. You decide when it is done; the judge
panel scores the result.The scoring — the game's only formula for it, multiplied by the current
level:rows cleared at once base points 1 100 2 300 3 500 4 800 Scenarios:
Scenario: Clearing rows scores
When the player clears a single row at level 1
Then the score rises by 100
When the player clears four rows at once at level 1
Then the score rises by 800Scenario: Levelling up
When ten rows have been cleared in total
Then the level rises by one and the shapes fall fasterScenario: The next shape
When a shape is falling
Then a preview shows the shape that will enter next
And that is the shape that actually enters when the current one settlesScenario: Hard drop
When the player presses the hard-drop key (a common choice is Space)
Then the active shape drops straight down and settles at onceScoring, levelling and the drop are living flows — the judges verify them
from a screencast (video/webm) of the real game in motion, requested as an
artifact — so keep it running.When you are done, write .ololo/tetris-scoring-done.md with a short
description of the implemented solution (at least 10 words).3
Make it feel good
Open-ended — a panel of 7 judges splits a 200-pt budget
+2 200
pt budget
Open-ended — a panel of 7 judges splits a 200-pt budget
Add the polish that separates a demo from a game people want to keep
playing: a ghost showing where the shape will land, a hold slot to stash a
shape for later, a clean pause, and a board that plays well on a phone. You
decide when it is done; the judge panel scores the result.Scenarios:
Scenario: Ghost piece
When a shape is falling
Then a faint outline shows exactly where it would land if dropped now
And the outline tracks the shape as it moves and rotatesScenario: Hold
When the player presses the hold key (a common choice is C or Shift)
Then the active shape is stashed and swapped for the held one, if any
And holding is allowed only once until the next shape settlesScenario: Pause
When the player pauses
Then the game freezes — nothing falls — and resumes right where it leftScenario: On a phone
When the game opens on a narrow touch screen
Then the well fits without scrolling and can be played by touchThe ghost, hold, pause and touch play are living flows — the judges verify
them from a screencast (video/webm) of the real game in motion, requested
as an artifact — so keep it running.When you are done, write .ololo/tetris-polish-done.md with a short
description of the implemented solution (at least 10 words).