User prompt
If the rocks go thorough you you lose health and you die
User prompt
Make a health bar on the top
User prompt
If the rocks is at your home base you lose health and if you die your score restarts
User prompt
When you touch the rocks you donβt die but you get score
User prompt
Make it so the spaceship can shoot the rocks and get score
User prompt
When the ship spawns make a home base
User prompt
Make some arrow kets
Code edit (1 edits merged)
Please save this source code
User prompt
Asteroid Mining Magnate
User prompt
Please continue polishing my design document.
Initial prompt
Shooting game
/**** * 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 asteroidGraphics = self.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.update = function () { self.y += self.speed; }; return self; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -10; self.update = function () { self.y += self.speed; }; return self; }); var EquipIcon = Container.expand(function () { var self = Container.call(this); var equipGraphics = self.attachAsset('shopIcon', { anchorX: 0.5, anchorY: 0.5, tint: 0x00ff00 // Set color to green }); self.down = function (x, y, obj) { console.log("Equip icon clicked. Showing gun selection box."); var gunSelectionBox = new GunSelectionBox(); game.addChild(gunSelectionBox); }; return self; }); var GunSelectionBox = Container.expand(function () { var self = Container.call(this); var boxGraphics = self.attachAsset('shopIcon', { anchorX: 0.5, anchorY: 0.5, tint: 0x333333 // Dark gray for the box }); self.x = 2048 / 2; self.y = 2732 / 2; self.width = 600; self.height = 800; var guns = ['Pistol', 'Rifle', 'Shotgun', 'Sniper']; var startY = -150; guns.forEach(function (gun, index) { var gunText = new Text2(gun, { size: 80, fill: 0xFFFFFF }); gunText.anchor.set(0.5, 0.5); gunText.x = 0; gunText.y = startY + index * 100; gunText.down = function (x, y, obj) { selectedGun = { name: gun }; console.log(gun + " selected!"); self.destroy(); // Close the selection box after selecting a gun }; self.addChild(gunText); }); return self; }); var HealthBar = Container.expand(function () { var self = Container.call(this); var barBackground = self.addChild(new Container()); var barForeground = self.addChild(new Container()); var backgroundGraphics = barBackground.attachAsset('healthBarBackground', { anchorX: 0, anchorY: 0, x: -150, y: -25, width: 300, height: 50 }); var foregroundGraphics = barForeground.attachAsset('healthBarForeground', { anchorX: 0, anchorY: 0, x: -150, y: -25, width: 300, height: 50 }); self.updateHealth = function (health) { barForeground.scaleX = health / 3; // Assuming max health is 3 if (health < 3) { foregroundGraphics.tint = 0xff0000; // Change color to red when health decreases } else { foregroundGraphics.tint = 0x61d695; // Reset color to original when health is full } }; return self; }); var HomeBase = Container.expand(function () { var self = Container.call(this); var baseGraphics = self.attachAsset('homeBase', { anchorX: 0.5, anchorY: 0.5 }); return self; }); var Mineral = Container.expand(function () { var self = Container.call(this); var mineralGraphics = self.attachAsset('mineral', { anchorX: 0.5, anchorY: 0.5 }); return self; }); var ShopIcon = Container.expand(function () { var self = Container.call(this); var shopGraphics = self.attachAsset('shopIcon', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { console.log("Shop icon clicked. Open shop to buy more guns."); var shopBox = new Container(); shopBox.x = 2048 / 2; shopBox.y = 2732 / 2; shopBox.width = 600; shopBox.height = 800; shopBox.attachAsset('shopIcon', { anchorX: 0.5, anchorY: 0.5 }); game.addChild(shopBox); var shopMenu = new Container(); var items = [{ name: 'Shotgun', price: 10 }, { name: 'Laser Gun', price: 20 }, { name: 'Rocket Launcher', price: 30 }, { name: 'Plasma Rifle', price: 40 }, { name: 'Sniper Cannon', price: 50 }]; var startY = 2732 / 2 - 100; items.forEach(function (item, index) { var itemText = new Text2('Buy ' + item.name + ': ' + item.price + ' Score', { size: 80, fill: 0xFFFFFF }); itemText.anchor.set(0.5, 0.5); itemText.x = 2048 / 2; itemText.y = startY + index * 100; itemText.down = function (x, y, obj) { if (score >= item.price) { score -= item.price; scoreTxt.setText('Score: ' + score); console.log(item.name + " purchased!"); shopMenu.destroy(); // Apply score multiplier based on the purchased gun if (item.name === 'Shotgun') { scoreMultiplier = 2; } else if (item.name === 'Laser Gun') { scoreMultiplier = 3; } else if (item.name === 'Rocket Launcher') { scoreMultiplier = 4; } } else { console.log("Not enough score to buy " + item.name + "."); } }; shopMenu.addChild(itemText); }); game.addChild(shopMenu); }; return self; }); var Spaceship = Container.expand(function () { var self = Container.call(this); var spaceshipGraphics = self.attachAsset('spaceship', { anchorX: 0.5, anchorY: 0.5 }); self.energy = 100; self.update = function () { // Update logic for spaceship }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Initialize assets used in this game. Scale them according to what is needed for the game. game.setBackgroundColor(0x000000); var homeBase = game.addChild(new HomeBase()); homeBase.x = 2048 / 2; homeBase.y = 2732 - 300; var spaceship = game.addChild(new Spaceship()); spaceship.x = 2048 / 2; spaceship.y = 2732 - 150; var asteroids = []; var minerals = []; var bullets = []; var score = 0; var energy = 100; var scoreMultiplier = 1; // Default score multiplier var selectedGun = null; // Initialize selectedGun variable var health = 3; // Initialize health for the spaceship var healthBar = game.addChild(new HealthBar()); healthBar.x = 2048 / 2; healthBar.y = 50; healthBar.updateHealth(health); var scoreTxt = new Text2('Score: 0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var energyTxt = new Text2('Energy: 100', { size: 100, fill: 0xFFFFFF }); var shopIcon = game.addChild(new ShopIcon()); shopIcon.x = 2048 - 100; // Position shop icon at the bottom-right corner shopIcon.y = 2732 - 100; var equipIcon = game.addChild(new EquipIcon()); equipIcon.x = 2048 - 500; // Move equip icon further to the left equipIcon.y = 2732 - 200; // Move equip icon up energyTxt.anchor.set(0.5, 0); LK.gui.topRight.addChild(energyTxt); function handleMove(x, y, obj) { if (dragNode) { dragNode.x = x; dragNode.y = y; } } game.move = handleMove; game.down = function (x, y, obj) { dragNode = spaceship; handleMove(x, y, obj); var newBullet = new Bullet(); newBullet.x = spaceship.x; newBullet.y = spaceship.y - 50; bullets.push(newBullet); game.addChild(newBullet); }; game.up = function (x, y, obj) { dragNode = null; }; game.update = function () { if (LK.ticks % 60 == 0) { var newAsteroid = new Asteroid(); newAsteroid.x = Math.random() * 2048; newAsteroid.y = -50; asteroids.push(newAsteroid); game.addChild(newAsteroid); } for (var i = asteroids.length - 1; i >= 0; i--) { var asteroid = asteroids[i]; if (asteroid.y > 2732) { if (asteroid.intersects(homeBase)) { health -= 1; // Decrease health when asteroid reaches home base healthBar.updateHealth(health); if (health <= 0) { LK.showGameOver(); // Show game over screen and reset game state return; // Exit the update loop } } asteroid.destroy(); asteroids.splice(i, 1); continue; } if (spaceship.intersects(asteroid)) { health -= 1; // Decrease health when asteroid passes through spaceship healthBar.updateHealth(health); if (health <= 0) { LK.showGameOver(); // Show game over screen and reset game state return; // Exit the update loop } asteroid.destroy(); asteroids.splice(i, 1); continue; } } for (var k = bullets.length - 1; k >= 0; k--) { var bullet = bullets[k]; if (bullet.y < -50) { bullet.destroy(); bullets.splice(k, 1); continue; } for (var l = asteroids.length - 1; l >= 0; l--) { var asteroid = asteroids[l]; if (bullet.intersects(asteroid)) { score += 5 * scoreMultiplier; scoreTxt.setText('Score: ' + score); bullet.destroy(); bullets.splice(k, 1); asteroid.destroy(); asteroids.splice(l, 1); if (asteroids.length === 0) { // Advance to level 2 for (var m = 0; m < 10; m++) { // Increase number of asteroids var newAsteroid = new Asteroid(); newAsteroid.x = Math.random() * 2048; newAsteroid.y = -50; newAsteroid.speed = 5; // Increase speed for level 2 asteroids.push(newAsteroid); game.addChild(newAsteroid); } } break; } } } if (LK.ticks % 120 == 0) { var newMineral = new Mineral(); newMineral.x = Math.random() * 2048; newMineral.y = -50; minerals.push(newMineral); game.addChild(newMineral); } for (var j = minerals.length - 1; j >= 0; j--) { var mineral = minerals[j]; if (mineral.y > 2732) { mineral.destroy(); minerals.splice(j, 1); continue; } if (spaceship.intersects(mineral)) { score += 10; scoreTxt.setText('Score: ' + score); mineral.destroy(); minerals.splice(j, 1); } } }; LK.playMusic('bgMusic');
/****
* 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 asteroidGraphics = self.attachAsset('asteroid', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -10;
self.update = function () {
self.y += self.speed;
};
return self;
});
var EquipIcon = Container.expand(function () {
var self = Container.call(this);
var equipGraphics = self.attachAsset('shopIcon', {
anchorX: 0.5,
anchorY: 0.5,
tint: 0x00ff00 // Set color to green
});
self.down = function (x, y, obj) {
console.log("Equip icon clicked. Showing gun selection box.");
var gunSelectionBox = new GunSelectionBox();
game.addChild(gunSelectionBox);
};
return self;
});
var GunSelectionBox = Container.expand(function () {
var self = Container.call(this);
var boxGraphics = self.attachAsset('shopIcon', {
anchorX: 0.5,
anchorY: 0.5,
tint: 0x333333 // Dark gray for the box
});
self.x = 2048 / 2;
self.y = 2732 / 2;
self.width = 600;
self.height = 800;
var guns = ['Pistol', 'Rifle', 'Shotgun', 'Sniper'];
var startY = -150;
guns.forEach(function (gun, index) {
var gunText = new Text2(gun, {
size: 80,
fill: 0xFFFFFF
});
gunText.anchor.set(0.5, 0.5);
gunText.x = 0;
gunText.y = startY + index * 100;
gunText.down = function (x, y, obj) {
selectedGun = {
name: gun
};
console.log(gun + " selected!");
self.destroy(); // Close the selection box after selecting a gun
};
self.addChild(gunText);
});
return self;
});
var HealthBar = Container.expand(function () {
var self = Container.call(this);
var barBackground = self.addChild(new Container());
var barForeground = self.addChild(new Container());
var backgroundGraphics = barBackground.attachAsset('healthBarBackground', {
anchorX: 0,
anchorY: 0,
x: -150,
y: -25,
width: 300,
height: 50
});
var foregroundGraphics = barForeground.attachAsset('healthBarForeground', {
anchorX: 0,
anchorY: 0,
x: -150,
y: -25,
width: 300,
height: 50
});
self.updateHealth = function (health) {
barForeground.scaleX = health / 3; // Assuming max health is 3
if (health < 3) {
foregroundGraphics.tint = 0xff0000; // Change color to red when health decreases
} else {
foregroundGraphics.tint = 0x61d695; // Reset color to original when health is full
}
};
return self;
});
var HomeBase = Container.expand(function () {
var self = Container.call(this);
var baseGraphics = self.attachAsset('homeBase', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Mineral = Container.expand(function () {
var self = Container.call(this);
var mineralGraphics = self.attachAsset('mineral', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var ShopIcon = Container.expand(function () {
var self = Container.call(this);
var shopGraphics = self.attachAsset('shopIcon', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
console.log("Shop icon clicked. Open shop to buy more guns.");
var shopBox = new Container();
shopBox.x = 2048 / 2;
shopBox.y = 2732 / 2;
shopBox.width = 600;
shopBox.height = 800;
shopBox.attachAsset('shopIcon', {
anchorX: 0.5,
anchorY: 0.5
});
game.addChild(shopBox);
var shopMenu = new Container();
var items = [{
name: 'Shotgun',
price: 10
}, {
name: 'Laser Gun',
price: 20
}, {
name: 'Rocket Launcher',
price: 30
}, {
name: 'Plasma Rifle',
price: 40
}, {
name: 'Sniper Cannon',
price: 50
}];
var startY = 2732 / 2 - 100;
items.forEach(function (item, index) {
var itemText = new Text2('Buy ' + item.name + ': ' + item.price + ' Score', {
size: 80,
fill: 0xFFFFFF
});
itemText.anchor.set(0.5, 0.5);
itemText.x = 2048 / 2;
itemText.y = startY + index * 100;
itemText.down = function (x, y, obj) {
if (score >= item.price) {
score -= item.price;
scoreTxt.setText('Score: ' + score);
console.log(item.name + " purchased!");
shopMenu.destroy();
// Apply score multiplier based on the purchased gun
if (item.name === 'Shotgun') {
scoreMultiplier = 2;
} else if (item.name === 'Laser Gun') {
scoreMultiplier = 3;
} else if (item.name === 'Rocket Launcher') {
scoreMultiplier = 4;
}
} else {
console.log("Not enough score to buy " + item.name + ".");
}
};
shopMenu.addChild(itemText);
});
game.addChild(shopMenu);
};
return self;
});
var Spaceship = Container.expand(function () {
var self = Container.call(this);
var spaceshipGraphics = self.attachAsset('spaceship', {
anchorX: 0.5,
anchorY: 0.5
});
self.energy = 100;
self.update = function () {
// Update logic for spaceship
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Initialize assets used in this game. Scale them according to what is needed for the game.
game.setBackgroundColor(0x000000);
var homeBase = game.addChild(new HomeBase());
homeBase.x = 2048 / 2;
homeBase.y = 2732 - 300;
var spaceship = game.addChild(new Spaceship());
spaceship.x = 2048 / 2;
spaceship.y = 2732 - 150;
var asteroids = [];
var minerals = [];
var bullets = [];
var score = 0;
var energy = 100;
var scoreMultiplier = 1; // Default score multiplier
var selectedGun = null; // Initialize selectedGun variable
var health = 3; // Initialize health for the spaceship
var healthBar = game.addChild(new HealthBar());
healthBar.x = 2048 / 2;
healthBar.y = 50;
healthBar.updateHealth(health);
var scoreTxt = new Text2('Score: 0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var energyTxt = new Text2('Energy: 100', {
size: 100,
fill: 0xFFFFFF
});
var shopIcon = game.addChild(new ShopIcon());
shopIcon.x = 2048 - 100; // Position shop icon at the bottom-right corner
shopIcon.y = 2732 - 100;
var equipIcon = game.addChild(new EquipIcon());
equipIcon.x = 2048 - 500; // Move equip icon further to the left
equipIcon.y = 2732 - 200; // Move equip icon up
energyTxt.anchor.set(0.5, 0);
LK.gui.topRight.addChild(energyTxt);
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.y = y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = spaceship;
handleMove(x, y, obj);
var newBullet = new Bullet();
newBullet.x = spaceship.x;
newBullet.y = spaceship.y - 50;
bullets.push(newBullet);
game.addChild(newBullet);
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
if (LK.ticks % 60 == 0) {
var newAsteroid = new Asteroid();
newAsteroid.x = Math.random() * 2048;
newAsteroid.y = -50;
asteroids.push(newAsteroid);
game.addChild(newAsteroid);
}
for (var i = asteroids.length - 1; i >= 0; i--) {
var asteroid = asteroids[i];
if (asteroid.y > 2732) {
if (asteroid.intersects(homeBase)) {
health -= 1; // Decrease health when asteroid reaches home base
healthBar.updateHealth(health);
if (health <= 0) {
LK.showGameOver(); // Show game over screen and reset game state
return; // Exit the update loop
}
}
asteroid.destroy();
asteroids.splice(i, 1);
continue;
}
if (spaceship.intersects(asteroid)) {
health -= 1; // Decrease health when asteroid passes through spaceship
healthBar.updateHealth(health);
if (health <= 0) {
LK.showGameOver(); // Show game over screen and reset game state
return; // Exit the update loop
}
asteroid.destroy();
asteroids.splice(i, 1);
continue;
}
}
for (var k = bullets.length - 1; k >= 0; k--) {
var bullet = bullets[k];
if (bullet.y < -50) {
bullet.destroy();
bullets.splice(k, 1);
continue;
}
for (var l = asteroids.length - 1; l >= 0; l--) {
var asteroid = asteroids[l];
if (bullet.intersects(asteroid)) {
score += 5 * scoreMultiplier;
scoreTxt.setText('Score: ' + score);
bullet.destroy();
bullets.splice(k, 1);
asteroid.destroy();
asteroids.splice(l, 1);
if (asteroids.length === 0) {
// Advance to level 2
for (var m = 0; m < 10; m++) {
// Increase number of asteroids
var newAsteroid = new Asteroid();
newAsteroid.x = Math.random() * 2048;
newAsteroid.y = -50;
newAsteroid.speed = 5; // Increase speed for level 2
asteroids.push(newAsteroid);
game.addChild(newAsteroid);
}
}
break;
}
}
}
if (LK.ticks % 120 == 0) {
var newMineral = new Mineral();
newMineral.x = Math.random() * 2048;
newMineral.y = -50;
minerals.push(newMineral);
game.addChild(newMineral);
}
for (var j = minerals.length - 1; j >= 0; j--) {
var mineral = minerals[j];
if (mineral.y > 2732) {
mineral.destroy();
minerals.splice(j, 1);
continue;
}
if (spaceship.intersects(mineral)) {
score += 10;
scoreTxt.setText('Score: ' + score);
mineral.destroy();
minerals.splice(j, 1);
}
}
};
LK.playMusic('bgMusic');