oneshotlm
Compare all models on this prompt →

Top-down alien shooter · gpt-4o-mini-2024-07-18

Using the pre-provided phaser.min.js (global Phaser), build a top-down alien shooter: move with WASD, aim and fire at waves of advancing aliens, with health, score, and increasing difficulty. Use ONLY procedurally generated graphics, no external image or audio assets.

⛨ sandboxed Open in new tab ↗
transcript · 4 messages
user

Using the pre-provided phaser.min.js (global Phaser), build a top-down alien shooter: move with WASD, aim and fire at waves of advancing aliens, with health, score, and increasing difficulty. Use ONLY procedurally generated graphics, no external image or audio assets.

assistant

I'll create a self-contained HTML file for a top-down alien shooter game using Phaser, as per your specifications. The game will feature movement with WASD, aiming and shooting at waves of aliens, a health system, score tracking, and procedurally generated graphics. Here’s how the structure will be organized in the `index.html`: 1. Load `phaser.min.js`. 2. Create the game scene where we'll implement: - Player movement (WASD keys). - Alien spawning mechanics. - Health and score display. - Procedurally generated graphics for the player and aliens. Now, I will write the complete code into `index.html`. ```html <!DOCTYPE html> <html> <head> <title>Top-Down Alien Shooter</title> <style> body { margin: 0; overflow: hidden; background: #000; } canvas { display: block; } </style> <script src="phaser.min.js"></script> <script> const config = { type: Phaser.AUTO, width: 800, height: 600, physics: { default: 'arcade', arcade: { gravity: 0, debug: false } }, scene: { preload: preload, create: create, update: update } }; const game = new Phaser.Game(config); let player; let cursors; let bullets; let aliens; let score = 0; let scoreText; let health = 100; let healthText; let alienSpeed = 50; function preload() { this.load.image('bullet', generateBulletGraphics()); this.load.image('alien', generateAlienGraphics()); } function create() { player = this.physics.add.sprite(400, 300, 'bullet').setScale(0.5); player.setCollideWorldBounds(true); cursors = this.input.keyboard.createCursorKeys(); bullets = this.physics.add.group({ classType: Phaser.GameObjects.Image, defaultKey: 'bullet', maxSize: 10 }); aliens = this.physics.add.group(); scoreText = this.add.text(16, 16, 'Score: 0', { fontSize: '32px', fill: '#fff' }); healthText = this.add.text(16, 50, 'Health: 100', { fontSize: '32px', fill: '#fff' }); this.physics.add.overlap(bullets, aliens, hitAlien, null, this); spawnAliens(this); this.time.addEvent({ delay: 3000, // spawn aliens every 3 seconds callback: spawnAliens, callbackScope: this, loop: true }); } function update() { if (cursors.left.isDown) { player.body.setVelocityX(-160); } else if (cursors.right.isDown) { player.body.setVelocityX(160); } else { player.body.setVelocityX(0); } if (cursors.up.isDown) { player.body.setVelocityY(-160); } else if (cursors.down.isDown) { player.body.setVelocityY(160); } else { player.body.setVelocityY(0); } // Fire bullets if (this.input.activePointer.isDown) { fireBullet(this); } // Update health and score display healthText.setText('Health: ' + health); scoreText.setText('Score: ' + score); } function fireBullet(scene) { const bullet = bullets.get(); if (bullet) { bullet.setActive(true); bullet.setVisible(true); bullet.setPosition(player.x, player.y); scene.physics.velocityFromAngle(Phaser.Math.RND.angle() * 180, 400, bullet.body.velocity); bullet.body.setCollideWorldBounds(true); bullet.body.onWorldBounds = true; } } function hitAlien(bullet, alien) { bullet.setActive(false); bullet.setVisible(false); alien.setActive(false); alien.setVisible(false); score += 10; // Remove the alien and reset it alien.destroy(); } function spawnAliens(scene) { const x = Phaser.Math.Between(0, 800); const alien = aliens.create(x, 0, 'alien'); alien.setVelocityY(alienSpeed); if (alien.y > 600) { health -= 10; alien.destroy(); } } function generateBulletGraphics() { const canvas = document.createElement('canvas'); canvas.width = 10; canvas.height = 10; const context = canvas.getContext('2d'); context.fillStyle = 'yellow'; context.fillRect(0, 0, 10, 10); return canvas.toDataURL(); } function generateAlienGraphics() { const canvas = document.createElement('canvas'); canvas.width = 30; canvas.height = 30; const context = canvas.getContext('2d'); context.fillStyle = 'green'; context.fillRect(0, 0, 30, 30); return canvas.toDataURL(); } </script> </head> <body> </body> </html> ``` Now I'm writing this content to `index.html`.

write index.html (4842 bytes)
toolResult

Successfully wrote 4842 bytes to index.html

assistant

The `index.html` file has been successfully created with the top-down alien shooter game. You can run it in a web browser to play the game. If you have any further modifications or tasks, let me know!

TAKE IT TO CODE

A single self-contained HTML file — copy it and open in any browser, or reuse the prompt with your own pi-agent run.

RUN

modelgpt-4o-mini-2024-07-18
vendorOpenAI
harnesspi-agent
generated2026-08-01

EVALUATION

2/5 partial

Green squares (aliens?) drift down screen with overlapping text; no visible player ship, weapons, or WASD movement response.

Vision grade · anthropic/claude-sonnet-5

MEASUREMENTS

Raw readings from the capture, not a verdict — the grade above is the only judgement. Percentages are how much of the screen changed; the measure under-reports sparse motion on a dark background.

idle motion0.3%
on click0.8%
on drag1.1%
on wheel0.9%
on enter + space1.1%
on arrow keys1.0%
on w/a/s/d1.0%
frame spread8.1 / 255
console errors0
js errors none

METRICS

runtime32.6s
tokens in4.9k
tokens out2.4k
cached3.6k
cost / run$0.0019