User prompt
put the life counter on the bottom right hand corner of the screen - put the countdown time beneath the Level counter/ indicator
User prompt
Please fix the bug: 'Timeout.tick error: timerTxt.style is undefined' in or related to this line: 'timerTxt.style.fill = 0xFFFFFF;' Line Number: 171
User prompt
show countdown timer and number of lives. number of lives should be shown as life icons
User prompt
use a separate sound for each instrument when hit (create new sound assets)
User prompt
add bomb and xylophone to random instruments. lose one life when bomb is hit
Code edit (1 edits merged)
Please save this source code
User prompt
Guitar Hunter
Initial prompt
A shooting game where the player tries to shoot a guitar. He needs to shoot as many guitars as possible within 30 seconds. Counter counts the time down to zero. At the beginning, player's gun is at the bottom of the screen and can only shoot straight up. Player opens their mouth to shoot a bullet. Player turns head right to move right and turns head left to move left. At the top of the screen, the guitar slides from left to right. Guitar is destroyed when player's bullet hit it. Other random instruments also appear and disappear at random at various positions on the screen. Shooting any instruments other than a guitar (e.g drum, flute, piano, saxophone) earns the user 1 point. Shooting the guitar earns 5 points. If the player can shoot up to 3 guitars, he goes to a new level and the counter resets with a faster moving guitar and more random instruments spawned.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); var facekit = LK.import("@upit/facekit.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -15; self.update = function () { self.y += self.speed; }; return self; }); var Guitar = Container.expand(function () { var self = Container.call(this); var guitarGraphics = self.attachAsset('guitar', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.points = 5; self.instrumentType = 'guitar'; self.update = function () { self.x += self.speed; }; return self; }); var Gun = Container.expand(function () { var self = Container.call(this); var gunGraphics = self.attachAsset('gun', { anchorX: 0.5, anchorY: 1 }); self.update = function () { if (facekit.mouthCenter.x > 0) { self.x = facekit.mouthCenter.x; } }; return self; }); var Instrument = Container.expand(function (type) { var self = Container.call(this); var instrumentGraphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.points = 1; self.instrumentType = type; self.lifespan = 180; // 3 seconds at 60fps self.update = function () { self.lifespan--; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var gun; var bullets = []; var guitars = []; var instruments = []; var level = 1; var guitarsHit = 0; var timeRemaining = 30; var guitarSpeed = 3; var instrumentSpawnRate = 120; var lastMouthOpen = false; var gameTimer; var spawnTimer = 0; var lives = 3; // Initialize gun gun = game.addChild(new Gun()); gun.x = 1024; gun.y = 2600; // Score display var scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Level display var levelTxt = new Text2('Level: 1', { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(1, 0); levelTxt.x = -20; LK.gui.topRight.addChild(levelTxt); // Timer display - larger and more prominent var timerTxt = new Text2('30', { size: 120, fill: 0xFFFFFF }); timerTxt.anchor.set(1, 0); timerTxt.x = -20; timerTxt.y = 80; LK.gui.topRight.addChild(timerTxt); // Guitars hit display var guitarsHitTxt = new Text2('Guitars: 0/3', { size: 60, fill: 0xFFFFFF }); guitarsHitTxt.anchor.set(0.5, 0); guitarsHitTxt.y = 100; LK.gui.top.addChild(guitarsHitTxt); // Lives display container var livesContainer = new Container(); livesContainer.x = -100; livesContainer.y = -100; LK.gui.bottomRight.addChild(livesContainer); // Create life icons var lifeIcons = []; for (var i = 0; i < 3; i++) { var lifeIcon = LK.getAsset('life', { anchorX: 0.5, anchorY: 0.5 }); lifeIcon.x = i * 70; lifeIcon.y = 0; lifeIcons.push(lifeIcon); livesContainer.addChild(lifeIcon); } // Start game timer gameTimer = LK.setInterval(function () { timeRemaining--; timerTxt.setText(timeRemaining.toString()); // Add color change when time is running out if (timeRemaining <= 10) { timerTxt.setStyle({ fill: 0xFF0000 }); } else { timerTxt.setStyle({ fill: 0xFFFFFF }); } if (timeRemaining <= 0) { LK.showGameOver(); } }, 1000); // Play background music LK.playMusic('bgmusic'); game.update = function () { // Check mouth open to shoot if (facekit.mouthOpen && !lastMouthOpen) { var newBullet = new Bullet(); newBullet.x = gun.x; newBullet.y = gun.y - 120; bullets.push(newBullet); game.addChild(newBullet); LK.getSound('shoot').play(); } lastMouthOpen = facekit.mouthOpen; // Spawn guitars if (LK.ticks % 180 === 0) { // Every 3 seconds var newGuitar = new Guitar(); newGuitar.x = -60; newGuitar.y = 300; newGuitar.speed = guitarSpeed; guitars.push(newGuitar); game.addChild(newGuitar); } // Spawn random instruments spawnTimer++; if (spawnTimer >= instrumentSpawnRate) { spawnTimer = 0; var types = ['drum', 'flute', 'piano', 'saxophone', 'bomb', 'xylophone']; var type = types[Math.floor(Math.random() * types.length)]; var newInstrument = new Instrument(type); newInstrument.x = 200 + Math.random() * 1648; newInstrument.y = 400 + Math.random() * 1800; // Set special properties for bomb if (type === 'bomb') { newInstrument.points = -1; // Special marker for bomb newInstrument.instrumentType = 'bomb'; } instruments.push(newInstrument); game.addChild(newInstrument); } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; if (bullet.y < -20) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check guitar collisions for (var j = guitars.length - 1; j >= 0; j--) { var guitar = guitars[j]; if (bullet.intersects(guitar)) { LK.setScore(LK.getScore() + guitar.points); scoreTxt.setText('Score: ' + LK.getScore()); guitarsHit++; guitarsHitTxt.setText('Guitars: ' + guitarsHit + '/3'); LK.getSound('guitarHit').play(); LK.effects.flashObject(guitar, 0xFFFFFF, 300); guitar.destroy(); guitars.splice(j, 1); bullet.destroy(); bullets.splice(i, 1); // Check level advancement if (guitarsHit >= 3) { level++; levelTxt.setText('Level: ' + level); guitarsHit = 0; guitarsHitTxt.setText('Guitars: 0/3'); timeRemaining = 30; guitarSpeed += 2; instrumentSpawnRate = Math.max(60, instrumentSpawnRate - 20); } break; } } if (i < 0 || i >= bullets.length) continue; // Check instrument collisions for (var k = instruments.length - 1; k >= 0; k--) { var instrument = instruments[k]; if (bullet.intersects(instrument)) { // Handle bomb collision if (instrument.instrumentType === 'bomb') { lives--; // Remove a life icon if (lifeIcons.length > 0 && lives >= 0) { var removedLife = lifeIcons.pop(); removedLife.destroy(); } LK.effects.flashScreen(0xFF0000, 500); LK.getSound('bombHit').play(); if (lives <= 0) { LK.showGameOver(); } } else { // Normal instrument hit LK.setScore(LK.getScore() + instrument.points); scoreTxt.setText('Score: ' + LK.getScore()); // Play specific sound based on instrument type if (instrument.instrumentType === 'drum') { LK.getSound('drumHit').play(); } else if (instrument.instrumentType === 'flute') { LK.getSound('fluteHit').play(); } else if (instrument.instrumentType === 'piano') { LK.getSound('pianoHit').play(); } else if (instrument.instrumentType === 'saxophone') { LK.getSound('saxophoneHit').play(); } else if (instrument.instrumentType === 'xylophone') { LK.getSound('xylophoneHit').play(); } } LK.effects.flashObject(instrument, 0xFFFFFF, 300); instrument.destroy(); instruments.splice(k, 1); bullet.destroy(); bullets.splice(i, 1); break; } } } // Update guitars for (var i = guitars.length - 1; i >= 0; i--) { var guitar = guitars[i]; if (guitar.x > 2108) { guitar.destroy(); guitars.splice(i, 1); } } // Update instruments for (var i = instruments.length - 1; i >= 0; i--) { var instrument = instruments[i]; if (instrument.lifespan <= 0) { instrument.destroy(); instruments.splice(i, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -108,11 +108,12 @@
var timerTxt = new Text2('30', {
size: 120,
fill: 0xFFFFFF
});
-timerTxt.anchor.set(0.5, 0);
-timerTxt.y = 200;
-LK.gui.top.addChild(timerTxt);
+timerTxt.anchor.set(1, 0);
+timerTxt.x = -20;
+timerTxt.y = 80;
+LK.gui.topRight.addChild(timerTxt);
// Guitars hit display
var guitarsHitTxt = new Text2('Guitars: 0/3', {
size: 60,
fill: 0xFFFFFF
@@ -121,11 +122,11 @@
guitarsHitTxt.y = 100;
LK.gui.top.addChild(guitarsHitTxt);
// Lives display container
var livesContainer = new Container();
-livesContainer.x = -200;
-livesContainer.y = 20;
-LK.gui.topRight.addChild(livesContainer);
+livesContainer.x = -100;
+livesContainer.y = -100;
+LK.gui.bottomRight.addChild(livesContainer);
// Create life icons
var lifeIcons = [];
for (var i = 0; i < 3; i++) {
var lifeIcon = LK.getAsset('life', {
vertical bullet. In-Game asset. 2d. High contrast. No shadows
drum. In-Game asset. 2d. High contrast. No shadows
Guitar. In-Game asset. 2d. High contrast. No shadows
futuristic space cannon gun vertical top view. In-Game asset. 2d. High contrast. No shadows
piano. In-Game asset. 2d. High contrast. No shadows
saxophone. In-Game asset. 2d. High contrast. No shadows
red bomb. In-Game asset. 2d. High contrast. No shadows
xylophone. In-Game asset. 2d. High contrast. No shadows
gold musical note. In-Game asset. 3d. High contrast. No shadows
red musical note. In-Game asset. 3d. High contrast. No shadows
flute. In-Game asset. 3d. High contrast. No shadows
harp. In-Game asset. 3d. High contrast. No shadows
tuba. In-Game asset. 3d. High contrast. No shadows
Triple vertical bullet. In-Game asset. 3d. High contrast. No shadows
Music maestro monster head . 3d.. In-Game asset. High contrast. No shadows
Dark space background with stars
Bright green glowing musical note. In-Game asset. 3d. High contrast. No shadows
guitarHit
Sound effect
drumHit
Sound effect
fluteHit
Sound effect
pianoHit
Sound effect
saxophoneHit
Sound effect
xylophoneHit
Sound effect
shoot
Sound effect
bombHit
Sound effect
tubaHit
Sound effect
harpHit
Sound effect
turboHit
Sound effect
bgmusic
Music