• Updated 23 Oct, 19:41 UTC
  • Next run 24 Oct, 05:17 UTCNext 24 Oct 05:17
  • Last 7 days: 5 new models, 196 runs7 d: 5 models, 196 runs
Playable Breakout

LFM2.5-24B-A2BLiquidAI

Network offOpen alone (new tab)

Run details

Model
liquid/lfm-2.5-24b-a2b
Route
OpenRouter API, one user message
Served by
Liquid
Effort
the model's default
Limits
60 min · 8,192 output tokens (the model's limit)
Date
23 Oct 2026
Time
17 s
Size
2.8 kB
Tokens
87 in, 8,192 out (6,406 of them thinking)
List price
$0.006 at today's price ($0.05 in / $0.7 out per M)
Paid
$0.006
Result
Cut off before the file was finished

Raw files: output · meta.json

Exact prompt

Make a Breakout game I can play right now with the keyboard or the mouse. Give it several levels, a score and some juice.

It must be one complete, self-contained HTML file: inline all CSS and JavaScript, and make no network requests of any kind (no CDNs, web fonts or remote images). Reply with the file in a single ```html code block.

Source

2.8 kB 125 lines Raw

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Breakout</title>
<style>
body { margin: 0; background: #222; display: flex; justify-content: center; align-items: center; height: 100vh; }
canvas { border: 2px solid #fff; background: #000; }
</style>
</head>
<body>
<canvas id="gameCanvas" width="800" height="600"></canvas>
<script>
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');

// Game constants
const PADDLE_WIDTH = 100;
const PADDLE_HEIGHT = 15;
const PADDLE_Y = 560; // y position of paddle
const PADDLE_SPEED = 7;

const BALL_RADIUS = 8;
const BALL_SPEED_BASE = 4; // base speed per level

// Level configurations: rows of bricks and speed
const LEVELS = [
  { rows: 5, speed: 4 },
  { rows: 7, speed: 5 },
  { rows: 9, speed: 6 }
];

// Game state
let paddle = { x: 0, y: PADDLE_Y, width: PADDLE_WIDTH, height: PADDLE_HEIGHT };
let ball = { x: 0, y: PADDLE_Y - BALL_RADIUS, dx: 0, dy: 0 };
let bricks = [];
let juice = [];
let score = 0;
let level = 1;
let juiceCollected = 0;
let gameOver = false;

// Input state
let leftPressed = false;
let rightPressed = false;

// Mouse control
let mouseX = canvas.width / 2;

// Juice spawn timer
let juiceSpawnInterval;

function initGame() {
  paddle.x = (canvas.width - PADDLE_WIDTH) / 2;
  resetBall();
  createBricks();
  juice = [];
  score = 0;
  level = 1;
  juiceCollected = 0;
  gameOver = false;
}

function resetBall() {
  const speed = LEVELS[level - 1].speed;
  ball.x = canvas.width / 2;
  ball.y = PADDLE_Y - BALL_RADIUS;
  ball.dx = 0;
  ball.dy = -speed;
}

function createBricks() {
  bricks = [];
  const brickRows = LEVELS[level - 1].rows;
  const brickWidth = 60;
  const brickHeight = 20;
  const padding = 5;
  const offsetLeft = 20;
  const cols = 10;
  const brickY = 50;
  for (let r = 0; r < brickRows; r++) {
    for (let c = 0; c < cols; c++) {
      bricks.push({
        x: offsetLeft + c * (brickWidth + padding),
        y: brickY + r * (brickHeight + padding),
        width: brickWidth,
        height: brickHeight,
        status: 1
      });
    }
  }
}

// Spawn a juice power-up
function spawnJuice() {
  const juiceX = Math.random() * (canvas.width - 100) + 50;
  juice.push({
    x: juiceX,
    y: 40,
    radius: 10,
    color: '#ff8800'
  });
}

// Set up interval for juice spawning
juiceSpawnInterval = setInterval(spawnJuice, 10000);

// Collision detection helpers
function circleRectCollision(cx, cy, cr, rx, ry, rw, rh) {
  const closestX = Math.max(rx, Math.min(cx, rx + rw));
  const closestY = Math.max(ry, Math.min(cy, ry + rh));
  const dx = cx - closestX;
  const dy = cy - closestY;
  return (dx * dx + dy * dy) < (cr * cr);
}

// Main update loop
function update() {
  if (gameOver) return;

  // Paddle movement
  if (leftPressed) paddle.x -= PADDLE_SPEED;
  if (rightPressed) paddle.x += PADDLE_SPEED;
  // Clamp paddle
  if (paddle.x < 0) paddle.x

Compare with

LFM2.5-24B-A2B: other attempts