Top-down alien shooter · gpt-4o-mini-2024-07-18
Output generated Cost / run $0.0019 Runtime 32.6s
Prompt for this run
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.
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
METRICS
Transcript · 4 messages
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.
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`.
index.html (4842 bytes)Successfully wrote 4842 bytes to index.html
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!