User prompt
create an object to use in an explosion effect
Code edit (8 edits merged)
Please save this source code
User prompt
create a function to return a random hex string from the following values [0xFF6900, 0xFCB900, 0xF78DA7]
Code edit (6 edits merged)
Please save this source code
User prompt
add a red healthbar to enemybossship
Code edit (1 edits merged)
Please save this source code
User prompt
Add a text to display on gameover scene which shows the final score
Code edit (2 edits merged)
Please save this source code
User prompt
add a function to kill the player if hit by enemy or enemyboss bullets
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
create an object called "helpguide" at the bottom of screen, 64 pixel from the edge
Code edit (2 edits merged)
Please save this source code
User prompt
make instructionText bold
Code edit (2 edits merged)
Please save this source code
User prompt
Add a text to the screen that says "Tap! Tap! Tap to shoot your hearts and destroy the evil smiley"
User prompt
add a help icon object at the bottom of the screen, 64 pixels from the bottom
User prompt
add an object at the bottom of the screen to show arrows
User prompt
update code so that randomSpawnEnemyShip only spawns if the game has started
User prompt
update the code so that the start button is rendered on top
User prompt
create an asset for a start button for the game.
Code edit (10 edits merged)
Please save this source code
User prompt
add a text elemt to also show the current level
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
/**** * Classes ****/ var Starfield = Container.expand(function () { var self = Container.call(this); self.stars = []; var numberOfStars = 300; for (var i = 0; i < numberOfStars; i++) { var star = LK.getAsset('star', 'Star'); star.anchor.set(0.5, 0.5); star.x = Math.random() * game.width; star.y = Math.random() * game.height; star.speed = Math.random() * 1 + 0.1; star.alpha = Math.random() * 0.2 + 0.1; star.tint = Math.random() * 0xFFFFFF; self.addChild(star); self.stars.push(star); } self.moveStars = function () { for (var i = 0; i < self.stars.length; i++) { var star = self.stars[i]; star.y += star.speed; if (star.y > game.height) { star.y = -30; } } }; }); // Hero ship class var HeroShip = Container.expand(function () { var self = Container.call(this); var shipGraphics = self.createAsset('heroShip', 'Cute smiley ship', 0.5, 0.5); self.speed = 5; self.isShooting = false; self.shootingInterval = 30; self._shootingCounter = 0; self.shoot = function () { var bullet = new HeroBullet(); bullet.x = self.x; bullet.y = self.y - self.height / 2; game.addChild(bullet); return bullet; }; }); // Hero bullet class var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('heroBullet', 'Heart bullet', 0.5, 1); self.speed = -10; self.move = function () { self.y += self.speed; }; }); // Enemy ship class var EnemyShip = Container.expand(function () { var self = Container.call(this); var shipGraphics = self.createAsset('enemyShip', 'Evil smiley', 0.5, 0.5); self.speed = 2; self.hitCount = 0; self.maxHits = 3; self.move = function () { self.y += self.speed; }; self.isDestroyed = function () { return self.hitCount >= self.maxHits; }; }); // Enemy ship class var EnemyBossShip = Container.expand(function () { var self = Container.call(this); var shipGraphics = self.createAsset('enemyBossShip', 'Evil Boss smiley', 0.5, 0.5); self.speed = 6; self.horizontalSpeed = 3; self.hitCount = 0; self.maxHits = 10; self.targetY = game.height * (1 / 2); self.shootingInterval = 60; self._shootingCounter = 0; self.canShoot = false; self.enemyBossShipBullets = []; self.shoot = function (playerX, playerY) { if (self.canShoot) { var bullet = new EnemyBossBullet(); bullet.x = self.x + 100; bullet.y = self.y; bullet.initialX = playerX; bullet.initialY = playerY; self.enemyBossShipBullets.push(bullet); game.addChild(bullet); } }; self.move = function () { if (self.y < self.targetY) { self.y += self.speed; } else if (self.speed !== 0) { self.speed = 0; self.canShoot = true; } if (!self.horizontalMovementInitialized) { self.horizontalMovementInitialized = true; self.movingRight = true; } if (self.movingRight) { self.x += self.horizontalSpeed; if (self.x > game.width - self.width / 2) { self.movingRight = false; } } else { self.x -= self.horizontalSpeed; if (self.x < self.width / 2) { self.movingRight = true; } } }; self.isDestroyed = function () { return self.hitCount >= self.maxHits; }; }); // Enemy boss bullet class var EnemyBossBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('enemyBossBullet', 'Evil Boss Bullet', 0.5, 1); self.speed = 5; self.initialX = 0; self.initialY = 0; self.move = function () { var angle = Math.atan2(self.initialY - self.y, self.initialX - self.x); self.x += Math.cos(angle) * self.speed; // continue moving downwards if (self.y <= self.initialY) { self.y += Math.sin(angle) * self.speed; } else { self.y += self.speed; } // Continue moving off the screen if (self.x < -self.width || self.x > game.width + self.width || self.y < -self.height || self.y > game.height + self.height) { self.destroy(); } }; }); var ScoreDisplay = Container.expand(function () { var self = Container.call(this); var scoreText = new Text2('Score: 0', { size: 100, fill: "#FF6900" }); scoreText.anchor.set(0.5, 0); self.addChild(scoreText); self.updateScore = function (newScore) { scoreText.setText('Score: ' + newScore.toString()); }; }); var LevelDisplay = Container.expand(function () { var self = Container.call(this); var levelText = new Text2('Level: 1', { size: 100, fill: "#FF6900" }); levelText.anchor.set(0.5, 0); self.addChild(levelText); self.updateLevel = function (newLevel) { levelText.setText('Level: ' + newLevel.toString()); }; }); var StartButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.createAsset('startButton', 'Start Game Button', 0.5, 0.5); self.interactive = true; self.buttonMode = true; self.on('down', function () { self.emit('startGame'); randomSpawnEnemyShip(); // Start the spawning process once game starts }); }); var HelpGuide = Container.expand(function () { var self = Container.call(this); var guideGraphics = self.createAsset('helpGuide', 'Help Guide', 0.5, 0); self.addChild(guideGraphics); }); var GameOverDisplay = Container.expand(function () { var self = Container.call(this); var gameOverText = new Text2('Game Over', { size: 150, fill: "#FF0000" }); var finalScoreText = new Text2('Final Score: 0', { size: 120, fill: "#FFFFFF" }); gameOverText.anchor.set(0.5, 0); finalScoreText.anchor.set(0.5, 0); self.addChild(gameOverText); self.addChild(finalScoreText); gameOverText.y = game.height / 2 - 150; finalScoreText.y = game.height / 2; self.updateFinalScore = function (score) { finalScoreText.setText('Final Score: ' + score.toString()); }; }); /**** * Initialize Game ****/ // Initialize starfield var game = new LK.Game({ backgroundColor: 0xe5b4b3, bossSpawned: false // Flag to track if boss has been spawned }); /**** * Game Code ****/ // Initialize starfield var starfield = game.addChild(new Starfield()); starfield.x = 0; starfield.y = 0; // Start off screen // Initialize important asset arrays and score tracking var heroBullets = []; var enemyShips = []; var enemyBossShips = []; var currentLevel = 1; var smallEnemyPoints = 100; var bossEnemyPoints = 400; var currentScore = 0; var highScore = 0; var scoreDisplay = game.addChild(new ScoreDisplay()); scoreDisplay.x = 300; scoreDisplay.y = 75; // Initialize and position level display var levelDisplay = game.addChild(new LevelDisplay()); levelDisplay.x = game.width - 300; levelDisplay.y = 75; // Create hero ship var heroShip = game.addChild(new HeroShip()); heroShip.x = game.width / 2; heroShip.y = game.height - 450; // Create enemies function spawnEnemyShip(speed) { var enemyShip = new EnemyShip(); enemyShip.speed = speed || Math.random() * 3 + 1; // Default speed if not provided enemyShip.x = Math.random() * (game.width - enemyShip.width) + enemyShip.width / 2; enemyShip.y = -enemyShip.height / 2; enemyShip.maxHits = enemyShip.maxHits + currentLevel; game.addChild(enemyShip); enemyShips.push(enemyShip); } // Function to randomly spawn enemy ships or the enemy boss function randomSpawnEnemyShip() { var minSpawnDelay = 1000; // 1 second var maxSpawnDelay = 3000; // 3 seconds var spawnDelay = Math.random() * (maxSpawnDelay - minSpawnDelay) + minSpawnDelay; LK.setTimeout(function () { if (currentScore >= (smallEnemyPoints * 1 + bossEnemyPoints) * currentLevel && !game.bossSpawned) { for (var n = 0; n < currentLevel; n++) { if (n > 3) { break; } game.bossSpawned = true; var enemyBossShip = new EnemyBossShip(); enemyBossShip.x = game.width / 2; enemyBossShip.y = -enemyBossShip.height / (2 * n + 1); enemyBossShip.targetY = enemyBossShip.targetY - enemyBossShip.height * n - 64; enemyBossShip.horizontalSpeed = enemyBossShip.horizontalSpeed * ((currentLevel - n) / 5 + 1); enemyBossShip.maxHits = enemyBossShip.maxHits + 2 * currentLevel; game.addChild(enemyBossShip); enemyBossShips.push(enemyBossShip); } } else if (!game.bossSpawned) { spawnEnemyShip(); } randomSpawnEnemyShip(); // Schedule next spawn }, spawnDelay); } // Game tick event LK.on('tick', function () { // Move the starfield starfield.moveStars(); // Move hero bullets for (var i = heroBullets.length - 1; i >= 0; i--) { var bullet = heroBullets[i]; bullet.move(); if (bullet.y < -bullet.height) { bullet.destroy(); heroBullets.splice(i, 1); } else { // Check collision with enemies for (var j = enemyShips.length - 1; j >= 0; j--) { if (bullet.intersects(enemyShips[j])) { bullet.destroy(); enemyShips[j].hitCount++; heroBullets.splice(i, 1); if (enemyShips[j].isDestroyed()) { currentScore += smallEnemyPoints; enemyShips[j].destroy(); enemyShips.splice(j, 1); scoreDisplay.updateScore(currentScore); } break; } } //Enemy Boss collision for (var j = enemyBossShips.length - 1; j >= 0; j--) { if (bullet.intersects(enemyBossShips[j])) { bullet.destroy(); heroBullets.splice(i, 1); enemyBossShips[j].hitCount++; if (enemyBossShips[j].isDestroyed()) { for (var k = enemyBossShips[j].enemyBossShipBullets.length - 1; k >= 0; k--) { var enemyBullet = enemyBossShips[j].enemyBossShipBullets[k]; enemyBullet.destroy(); } currentScore += bossEnemyPoints; scoreDisplay.updateScore(currentScore); enemyBossShips[j].destroy(); enemyBossShips.splice(j, 1); if (enemyBossShips.length <= 0) { currentLevel += 1; levelDisplay.updateLevel(currentLevel); game.bossSpawned = false; } } } } } } // Move enemy ships for (var i = enemyShips.length - 1; i >= 0; i--) { var enemy = enemyShips[i]; enemy.move(); if (enemy.y > game.height + enemy.height / 2) { enemy.destroy(); enemyShips.splice(i, 1); } if (heroShip.intersects(enemy)) { LK.effects.flashScreen(0xff0000, 1000); var gameOverDisplay = game.addChild(new GameOverDisplay()); gameOverDisplay.updateFinalScore(currentScore); LK.showGameOver(); } } // Move enemy Boss ships for (var i = enemyBossShips.length - 1; i >= 0; i--) { var enemy = enemyBossShips[i]; enemy.move(); if (enemy._shootingCounter % enemy.shootingInterval == 0) { enemy.shoot(heroShip.x, heroShip.y); enemy._shootingCounter = 0; } enemy._shootingCounter += 1; if (enemy.y > game.height + enemy.height / 2) { enemy.destroy(); enemyBossShips.splice(i, 1); } for (var j = enemyBossShips[i].enemyBossShipBullets.length - 1; j >= 0; j--) { var enemyBullet = enemyBossShips[i].enemyBossShipBullets[j]; enemyBullet.move(); if (heroShip.intersects(enemyBullet)) { LK.effects.flashScreen(0xff0000, 1000); var gameOverDisplay = game.addChild(new GameOverDisplay()); gameOverDisplay.updateFinalScore(currentScore); LK.showGameOver(); } } } // Shoot bullets if (heroShip._shootingCounter % heroShip.shootingInterval == 0) { if (heroShip.isShooting) { heroBullets.push(heroShip.shoot()); heroShip._shootingCounter = 0; } } heroShip._shootingCounter += 1; }); // randomSpawnEnemyShip(); // Start the spawning process var helpguide = game.addChild(new HelpGuide()); helpguide.x = game.width / 2; helpguide.y = game.height - 300; helpguide.alpha = 0.3; // Render the start button on top var startButton = game.addChild(new StartButton()); startButton.x = game.width / 2; startButton.y = game.height / 2; startButton.on('startGame', function () { startButton.destroy(); instructionText.destroy(); }); // Add instructional text to the screen var instructionText = new Text2('Tap! Tap! Tap to shoot and destroy the evil smiley', { size: 70, fill: "#eb144c", align: 'center', fontWeight: 'bold' }); instructionText.anchor.set(0.5, 0.5); instructionText.x = game.width / 2; instructionText.y = game.height / 2 - 400; game.addChild(instructionText); // Touch controls to make heroShip follow the pointer game.on('move', function (obj) { var touchPos = obj.event.getLocalPosition(game); heroShip.x = touchPos.x; }); game.on('down', function (obj) { heroShip._shootingCounter = 0; heroShip.isShooting = true; }); game.on('up', function (obj) { heroShip.isShooting = false; });
===================================================================
--- original.js
+++ change.js
@@ -366,8 +366,10 @@
var enemyBullet = enemyBossShips[i].enemyBossShipBullets[j];
enemyBullet.move();
if (heroShip.intersects(enemyBullet)) {
LK.effects.flashScreen(0xff0000, 1000);
+ var gameOverDisplay = game.addChild(new GameOverDisplay());
+ gameOverDisplay.updateFinalScore(currentScore);
LK.showGameOver();
}
}
}
a cute cool looking emoji face. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a cute looking heart. bright red.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
an evil looking emoji. purple and blue colors.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a shiny blue cute star. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A start button. White on Red.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a grey touchpad. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a bright yellow shiny cute star. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.