User prompt
Add solar system in background BIG
User prompt
add a explosion effect when destroyed and make asteroid can be destroyed
User prompt
Please fix the bug: 'ReferenceError: bullets is not defined' in or related to this line: 'for (var i = bullets.length - 1; i >= 0; i--) {' Line Number: 535
User prompt
Please fix the bug: 'TypeError: Graphics is not a constructor' in or related to this line: 'var healthBarBackground = new Graphics();' Line Number: 59
User prompt
Add hp bar to asteroid, and add a explosion effect when destroyed
User prompt
Make asset rotate like the bullet rotation
User prompt
So many bullets, make click manual
User prompt
Please fix the bug: 'ReferenceError: Bullet is not defined' in or related to this line: 'var bullet = new Bullet();' Line Number: 201
User prompt
Add a shoot button And make the game HARDER!!!!!
Code edit (1 edits merged)
Please save this source code
User prompt
AsteVoid: Space Survival
Initial prompt
Astevoid a game of a ship dodging asteroids, press left to turn left, and right to turn right. hold boost to move the ship in rotation. scenario: solar system.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Asteroid = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 0.7 + 0.3; // Random size between 0.3 and 1.0 var asteroidGraphics = self.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5, scaleX: size, scaleY: size }); // Random asteroid color variations (brownish) var colorVariation = Math.floor(Math.random() * 3); if (colorVariation === 0) { asteroidGraphics.tint = 0x8B4513; // Standard brown } else if (colorVariation === 1) { asteroidGraphics.tint = 0xA0522D; // Lighter brown } else { asteroidGraphics.tint = 0x704214; // Darker brown } // Set properties self.radius = 60 * size; // Collision radius self.speed = Math.random() * 3 + 1; // Random speed self.rotationSpeed = (Math.random() - 0.5) * 0.05; // Random rotation self.vx = Math.random() * 2 - 1; // Random x velocity self.vy = Math.random() * 2 - 1; // Random y velocity // Normalize velocity vector var length = Math.sqrt(self.vx * self.vx + self.vy * self.vy); self.vx /= length; self.vy /= length; // Scale velocity by speed self.vx *= self.speed; self.vy *= self.speed; self.update = function () { // Move asteroid self.x += self.vx; self.y += self.vy; // Rotate asteroid self.rotation += self.rotationSpeed; // Check for collision with bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; var dx = self.x - bullet.x; var dy = self.y - bullet.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < self.radius) { // Play explosion sound LK.getSound('explosion').play(); // Flash screen LK.effects.flashScreen(0xff0000, 500); // Destroy asteroid and bullet self.destroy(); bullet.destroy(); bullets.splice(i, 1); return; } } // Wrap around screen if (self.x < -self.radius) { self.x = 2048 + self.radius; } if (self.x > 2048 + self.radius) { self.x = -self.radius; } if (self.y < -self.radius) { self.y = 2732 + self.radius; } if (self.y > 2732 + self.radius) { self.y = -self.radius; } }; return self; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.vx = 0; self.vy = 0; self.update = function () { self.x += self.vx; self.y += self.vy; // Check if bullet is out of bounds and destroy it if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) { self.destroy(); } }; return self; }); var ControlButton = Container.expand(function (type) { var self = Container.call(this); // Button properties self.type = type; // 'left', 'right', or 'boost' var color = type === 'boost' ? 0xff3300 : 0x3366ff; var width = type === 'boost' ? 200 : 150; var height = 150; // Create button shape var buttonShape = LK.getAsset('ship', { anchorX: 0.5, anchorY: 0.5, width: width, height: height }); buttonShape.tint = color; buttonShape.alpha = 0.5; // Add button to container self.addChild(buttonShape); // Add text label var label = new Text2(type.toUpperCase(), { size: 40, fill: 0xFFFFFF }); label.anchor.set(0.5, 0.5); self.addChild(label); // Button state self.isPressed = false; // Handle button press self.down = function (x, y, obj) { self.isPressed = true; buttonShape.alpha = 0.8; if (self.type === 'shoot') { ship.shoot(); } }; // Handle button release self.up = function (x, y, obj) { self.isPressed = false; buttonShape.alpha = 0.5; }; return self; }); var Ship = Container.expand(function () { var self = Container.call(this); // Ship graphics var shipGraphics = self.attachAsset('ship', { anchorX: 0.5, anchorY: 0.5 }); // Make ship triangular shipGraphics.width = 60; shipGraphics.height = 80; // Boost flame var boostFlame = self.attachAsset('boostFlame', { anchorX: 0.5, anchorY: 0, x: 0, y: 40, // Position at bottom of ship alpha: 0 // Hidden initially }); // Ship properties self.vx = 0; self.vy = 0; self.speed = 0; self.maxSpeed = 7; self.rotationSpeed = 0.08; // Radians per tick self.acceleration = 0.1; self.friction = 0.98; self.boosting = false; self.radius = 30; // Collision radius self.startBoosting = function () { self.boosting = true; boostFlame.alpha = 1; LK.getSound('boost').play(); }; self.stopBoosting = function () { self.boosting = false; boostFlame.alpha = 0; }; self.rotateLeft = function () { self.rotation -= self.rotationSpeed; LK.getSound('rotate').play(); }; self.rotateRight = function () { self.rotation += self.rotationSpeed; LK.getSound('rotate').play(); }; self.update = function () { // Apply boost if active if (self.boosting) { // Calculate direction from rotation self.vx += Math.sin(self.rotation) * self.acceleration; self.vy -= Math.cos(self.rotation) * self.acceleration; // Animate flame boostFlame.alpha = 0.6 + Math.random() * 0.4; boostFlame.scaleX = 0.8 + Math.random() * 0.4; boostFlame.scaleY = 0.8 + Math.random() * 0.4; } // Apply friction self.vx *= self.friction; self.vy *= self.friction; // Calculate speed self.speed = Math.sqrt(self.vx * self.vx + self.vy * self.vy); // Cap speed if (self.speed > self.maxSpeed) { self.vx = self.vx / self.speed * self.maxSpeed; self.vy = self.vy / self.speed * self.maxSpeed; self.speed = self.maxSpeed; } // Move ship self.x += self.vx; self.y += self.vy; // Wrap around screen if (self.x < 0) { self.x = 2048; } if (self.x > 2048) { self.x = 0; } if (self.y < 0) { self.y = 2732; } if (self.y > 2732) { self.y = 0; } }; self.shoot = function () { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullet.vx = Math.sin(self.rotation) * 10; bullet.vy = -Math.cos(self.rotation) * 10; bullets.push(bullet); game.addChild(bullet); }; return self; }); var Star = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 0.5 + 0.5; var brightness = Math.floor(Math.random() * 230) + 25; // Random brightness var color = brightness << 16 | brightness << 8 | brightness; // Grayscale color var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5, scaleX: size, scaleY: size, alpha: Math.random() * 0.7 + 0.3 }); starGraphics.tint = color; // Twinkle effect self.twinkleSpeed = Math.random() * 0.02 + 0.01; self.twinkleAmount = Math.random() * 0.3 + 0.1; self.twinkleOffset = Math.random() * Math.PI * 2; self.update = function () { // Make stars twinkle starGraphics.alpha = 0.4 + Math.sin(LK.ticks * self.twinkleSpeed + self.twinkleOffset) * self.twinkleAmount; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000022 }); /**** * Game Code ****/ // Game variables var ship; var bullets = []; // Array to track bullets var asteroids = []; var stars = []; var gameActive = true; var difficultyTimer; var spawnTimer; var maxAsteroids = 10; var score = 0; var highScore = storage.highScore || 0; var lastSpawnTime = 0; var spawnInterval = 1500; // Milliseconds between asteroid spawns var difficultyInterval = 10000; // Milliseconds between difficulty increases var controlButtons = {}; // Score text var scoreTxt = new Text2("SCORE: 0", { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // High score text var highScoreTxt = new Text2("BEST: " + highScore, { size: 40, fill: 0xAAAAAA }); highScoreTxt.anchor.set(0.5, 0); highScoreTxt.y = 70; // Position below score text LK.gui.top.addChild(highScoreTxt); // Create stars in background function createStars() { // Add a large solar system image as the background var solarSystem = LK.getAsset('Solar_system', { anchorX: 0.5, anchorY: 0.5, scaleX: 20, // Scale to make it big scaleY: 20, // Scale to make it big x: 2048 / 2, // Center horizontally y: 2732 / 2 // Center vertically }); game.addChild(solarSystem); for (var i = 0; i < 100; i++) { var star = new Star(); star.x = Math.random() * 2048; star.y = Math.random() * 2732; stars.push(star); game.addChild(star); } } // Create player ship function createShip() { ship = new Ship(); ship.x = 2048 / 2; ship.y = 2732 / 2; game.addChild(ship); } // Create control buttons function createControls() { // Left rotation button controlButtons.left = new ControlButton('left'); controlButtons.left.x = 150; controlButtons.left.y = 2732 - 150; game.addChild(controlButtons.left); // Right rotation button controlButtons.right = new ControlButton('right'); controlButtons.right.x = 350; controlButtons.right.y = 2732 - 150; game.addChild(controlButtons.right); // Boost button controlButtons.boost = new ControlButton('boost'); controlButtons.boost.x = 2048 - 150; controlButtons.boost.y = 2732 - 150; game.addChild(controlButtons.boost); // Shoot button controlButtons.shoot = new ControlButton('shoot'); controlButtons.shoot.x = 2048 - 350; controlButtons.shoot.y = 2732 - 150; game.addChild(controlButtons.shoot); } // Spawn a new asteroid function spawnAsteroid() { if (asteroids.length >= maxAsteroids) { return; } var asteroid = new Asteroid(); // Spawn asteroid off-screen var side = Math.floor(Math.random() * 4); switch (side) { case 0: // Top asteroid.x = Math.random() * 2048; asteroid.y = -asteroid.radius; asteroid.vy = Math.abs(asteroid.vy); break; case 1: // Right asteroid.x = 2048 + asteroid.radius; asteroid.y = Math.random() * 2732; asteroid.vx = -Math.abs(asteroid.vx); break; case 2: // Bottom asteroid.x = Math.random() * 2048; asteroid.y = 2732 + asteroid.radius; asteroid.vy = -Math.abs(asteroid.vy); break; case 3: // Left asteroid.x = -asteroid.radius; asteroid.y = Math.random() * 2732; asteroid.vx = Math.abs(asteroid.vx); break; } asteroids.push(asteroid); game.addChild(asteroid); } // Check for collisions between ship and asteroids function checkCollisions() { if (!ship) { return; } for (var i = 0; i < asteroids.length; i++) { var asteroid = asteroids[i]; // Calculate distance between ship and asteroid var dx = ship.x - asteroid.x; var dy = ship.y - asteroid.y; var distance = Math.sqrt(dx * dx + dy * dy); // Check for collision if (distance < ship.radius + asteroid.radius) { gameOver(); return; } } } // Increase game difficulty function increaseDifficulty() { maxAsteroids += 3; // Increase more asteroids spawnInterval = Math.max(200, spawnInterval - 150); // Faster spawn rate // Increase max speed of ship slightly if (ship) { ship.maxSpeed = Math.min(15, ship.maxSpeed + 0.3); // Faster ship } } // Game over function gameOver() { gameActive = false; // Update high score if (score > highScore) { highScore = score; storage.highScore = highScore; highScoreTxt.setText("BEST: " + highScore); } // Play explosion sound LK.getSound('explosion').play(); // Flash screen LK.effects.flashScreen(0xff0000, 800); // Show game over LK.showGameOver(); } // Initialize game function initGame() { // Reset game state gameActive = true; score = 0; maxAsteroids = 10; spawnInterval = 1500; lastSpawnTime = 0; // Update score display scoreTxt.setText("SCORE: 0"); highScoreTxt.setText("BEST: " + highScore); // Clear existing objects for (var i = 0; i < asteroids.length; i++) { asteroids[i].destroy(); } asteroids = []; // Create game elements createStars(); createShip(); createControls(); // Start difficulty timer difficultyTimer = LK.setInterval(function () { increaseDifficulty(); }, difficultyInterval); // Play background music LK.playMusic('spaceAmbience', { fade: { start: 0, end: 0.5, duration: 1000 } }); } // Handle input game.down = function (x, y, obj) { // Check if we're touching a control button directly // No action needed here as the buttons handle their own press states }; game.up = function (x, y, obj) { // No action needed here as the buttons handle their own release states }; // Main game update loop game.update = function () { if (!gameActive) { return; } // Update score (based on survival time) if (LK.ticks % 60 === 0) { // Once per second score++; scoreTxt.setText("SCORE: " + score); } // Check control buttons if (controlButtons.left && controlButtons.left.isPressed) { ship.rotateLeft(); } if (controlButtons.right && controlButtons.right.isPressed) { ship.rotateRight(); } if (controlButtons.boost && controlButtons.boost.isPressed) { ship.startBoosting(); } else if (ship) { ship.stopBoosting(); } // Shoot bullets // Shooting is now manual, handled by button press events // Spawn new asteroids on a timer var currentTime = Date.now(); if (currentTime - lastSpawnTime > spawnInterval) { spawnAsteroid(); lastSpawnTime = currentTime; } // Check for collisions checkCollisions(); }; // Initialize game initGame();
===================================================================
--- original.js
+++ change.js
@@ -299,8 +299,21 @@
highScoreTxt.y = 70; // Position below score text
LK.gui.top.addChild(highScoreTxt);
// Create stars in background
function createStars() {
+ // Add a large solar system image as the background
+ var solarSystem = LK.getAsset('Solar_system', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 20,
+ // Scale to make it big
+ scaleY: 20,
+ // Scale to make it big
+ x: 2048 / 2,
+ // Center horizontally
+ y: 2732 / 2 // Center vertically
+ });
+ game.addChild(solarSystem);
for (var i = 0; i < 100; i++) {
var star = new Star();
star.x = Math.random() * 2048;
star.y = Math.random() * 2732;
Spaceship. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Asteroid. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Spaceship bullet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Solar system. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows