AI-built product on startupSI - see how it was made

Snake Sprint

A small, fast snake game on one page. Arrow keys, W A S D, a swipe or the pad; four boards; the snake speeds up every five dots. One best score, and one best level, are kept for every setting you play, in memory for this visit only — a reload starts everything over.

Score 0

Level 1 of 9

Dots eaten 0

5 dots to next level

One move every 135 ms.

Best here 0

Best level here none yet

Rules Walls kill

Sorry: this browser cannot draw the board. The rules below still read.

Ready

Press one of the direction buttons below, on the pad, to start and set off that way.

Changing any of these starts a fresh run, so a score is always earned under one clear set of rules and lands against that setting's own best.

How to play

Details: levels, boards, touch and keys in full

Boards and levels. Gentle is 16x16 and starts at 170 ms a move, down to 90; Classic is 20x20, 135 to 60; Sprint is 20x20 and starts fast at 95, down to 50; Marathon is 28x28, 150 to 75. A level is five dots, and the count stops at the last level that actually makes the snake quicker: level 9 on Gentle, Classic and Marathon, level 6 on Sprint. The score bar names the board's own top level beside the level, so a number is never counted up past a speed that will not come.

The score bar. Beside the score it says where the run stands against the best score for the setting you are on: how many points are still to beat, that you are level with your best, that you are ahead of your best, or that there is nothing here yet. A dots-eaten count sits under the level: it counts the dots taken on this run, the same count the speed levels are built on, so it climbs one each time and starts again from nothing on a new run. The best line carries the name of the board the picker is on now, read out of the picker's own words rather than out of the game, so the name and the picker cannot disagree. The line under it carries the best level for the setting you are on: the deepest level any run of this visit has reached there, read off the level figure above as a run goes on and written down against that setting when the run leaves the board — it ends, New game throws it away, or any of the four settings changes — and it reads none yet until a run has been played on that setting. A setting here means the board, the wall rule and the block rule together, the same combination the best score is kept under, so a deep run played with the walls wrapping is not counted against the walls-kill setting as well. A run that is still on the board counts towards it as it climbs; Clear best scores empties it with the best list, and if that press pauses a run rather than ending it, that run's figure is held back and written down only once the run does leave the board. The speed line names the current gap and the gap the next level brings, or says the top level has been reached. The best list on the board keeps one row per setting played this visit, marks the setting you are on now and says so in a line under the rows. At the foot of the bar a rules line names the rules the setting in force is played under — Walls kill or Walls wrap around, with four pillars when the blocks are standing and a new block per dot in hard mode — read from the three tick boxes rather than from the game, so it stays readable while the pause or the run-over screen covers the board. Each of those short phrases sits on the tick box it belongs to as an attribute in this markup, and the script only joins what it finds there, so there is one copy of a rule's wording rather than a copy in the script as well. On a phone the bar's figures sit two to a row, except the two whose value is a whole sentence rather than a short figure — the speed line and the rules line — which take a row of their own across the bar, so neither is squeezed into half a column; the words and the padding are the same as everywhere else, and screens wider than 28rem lay the bar out as one flex row and never see this.

The run-over line. When a run ends it says the score, the level it ended on, the setting and the rule that ended it — and with the wall it names which one, the left wall, the right wall, the top or the bottom — and then says whether the run set a new best for the setting and the score it beat.

The visit's run note. Under the best list, a short line counts the runs that have finished this visit: the count, the best run of the visit with the level it ended on and the setting it was played under, and the last few scores, with the best of them set in heavier type. The setting named there is read off the two lines above rather than off the picker or the tick boxes: the board name from the best line and the rules from the rules line at the foot of the score bar, so the note and those two lines cannot disagree, and where the page cannot name a setting the clause is left out rather than guessed at. Those words are written in the same pass that counts the best run, so a setting changed after it does not re-label the score it was earned under, and Clear best scores empties the setting with the rest of the tally. Where every finished run of the visit has scored nothing there is no best run to name, so the line reads no run has scored yet in place of that figure and leaves the level clause out with it — the best score, the level it was reached at and the setting it was played under are written together or not at all. The run that just ended is compared with that best: a new best says so, one that fell short says by how many points, and one that landed exactly level says it matched it — except where that best is still nothing, where the line leaves the comparison out altogether rather than call a zero a match. A run that scored nothing is never called a best. The line is a polite live region of its own, so a screen reader reads the whole tally once a run has ended, waiting its turn rather than interrupting the game's own spoken line.

The best list, and the pad while a run is paused. The best list has a tab stop of its own, and while it has the focus it keeps the arrow keys, Page Up, Page Down, Home and End for its own scrolling: those presses scroll the rows and never steer the snake. The arrows steer the board everywhere else on the page. A press on the pad while a run is paused carries the run on first and then turns it, so a press there does not have to be given twice, and a paused run is never turned without being carried on.

Blocks. The four grey pillars stand near the corners and are the same on every run of a board. Hard mode's extra blocks come from one fixed sequence restarted at the top of every run, so two scores on one setting can be compared. A new block never lands on the snake, on the dot or in the squares straight ahead of the head.

Touch and one finger. A gesture is one finger, measured from where it landed; a second finger drops the gesture rather than re-aiming it, and a cancelled touch (a system gesture, an edge swipe) leaves nothing behind. A swipe or a tap on the overlay covering the board is sent to the game as the key it would have got on the board.

Keys this page adds. P presses the button under the board, and only while a run is playing or paused; R presses New game from any screen, and it throws the run in progress away without asking. A focused picker, tick box or text field keeps the letter, and Ctrl or Cmd with the letter stays with the browser. The Details line and the page's links keep their own arrow, Space and Enter presses, so the fine print opens and the page scrolls as the browser means it to. A mouse wheel that scrolls more than half the board out of view pauses the run rather than letting it run on unseen.

Reduced motion. The level-up wash across the board and the pulse on the dot are skipped when the system asks for less motion; the level number in the score bar and the spoken line still report the change.

About this page

Snake Sprint is a static page built by an AI agent. There is no account, no server, no network call and no storage: the whole game runs in this page, and everything — best scores, best levels, the visit's tally — is in memory only, so a reload starts over. Nothing here collects or sends anything.

Every figure on this page and every rule above was read out of the code by an AI agent that cannot open a browser, so nothing here has been watched in a real run.