/* ---------- the family shell ---------- Part 3 and part 4 of the site standard: a bar with the brand on it, a footer that names the family and carries this site's own source. The game fills what is left, so the page is a site with a game in it rather than a canvas pretending to be a page. */ html, body { height: 100%; } body { display: flex; flex-direction: column; background: #12070a; } header.top { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 9px 18px; flex: 0 0 auto; background: rgba(12, 5, 4, .92); border-bottom: 1px solid rgba(255, 207, 107, .18); position: relative; z-index: 20; } header.top .brand { display: flex; align-items: center; gap: 10px; text-decoration: none; color: #ffe9c9; } header.top .brand .mark { color: var(--gold); display: flex; } header.top .brand b { display: block; font-size: 14px; letter-spacing: .06em; } header.top .brand small { display: block; font-size: 10px; letter-spacing: .16em; opacity: .6; } header.top nav { display: flex; gap: 16px; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; } header.top nav a { color: #ffe9c9; text-decoration: none; opacity: .72; } header.top nav a:hover { opacity: 1; color: var(--gold); } main#play { position: relative; flex: 1 1 auto; min-height: 0; } main#play #app { position: absolute; inset: 0; } footer.site-footer { flex: 0 0 auto; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 18px; padding: 8px 18px; font-size: 10.5px; letter-spacing: .1em; background: rgba(12, 5, 4, .92); border-top: 1px solid rgba(255, 207, 107, .18); position: relative; z-index: 20; } footer.site-footer a { color: #ffe9c9; text-decoration: none; opacity: .78; } footer.site-footer a:hover { opacity: 1; color: var(--gold); } footer.site-footer .footer-brand { display: flex; align-items: center; gap: 8px; color: var(--gold); } footer.site-footer .footer-brand b { color: #ffe9c9; } footer.site-footer .footer-copy { opacity: .55; margin: 0; } footer.site-footer p { margin: 0; } @media (max-width: 760px) { header.top nav { display: none; } footer.site-footer { justify-content: center; text-align: center; } }
redqueen-vs-sharksnodejavascript.com
Queens
0
Score · best 0
Sharks left · level 1/10
♪
Music 50%
Move: W/S or ↑/↓  ·  Shoot: click/space  ·  Pause: P  ·  Eye = 100  ·  eye while its laser is lit = 300  ·  never stand in a shark's beam
EYE SHOT ×3
PAUSEDpress P to carry on

Every shark that kills you had to look at you first

Red Queen vs. Laser Sharks · a Three.js arcade game, ten levels, one shared board

Fairness is a design decision, not a difficulty slider. So no shark here can point a laser at you without turning its head to find you first, and a head turns slowly and not very far. Every death is a shot you could have seen coming — which is also why the fair shot is the one worth three hundred.

W / Swalk up and down the dock Mouseaim, click (or space) to fire Surfacesharks stay under, only a fin showing. Their head comes up for a few seconds — that is your shot. Eyeshoot a shark in the eye — 100 points, 300 while its laser is glowing Beamthe laser is bolted to the head, so it points where the head points. Never stand in the red line. Ten levelslevel one is gentle. They get faster, they stay up longer, and fewer of them miss.

LEVEL 1 CLEAR

+500
+1 queen restored

GAME OVER

The sharks win this one
0
Final score
A
A
A
type 3 letters · backspace to fix · enter to submit

Privacy

three letters and a score · nothing else

The honest summary: this game stores three initials, a score and the moment it was scored — and only if you choose to enter initials at all. No account, no email, no cookie, no tracking script, and nothing loaded from another origin.

One value stays in your browser: your best score on this device. Clearing site data removes it.

No analytics script loads in this page, no advertising, no third-party script of any kind — the game engine is served from this site. The server keeps a request log, as every web server does, and it is used to keep the site working, not to build a record of who plays.

This is one of the nodejavascript.com family, built and run by George Fielder in Hamilton, Ontario, Canada. The code is public at github.com/nodejavascript/redqueen-vs-sharks, so every claim here can be checked against it.

Removing a score: because a row carries nothing that identifies you, it cannot be found by looking for you — write to [email protected] with the initials and the score and the row is deleted.

HIGH SCORES

Everyone, everywhere, same board
Nobody yet. Be the first queen.
live · updates every 1.5s · 0 on the board