/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Cat = Container.expand(function () {
var self = Container.call(this);
var catIdleGraphics = self.attachAsset('cat_idle', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
var catWalkGraphics = self.attachAsset('cat_walk', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catWalkGraphics.visible = false;
var catEatGraphics = self.attachAsset('cat_eat', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catEatGraphics.visible = false;
var catDamageGraphics = self.attachAsset('cat_damage', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catDamageGraphics.visible = false;
var catWalkDamageGraphics = self.attachAsset('cat_walk_damage', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catWalkDamageGraphics.visible = false;
self.targetX = 1024; // Center of screen
self.speed = 15;
self.isMoving = false;
self.movementThreshold = 2;
self.facingLeft = false; // Track direction cat is facing
self.isEating = false;
self.eatingTimer = 0;
self.startEating = function () {
self.isEating = true;
self.eatingTimer = 30; // Show eating sprite for 30 frames (0.5 seconds)
// Hide other sprites and show eating sprite
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
catDamageGraphics.visible = false;
catWalkDamageGraphics.visible = false;
catEatGraphics.visible = true;
// Apply direction flip to eating sprite
if (self.facingLeft) {
catEatGraphics.scaleX = -1.5;
} else {
catEatGraphics.scaleX = 1.5;
}
};
self.switchToDamaged = function () {
// Hide all other sprites and show appropriate damaged sprite
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
catEatGraphics.visible = false;
catWalkDamageGraphics.visible = false;
if (self.isMoving) {
catWalkDamageGraphics.visible = true;
catDamageGraphics.visible = false;
} else {
catDamageGraphics.visible = true;
catWalkDamageGraphics.visible = false;
}
// Apply correct direction flip
if (self.facingLeft) {
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
};
self.switchToNormal = function () {
// Hide damaged sprites and restore normal sprites
catDamageGraphics.visible = false;
catWalkDamageGraphics.visible = false;
// Restore appropriate sprite based on current state
if (self.isEating) {
catEatGraphics.visible = true;
} else if (self.isMoving) {
catWalkGraphics.visible = true;
catIdleGraphics.visible = false;
} else {
catIdleGraphics.visible = true;
catWalkGraphics.visible = false;
}
};
self.update = function () {
// Smooth movement towards target position
var diff = self.targetX - self.x;
var wasMoving = self.isMoving;
var wasFacingLeft = self.facingLeft;
if (Math.abs(diff) > 5) {
self.x += diff * 0.2;
self.isMoving = Math.abs(diff) > self.movementThreshold;
// Update direction based on movement
if (diff < 0) {
self.facingLeft = true;
} else if (diff > 0) {
self.facingLeft = false;
}
} else {
self.x = self.targetX;
self.isMoving = false;
}
// Keep cat within screen bounds
var halfWidth = catIdleGraphics.width * 1.5 / 2;
if (self.x < halfWidth) {
self.x = halfWidth;
self.targetX = halfWidth;
}
if (self.x > 2048 - halfWidth) {
self.x = 2048 - halfWidth;
self.targetX = 2048 - halfWidth;
}
// Handle eating animation timer
if (self.isEating) {
self.eatingTimer--;
if (self.eatingTimer <= 0) {
self.isEating = false;
catEatGraphics.visible = false;
// Check if we should show damaged sprite
if (lives === 1) {
if (self.isMoving) {
catWalkDamageGraphics.visible = true;
catDamageGraphics.visible = false;
} else {
catDamageGraphics.visible = true;
catWalkDamageGraphics.visible = false;
}
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
} else {
// Restore appropriate sprite based on current movement state
if (self.isMoving) {
catWalkGraphics.visible = true;
catIdleGraphics.visible = false;
} else {
catIdleGraphics.visible = true;
catWalkGraphics.visible = false;
}
}
// Apply correct direction flip
if (self.facingLeft) {
catIdleGraphics.scaleX = -1.5;
catWalkGraphics.scaleX = -1.5;
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catIdleGraphics.scaleX = 1.5;
catWalkGraphics.scaleX = 1.5;
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
}
}
// Switch sprites based on movement state or direction change (only if not eating)
if (!self.isEating && (self.isMoving !== wasMoving || self.facingLeft !== wasFacingLeft)) {
if (lives === 1) {
// Show appropriate damaged sprite based on movement
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
catEatGraphics.visible = false;
if (self.isMoving) {
catWalkDamageGraphics.visible = true;
catDamageGraphics.visible = false;
} else {
catDamageGraphics.visible = true;
catWalkDamageGraphics.visible = false;
}
} else {
// Normal sprite switching
catWalkDamageGraphics.visible = false;
if (self.isMoving) {
catIdleGraphics.visible = false;
catWalkGraphics.visible = true;
catEatGraphics.visible = false;
catDamageGraphics.visible = false;
} else {
catIdleGraphics.visible = true;
catWalkGraphics.visible = false;
catEatGraphics.visible = false;
catDamageGraphics.visible = false;
}
}
// Flip sprites based on direction
if (self.facingLeft) {
catIdleGraphics.scaleX = -1.5;
catWalkGraphics.scaleX = -1.5;
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catIdleGraphics.scaleX = 1.5;
catWalkGraphics.scaleX = 1.5;
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
}
// Update eating sprite direction if direction changed while eating
if (self.isEating && self.facingLeft !== wasFacingLeft) {
if (self.facingLeft) {
catEatGraphics.scaleX = -1.5;
} else {
catEatGraphics.scaleX = 1.5;
}
}
// Update damaged sprite direction if direction changed
if ((catDamageGraphics.visible || catWalkDamageGraphics.visible) && self.facingLeft !== wasFacingLeft) {
if (self.facingLeft) {
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
}
};
return self;
});
var Orange = Container.expand(function () {
var self = Container.call(this);
var orangeGraphics = self.attachAsset('orange', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
var orangeDamageGraphics = self.attachAsset('orange_damage', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
orangeDamageGraphics.visible = false;
self.speed = 8;
self.lastY = 0;
self.caught = false;
self.update = function () {
if (!self.caught) {
// Increase speed when lives reach 1
var speedMultiplier = lives === 1 ? 1.5 : 1;
self.y += self.speed * speedMultiplier;
}
// Switch to damaged sprite when lives reach 1
if (lives === 1) {
orangeGraphics.visible = false;
orangeDamageGraphics.visible = true;
} else {
orangeGraphics.visible = true;
orangeDamageGraphics.visible = false;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Add background
var backgroundSprite = LK.getAsset('background', {
anchorX: 0,
anchorY: 0
});
backgroundSprite.x = 0;
backgroundSprite.y = 0;
game.addChild(backgroundSprite);
var backgroundDamageSprite = LK.getAsset('background_damage', {
anchorX: 0,
anchorY: 0
});
backgroundDamageSprite.x = 0;
backgroundDamageSprite.y = 0;
backgroundDamageSprite.visible = false;
game.addChild(backgroundDamageSprite);
var cat;
var oranges = [];
var gameSpeed = 1;
var orangeSpawnRate = 60; // frames between spawns
var frameCount = 0;
var lives = 3;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Create lives display
var livesTxt = new Text2('Lives: 3', {
size: 60,
fill: 0xFFFFFF
});
livesTxt.anchor.set(1, 0);
livesTxt.y = 100;
LK.gui.topRight.addChild(livesTxt);
// Create heart icon for lives
var heartIcon = LK.getAsset('heart_icon', {
anchorX: 1,
anchorY: 0
});
heartIcon.x = -10; // Position relative to topRight
heartIcon.y = 170;
LK.gui.topRight.addChild(heartIcon);
// Create damaged heart icon
var heartDamageIcon = LK.getAsset('heart_damage', {
anchorX: 1,
anchorY: 0
});
heartDamageIcon.x = -10; // Position relative to topRight
heartDamageIcon.y = 170;
heartDamageIcon.visible = false;
LK.gui.topRight.addChild(heartDamageIcon);
// Create the cat
cat = game.addChild(new Cat());
cat.x = 1024; // Center horizontally
cat.y = 2600; // Near bottom of screen
// Handle touch/mouse input
function handleMove(x, y, obj) {
if (cat) {
cat.targetX = x;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
handleMove(x, y, obj);
};
// Spawn oranges
function spawnOrange() {
var orange = new Orange();
orange.x = Math.random() * (2048 - 160) + 80; // Random x position within bounds
orange.y = -40; // Start above screen
orange.lastY = orange.y;
orange.speed = 6 + gameSpeed * 2; // Increase speed with game progression
oranges.push(orange);
game.addChild(orange);
}
// Update score display
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
}
// Update lives display
function updateLives() {
livesTxt.setText('Lives: ' + lives);
// Switch heart sprite when lives reach 1
if (lives === 1) {
heartIcon.visible = false;
heartDamageIcon.visible = true;
// Switch to hardcore music when lives reach 1
LK.playMusic('hardcore');
// Switch to damaged background
backgroundSprite.visible = false;
backgroundDamageSprite.visible = true;
} else {
heartIcon.visible = true;
heartDamageIcon.visible = false;
// Switch to normal background
backgroundSprite.visible = true;
backgroundDamageSprite.visible = false;
}
}
game.update = function () {
frameCount++;
// Spawn oranges
if (frameCount % Math.max(20, orangeSpawnRate - Math.floor(LK.getScore() / 5)) === 0) {
spawnOrange();
}
// Increase game speed over time
if (frameCount % 600 === 0) {
// Every 10 seconds at 60fps
gameSpeed += 0.2;
}
// Update oranges
for (var i = oranges.length - 1; i >= 0; i--) {
var orange = oranges[i];
// Check if orange went off screen (missed)
if (orange.lastY < 2732 && orange.y >= 2732 && !orange.caught) {
// Orange hit the ground - lose a life
lives--;
updateLives();
// Play fail sound
LK.getSound('fail').play();
if (lives <= 0) {
LK.showGameOver();
return;
}
orange.destroy();
oranges.splice(i, 1);
continue;
}
// Check collision with cat
if (!orange.caught && orange.intersects(cat)) {
// Orange caught!
orange.caught = true;
LK.setScore(LK.getScore() + 1);
updateScore();
// Play catch sound
LK.getSound('catch').play();
// Play eat sound
LK.getSound('eat').play();
// Flash effect on cat
LK.effects.flashObject(cat, 0xFFFFFF, 200);
// Trigger eating animation
cat.startEating();
// Animate orange being caught
tween(orange, {
scaleX: 0,
scaleY: 0,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
orange.destroy();
}
});
oranges.splice(i, 1);
continue;
}
orange.lastY = orange.y;
}
// Check win condition (optional - high score achievement)
if (LK.getScore() >= 100) {
LK.showYouWin();
}
};
// Start energetic dance music
LK.playMusic('Fun');
// Initialize displays
updateScore();
updateLives(); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Cat = Container.expand(function () {
var self = Container.call(this);
var catIdleGraphics = self.attachAsset('cat_idle', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
var catWalkGraphics = self.attachAsset('cat_walk', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catWalkGraphics.visible = false;
var catEatGraphics = self.attachAsset('cat_eat', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catEatGraphics.visible = false;
var catDamageGraphics = self.attachAsset('cat_damage', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catDamageGraphics.visible = false;
var catWalkDamageGraphics = self.attachAsset('cat_walk_damage', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
catWalkDamageGraphics.visible = false;
self.targetX = 1024; // Center of screen
self.speed = 15;
self.isMoving = false;
self.movementThreshold = 2;
self.facingLeft = false; // Track direction cat is facing
self.isEating = false;
self.eatingTimer = 0;
self.startEating = function () {
self.isEating = true;
self.eatingTimer = 30; // Show eating sprite for 30 frames (0.5 seconds)
// Hide other sprites and show eating sprite
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
catDamageGraphics.visible = false;
catWalkDamageGraphics.visible = false;
catEatGraphics.visible = true;
// Apply direction flip to eating sprite
if (self.facingLeft) {
catEatGraphics.scaleX = -1.5;
} else {
catEatGraphics.scaleX = 1.5;
}
};
self.switchToDamaged = function () {
// Hide all other sprites and show appropriate damaged sprite
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
catEatGraphics.visible = false;
catWalkDamageGraphics.visible = false;
if (self.isMoving) {
catWalkDamageGraphics.visible = true;
catDamageGraphics.visible = false;
} else {
catDamageGraphics.visible = true;
catWalkDamageGraphics.visible = false;
}
// Apply correct direction flip
if (self.facingLeft) {
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
};
self.switchToNormal = function () {
// Hide damaged sprites and restore normal sprites
catDamageGraphics.visible = false;
catWalkDamageGraphics.visible = false;
// Restore appropriate sprite based on current state
if (self.isEating) {
catEatGraphics.visible = true;
} else if (self.isMoving) {
catWalkGraphics.visible = true;
catIdleGraphics.visible = false;
} else {
catIdleGraphics.visible = true;
catWalkGraphics.visible = false;
}
};
self.update = function () {
// Smooth movement towards target position
var diff = self.targetX - self.x;
var wasMoving = self.isMoving;
var wasFacingLeft = self.facingLeft;
if (Math.abs(diff) > 5) {
self.x += diff * 0.2;
self.isMoving = Math.abs(diff) > self.movementThreshold;
// Update direction based on movement
if (diff < 0) {
self.facingLeft = true;
} else if (diff > 0) {
self.facingLeft = false;
}
} else {
self.x = self.targetX;
self.isMoving = false;
}
// Keep cat within screen bounds
var halfWidth = catIdleGraphics.width * 1.5 / 2;
if (self.x < halfWidth) {
self.x = halfWidth;
self.targetX = halfWidth;
}
if (self.x > 2048 - halfWidth) {
self.x = 2048 - halfWidth;
self.targetX = 2048 - halfWidth;
}
// Handle eating animation timer
if (self.isEating) {
self.eatingTimer--;
if (self.eatingTimer <= 0) {
self.isEating = false;
catEatGraphics.visible = false;
// Check if we should show damaged sprite
if (lives === 1) {
if (self.isMoving) {
catWalkDamageGraphics.visible = true;
catDamageGraphics.visible = false;
} else {
catDamageGraphics.visible = true;
catWalkDamageGraphics.visible = false;
}
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
} else {
// Restore appropriate sprite based on current movement state
if (self.isMoving) {
catWalkGraphics.visible = true;
catIdleGraphics.visible = false;
} else {
catIdleGraphics.visible = true;
catWalkGraphics.visible = false;
}
}
// Apply correct direction flip
if (self.facingLeft) {
catIdleGraphics.scaleX = -1.5;
catWalkGraphics.scaleX = -1.5;
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catIdleGraphics.scaleX = 1.5;
catWalkGraphics.scaleX = 1.5;
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
}
}
// Switch sprites based on movement state or direction change (only if not eating)
if (!self.isEating && (self.isMoving !== wasMoving || self.facingLeft !== wasFacingLeft)) {
if (lives === 1) {
// Show appropriate damaged sprite based on movement
catIdleGraphics.visible = false;
catWalkGraphics.visible = false;
catEatGraphics.visible = false;
if (self.isMoving) {
catWalkDamageGraphics.visible = true;
catDamageGraphics.visible = false;
} else {
catDamageGraphics.visible = true;
catWalkDamageGraphics.visible = false;
}
} else {
// Normal sprite switching
catWalkDamageGraphics.visible = false;
if (self.isMoving) {
catIdleGraphics.visible = false;
catWalkGraphics.visible = true;
catEatGraphics.visible = false;
catDamageGraphics.visible = false;
} else {
catIdleGraphics.visible = true;
catWalkGraphics.visible = false;
catEatGraphics.visible = false;
catDamageGraphics.visible = false;
}
}
// Flip sprites based on direction
if (self.facingLeft) {
catIdleGraphics.scaleX = -1.5;
catWalkGraphics.scaleX = -1.5;
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catIdleGraphics.scaleX = 1.5;
catWalkGraphics.scaleX = 1.5;
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
}
// Update eating sprite direction if direction changed while eating
if (self.isEating && self.facingLeft !== wasFacingLeft) {
if (self.facingLeft) {
catEatGraphics.scaleX = -1.5;
} else {
catEatGraphics.scaleX = 1.5;
}
}
// Update damaged sprite direction if direction changed
if ((catDamageGraphics.visible || catWalkDamageGraphics.visible) && self.facingLeft !== wasFacingLeft) {
if (self.facingLeft) {
catDamageGraphics.scaleX = -1.5;
catWalkDamageGraphics.scaleX = -1.5;
} else {
catDamageGraphics.scaleX = 1.5;
catWalkDamageGraphics.scaleX = 1.5;
}
}
};
return self;
});
var Orange = Container.expand(function () {
var self = Container.call(this);
var orangeGraphics = self.attachAsset('orange', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
var orangeDamageGraphics = self.attachAsset('orange_damage', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
orangeDamageGraphics.visible = false;
self.speed = 8;
self.lastY = 0;
self.caught = false;
self.update = function () {
if (!self.caught) {
// Increase speed when lives reach 1
var speedMultiplier = lives === 1 ? 1.5 : 1;
self.y += self.speed * speedMultiplier;
}
// Switch to damaged sprite when lives reach 1
if (lives === 1) {
orangeGraphics.visible = false;
orangeDamageGraphics.visible = true;
} else {
orangeGraphics.visible = true;
orangeDamageGraphics.visible = false;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Add background
var backgroundSprite = LK.getAsset('background', {
anchorX: 0,
anchorY: 0
});
backgroundSprite.x = 0;
backgroundSprite.y = 0;
game.addChild(backgroundSprite);
var backgroundDamageSprite = LK.getAsset('background_damage', {
anchorX: 0,
anchorY: 0
});
backgroundDamageSprite.x = 0;
backgroundDamageSprite.y = 0;
backgroundDamageSprite.visible = false;
game.addChild(backgroundDamageSprite);
var cat;
var oranges = [];
var gameSpeed = 1;
var orangeSpawnRate = 60; // frames between spawns
var frameCount = 0;
var lives = 3;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Create lives display
var livesTxt = new Text2('Lives: 3', {
size: 60,
fill: 0xFFFFFF
});
livesTxt.anchor.set(1, 0);
livesTxt.y = 100;
LK.gui.topRight.addChild(livesTxt);
// Create heart icon for lives
var heartIcon = LK.getAsset('heart_icon', {
anchorX: 1,
anchorY: 0
});
heartIcon.x = -10; // Position relative to topRight
heartIcon.y = 170;
LK.gui.topRight.addChild(heartIcon);
// Create damaged heart icon
var heartDamageIcon = LK.getAsset('heart_damage', {
anchorX: 1,
anchorY: 0
});
heartDamageIcon.x = -10; // Position relative to topRight
heartDamageIcon.y = 170;
heartDamageIcon.visible = false;
LK.gui.topRight.addChild(heartDamageIcon);
// Create the cat
cat = game.addChild(new Cat());
cat.x = 1024; // Center horizontally
cat.y = 2600; // Near bottom of screen
// Handle touch/mouse input
function handleMove(x, y, obj) {
if (cat) {
cat.targetX = x;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
handleMove(x, y, obj);
};
// Spawn oranges
function spawnOrange() {
var orange = new Orange();
orange.x = Math.random() * (2048 - 160) + 80; // Random x position within bounds
orange.y = -40; // Start above screen
orange.lastY = orange.y;
orange.speed = 6 + gameSpeed * 2; // Increase speed with game progression
oranges.push(orange);
game.addChild(orange);
}
// Update score display
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
}
// Update lives display
function updateLives() {
livesTxt.setText('Lives: ' + lives);
// Switch heart sprite when lives reach 1
if (lives === 1) {
heartIcon.visible = false;
heartDamageIcon.visible = true;
// Switch to hardcore music when lives reach 1
LK.playMusic('hardcore');
// Switch to damaged background
backgroundSprite.visible = false;
backgroundDamageSprite.visible = true;
} else {
heartIcon.visible = true;
heartDamageIcon.visible = false;
// Switch to normal background
backgroundSprite.visible = true;
backgroundDamageSprite.visible = false;
}
}
game.update = function () {
frameCount++;
// Spawn oranges
if (frameCount % Math.max(20, orangeSpawnRate - Math.floor(LK.getScore() / 5)) === 0) {
spawnOrange();
}
// Increase game speed over time
if (frameCount % 600 === 0) {
// Every 10 seconds at 60fps
gameSpeed += 0.2;
}
// Update oranges
for (var i = oranges.length - 1; i >= 0; i--) {
var orange = oranges[i];
// Check if orange went off screen (missed)
if (orange.lastY < 2732 && orange.y >= 2732 && !orange.caught) {
// Orange hit the ground - lose a life
lives--;
updateLives();
// Play fail sound
LK.getSound('fail').play();
if (lives <= 0) {
LK.showGameOver();
return;
}
orange.destroy();
oranges.splice(i, 1);
continue;
}
// Check collision with cat
if (!orange.caught && orange.intersects(cat)) {
// Orange caught!
orange.caught = true;
LK.setScore(LK.getScore() + 1);
updateScore();
// Play catch sound
LK.getSound('catch').play();
// Play eat sound
LK.getSound('eat').play();
// Flash effect on cat
LK.effects.flashObject(cat, 0xFFFFFF, 200);
// Trigger eating animation
cat.startEating();
// Animate orange being caught
tween(orange, {
scaleX: 0,
scaleY: 0,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
orange.destroy();
}
});
oranges.splice(i, 1);
continue;
}
orange.lastY = orange.y;
}
// Check win condition (optional - high score achievement)
if (LK.getScore() >= 100) {
LK.showYouWin();
}
};
// Start energetic dance music
LK.playMusic('Fun');
// Initialize displays
updateScore();
updateLives();
Haz un sprite de un gato azul sin pupilas con la boca abierta mirando arriba. In-Game asset. 2d. High contrast. No shadows
Una naranja cute. In-Game asset. 2d. High contrast. No shadows
Un corazón roto triste cute. In-Game asset. 2d. High contrast. No shadows
Un gato azul sin pupilas preocupado. In-Game asset. 2d. High contrast. No shadows
Un gato azul sin pupilas preocupado caminando. In-Game asset. 2d. High contrast. No shadows
Naranja cute preocupada. In-Game asset. 2d. High contrast. No shadows
Un bosque quemándose D:. In-Game asset. 2d. High contrast. No shadows