User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Fix line 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Fix all errors
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 61
Code edit (1 edits merged)
Please save this source code
User prompt
Tap Smash: Avoid the Bomb!
Initial prompt
IX Create a game where you tap to break items that appear on your screen but you dont tap on bombs and spikes because they hurt you and you have 3 lives. Better items give more points
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Item class for all falling items
var Item = Container.expand(function () {
var self = Container.call(this);
// Asset id and score are set on creation
self.assetId = 'item_basic';
self.scoreValue = 1;
self.isBad = false; // true for bomb/spike
self.isTapped = false;
// Attach asset
var itemGfx = self.attachAsset(self.assetId, {
anchorX: 0.5,
anchorY: 0.5
});
// For pop effect
self.popEffect = null;
// Set up item visuals
self.setType = function (type) {
// type: {assetId, scoreValue, isBad}
self.assetId = type.assetId;
self.scoreValue = type.scoreValue;
self.isBad = type.isBad;
// Remove old asset if any
if (itemGfx && itemGfx.parent) itemGfx.parent.removeChild(itemGfx);
itemGfx = self.attachAsset(self.assetId, {
anchorX: 0.5,
anchorY: 0.5
});
// For bomb/spike, add a little rotation
if (self.isBad) {
itemGfx.rotation = Math.PI / 8 * (Math.random() > 0.5 ? 1 : -1);
}
};
// Animate pop effect
self.showPop = function () {
var pop = LK.getAsset('pop', {
anchorX: 0.5
});
pop.alpha = 0.7;
pop.scaleX = pop.scaleY = 0.5;
self.addChild(pop);
tween(pop, {
scaleX: 1.5,
scaleY: 1.5,
alpha: 0
}, {
duration: 350,
easing: tween.easeOut,
onFinish: function onFinish() {
if (pop.parent) pop.parent.removeChild(pop);
}
});
};
// Called when tapped
self.onTap = function () {
if (self.isTapped) return;
self.isTapped = true;
if (self.isBad) {
self.showPop();
} else {
self.showPop();
}
};
// Called every tick
self.update = function () {
// Movement handled in game loop
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181818
});
/****
* Game Code
****/
// Music
// Sounds
// Pop effect
// Bad items
// Good items
// Item types
var ITEM_TYPES = [{
assetId: 'item_basic',
scoreValue: 1,
isBad: false,
weight: 60
}, {
assetId: 'item_rare',
scoreValue: 3,
isBad: false,
weight: 20
}, {
assetId: 'item_legend',
scoreValue: 7,
isBad: false,
weight: 5
}, {
assetId: 'item_bomb',
scoreValue: 0,
isBad: true,
weight: 10
}, {
assetId: 'item_spike',
scoreValue: 0,
isBad: true,
weight: 5
}];
// Weighted random selection
function pickItemType() {
var total = 0;
for (var i = 0; i < ITEM_TYPES.length; i++) total += ITEM_TYPES[i].weight;
var r = Math.random() * total;
var acc = 0;
for (var i = 0; i < ITEM_TYPES.length; i++) {
acc += ITEM_TYPES[i].weight;
if (r < acc) return ITEM_TYPES[i];
}
return ITEM_TYPES[0];
}
// Game state
var items = [];
var lives = 3;
var score = 0;
var spawnInterval = 1000; // ms
var minSpawnInterval = 350;
var spawnTimer = null;
var itemFallSpeed = 7; // px per frame
var itemSpeedInc = 0.15;
var itemSpawnDec = 30;
var lastTapTime = 0;
// GUI
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var livesTxt = new Text2('♥♥♥', {
size: 90,
fill: 0xFF5252
});
livesTxt.anchor.set(1, 0);
livesTxt.x = -40; // right padding
LK.gui.topRight.addChild(livesTxt);
// Prevent elements in top left 100x100
// (No elements added to gui.topLeft or at (0,0))
// Music
LK.playMusic('bgmusic');
// Spawn a new item
function spawnItem() {
var type = pickItemType();
var item = new Item();
item.setType(type);
// Random X, avoid edges
var margin = 120;
var x = margin + Math.random() * (2048 - 2 * margin);
item.x = x;
item.y = -100;
// For touch detection
item.width = LK.getAsset(type.assetId, {
anchorX: 0.5,
anchorY: 0.5
}).width;
item.height = LK.getAsset(type.assetId, {
anchorX: 0.5,
anchorY: 0.5
}).height;
// Add to game
game.addChild(item);
items.push(item);
}
// Update lives display
function updateLives() {
var s = '';
for (var i = 0; i < lives; i++) s += '♥';
livesTxt.setText(s);
}
// Handle tap
function handleTap(x, y, obj) {
// Find topmost item under tap
for (var i = items.length - 1; i >= 0; i--) {
var item = items[i];
// Simple bounding box check
var dx = x - item.x;
var dy = y - item.y;
var w = item.width / 2;
var h = item.height / 2;
if (dx * dx / (w * w) + dy * dy / (h * h) <= 1.1) {
// Tapped this item
if (item.isTapped) continue;
item.onTap();
if (item.isBad) {
// Lose a life
lives--;
updateLives();
LK.getSound('bad').play();
LK.effects.flashScreen(0xff0000, 350);
if (lives <= 0) {
LK.getSound('lose').play();
LK.showGameOver();
return;
}
} else {
// Score!
score += item.scoreValue;
LK.setScore(score);
scoreTxt.setText(score);
LK.getSound('score').play();
// Animate item
tween(item, {
scaleX: 1.3,
scaleY: 1.3,
alpha: 0
}, {
duration: 220,
easing: tween.easeOut,
onFinish: function onFinish() {
if (item.parent) item.parent.removeChild(item);
}
});
}
// Remove item from array
items.splice(i, 1);
break;
}
}
}
// Game move/tap handler
game.down = function (x, y, obj) {
handleTap(x, y, obj);
};
// Main update loop
game.update = function () {
// Move items
for (var i = items.length - 1; i >= 0; i--) {
var item = items[i];
item.y += itemFallSpeed;
// If not tapped and off screen
if (!item.isTapped && item.y > 2732 + 100) {
// If good item missed, lose a life
if (!item.isBad) {
lives--;
updateLives();
LK.getSound('life').play();
LK.effects.flashScreen(0xff9800, 250);
if (lives <= 0) {
LK.getSound('lose').play();
LK.showGameOver();
return;
}
}
// Remove from game
if (item.parent) item.parent.removeChild(item);
items.splice(i, 1);
}
}
// Difficulty ramp: every 10 points, increase speed and spawn rate
var level = Math.floor(score / 10);
var targetSpeed = 7 + level * itemSpeedInc;
if (itemFallSpeed < targetSpeed) itemFallSpeed += 0.02;
var targetInterval = Math.max(minSpawnInterval, 1000 - level * itemSpawnDec);
if (spawnInterval > targetInterval) spawnInterval -= 1.5;
};
// Spawn timer
function startSpawnTimer() {
if (spawnTimer) LK.clearInterval(spawnTimer);
spawnTimer = LK.setInterval(function () {
spawnItem();
// Adjust interval
LK.clearInterval(spawnTimer);
startSpawnTimer();
}, spawnInterval);
}
startSpawnTimer();
// Reset on game over
LK.on('gameover', function () {
// Clean up
for (var i = 0; i < items.length; i++) {
if (items[i].parent) items[i].parent.removeChild(items[i]);
}
items = [];
lives = 3;
score = 0;
spawnInterval = 1000;
itemFallSpeed = 7;
updateLives();
scoreTxt.setText(score);
startSpawnTimer();
LK.playMusic('bgmusic');
});
// Reset on win (not used, but for completeness)
LK.on('youwin', function () {
for (var i = 0; i < items.length; i++) {
if (items[i].parent) items[i].parent.removeChild(items[i]);
}
items = [];
lives = 3;
score = 0;
spawnInterval = 1000;
itemFallSpeed = 7;
updateLives();
scoreTxt.setText(score);
startSpawnTimer();
LK.playMusic('bgmusic');
}); ===================================================================
--- original.js
+++ change.js