/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScores: [] }); /**** * Classes ****/ var Food = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'insect'; self.value = self.type === 'insect' ? 5 : 10; // Shrimp gives more energy var graphic = self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5 }); // Random movement self.speedX = (Math.random() - 0.5) * 2; self.speedY = (Math.random() - 0.5) * 2; self.update = function () { self.x += self.speedX; self.y += self.speedY; // Bounce off edges if (self.x < 50 || self.x > 2048 - 50) { self.speedX *= -1; } if (self.y < 50 || self.y > 2732 - 50) { self.speedY *= -1; } }; return self; }); var HideSpot = Container.expand(function () { var self = Container.call(this); var graphic = self.attachAsset('hideSpot', { anchorX: 0.5, anchorY: 0.5, alpha: 0.7 }); return self; }); var Platypus = Container.expand(function () { var self = Container.call(this); // Create platypus body var body = self.attachAsset('platypus', { anchorX: 0.5, anchorY: 0.5 }); // Platypus properties self.speed = 8; self.energy = 100; self.maxEnergy = 100; self.hidden = false; self.invulnerable = false; // Movement target for smooth motion self.targetX = 0; self.targetY = 0; self.update = function () { // Move towards target position smoothly if (Math.abs(self.x - self.targetX) > 5 || Math.abs(self.y - self.targetY) > 5) { var dx = self.targetX - self.x; var dy = self.targetY - self.y; var angle = Math.atan2(dy, dx); self.x += Math.cos(angle) * self.speed; self.y += Math.sin(angle) * self.speed; // Rotate platypus to face movement direction self.rotation = angle; } // Decrease energy over time if (LK.ticks % 60 === 0 && !self.hidden) { self.energy -= 1; if (self.energy <= 0) { self.energy = 0; // Update high score list var highScores = storage.highScores; highScores.push(score); highScores.sort(function (a, b) { return b - a; }); if (highScores.length > 5) { highScores.pop(); // Keep only top 5 scores } storage.highScores = highScores; // Update high score list var highScores = storage.highScores; highScores.push(score); highScores.sort(function (a, b) { return b - a; }); if (highScores.length > 5) { highScores.pop(); // Keep only top 5 scores } storage.highScores = highScores; scoreTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(scoreTxt); scoreTxt.y = 0; // Update high score list var highScores = storage.highScores; highScores.push(score); highScores.sort(function (a, b) { return b - a; }); if (highScores.length > 5) { highScores.pop(); // Keep only top 5 scores } storage.highScores = highScores; LK.showGameOver(); } } }; self.hide = function () { if (!self.hidden) { self.hidden = true; LK.getSound('hide').play(); tween(self, { alpha: 0.3 }, { duration: 300 }); } }; self.unhide = function () { if (self.hidden) { self.hidden = true; tween(self, { alpha: 1 }, { duration: 300, onFinish: function onFinish() { self.hidden = false; } }); } }; self.makeInvulnerable = function (duration) { self.invulnerable = true; // Flash effect to show invulnerability var flashCount = 0; var flashInterval = LK.setInterval(function () { body.alpha = body.alpha === 1 ? 0.3 : 1; // Removed reference to undefined 'bill' flashCount++; if (flashCount >= 10) { LK.clearInterval(flashInterval); body.alpha = 1; self.invulnerable = false; } }, 150); }; self.takeDamage = function (amount) { if (!self.invulnerable && !self.hidden) { self.energy -= amount; LK.getSound('damage').play(); LK.effects.flashScreen(0xFF0000, 300); if (self.energy <= 0) { self.energy = 0; // Update high score list var highScores = storage.highScores; highScores.push(score); highScores.sort(function (a, b) { return b - a; }); if (highScores.length > 5) { highScores.pop(); // Keep only top 5 scores } storage.highScores = highScores; scoreTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(scoreTxt); scoreTxt.y = 0; LK.showGameOver(); } else { self.makeInvulnerable(1500); } } }; return self; }); var Predator = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'snake'; // Different predators have different damage and speed switch (self.type) { case 'snake': self.damage = 20; self.moveSpeed = 3; break; case 'waterRat': self.damage = 15; self.moveSpeed = 4; break; case 'goanna': self.damage = 25; self.moveSpeed = 2.5; break; default: self.damage = 15; self.moveSpeed = 3; } var graphic = self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5 }); // Target positions for movement self.targetX = 0; self.targetY = 0; self.active = true; self.update = function () { if (self.active) { // Move towards target var dx = self.targetX - self.x; var dy = self.targetY - self.y; var angle = Math.atan2(dy, dx); self.x += Math.cos(angle) * self.moveSpeed; self.y += Math.sin(angle) * self.moveSpeed; // Rotate to face movement direction self.rotation = angle; // Change direction occasionally or if close to target if (LK.ticks % 120 === 0 || Math.abs(dx) < 20 && Math.abs(dy) < 20) { self.pickNewTarget(); } } }; self.pickNewTarget = function () { self.targetX = 100 + Math.random() * (2048 - 200); self.targetY = 100 + Math.random() * (2732 - 200); }; // Initial target self.pickNewTarget(); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x4DA6FF }); /**** * Game Code ****/ var background = LK.getAsset('waterBackground', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(background); // Create game title var gameTitle = new Text2('Platypus Adventure', { size: 100, fill: 0x000000, fontWeight: 'bold' }); gameTitle.anchor.set(0.5, 0.5); LK.gui.center.addChild(gameTitle); gameTitle.y = -200; // Create UI var score = 0; var level = 1; var foodEaten = 0; var foodItems = []; var predators = []; var hideSpots = []; var gameStarted = false; var spawnInterval = null; var predatorInterval = null; var dragNode = null; // Create platypus var platypus = new Platypus(); platypus.x = 2048 / 2; platypus.y = 2732 / 2; game.addChild(platypus); // Create hide spots function createHideSpots() { // Create 5 hide spots around the pond for (var i = 0; i < 5; i++) { var hideSpot = new HideSpot(); hideSpot.x = 300 + Math.random() * (2048 - 600); hideSpot.y = 300 + Math.random() * (2732 - 600); game.addChild(hideSpot); hideSpots.push(hideSpot); } } // Create UI var scoreTxt = new Text2('Score: 0', { size: 80, // Increased size to make the text larger fill: 0x000000, fontWeight: 'bold' // Make text bolder and thicker }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); scoreTxt.y = 60; // Energy bar background var energyBarBg = LK.getAsset('energyBarBg', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.bottom.addChild(energyBarBg); energyBarBg.y = -100; // Energy bar var energyBar = LK.getAsset('energyBar', { anchorX: 0, anchorY: 0.5, x: -250, y: 0 }); energyBarBg.addChild(energyBar); // Instructions text var instructionsTxt = new Text2('Tap to guide your platypus. Catch food and avoid predators!', { size: 40, fill: 0x000000, fontWeight: 'bold' // Make text bolder and thicker }); instructionsTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(instructionsTxt); // Start game function function startGame() { if (!gameStarted) { // Remove game title gameTitle.destroy(); gameStarted = true; createHideSpots(); // Remove instructions instructionsTxt.destroy(); // Schedule food spawning spawnInterval = LK.setInterval(function () { spawnFood(); }, 2000); // Schedule predator spawning predatorInterval = LK.setInterval(function () { spawnPredator(); }, 5000); // Play background music LK.playMusic('gameMusic'); } } // Spawn food function spawnFood() { var foodType = Math.random() < 0.7 ? 'insect' : 'shrimp'; var food = new Food(foodType); // Spawn food at random positions, but not too close to the edges food.x = 100 + Math.random() * (2048 - 200); food.y = 100 + Math.random() * (2732 - 200); game.addChild(food); foodItems.push(food); // Food automatically disappears after some time LK.setTimeout(function () { if (foodItems.indexOf(food) !== -1) { foodItems.splice(foodItems.indexOf(food), 1); food.destroy(); } }, 10000); } // Spawn predator function spawnPredator() { // Don't spawn too many predators if (predators.length >= 5) { return; } // Choose predator type based on the current level var types = []; if (level >= 1) { types.push('waterRat'); } if (level >= 2) { types.push('snake'); } if (level >= 3) { types.push('goanna'); } var randomType = types[Math.floor(Math.random() * types.length)]; var predator = new Predator(randomType); // Spawn predator at edge of screen var side = Math.floor(Math.random() * 4); switch (side) { case 0: // Top predator.x = Math.random() * 2048; predator.y = -50; break; case 1: // Right predator.x = 2048 + 50; predator.y = Math.random() * 2732; break; case 2: // Bottom predator.x = Math.random() * 2048; predator.y = 2732 + 50; break; case 3: // Left predator.x = -50; predator.y = Math.random() * 2732; break; } game.addChild(predator); predators.push(predator); // Predator leaves after some time LK.setTimeout(function () { if (predators.indexOf(predator) !== -1) { predators.splice(predators.indexOf(predator), 1); predator.destroy(); } }, 15000 + Math.random() * 10000); } // Check if platypus is in a hide spot function checkHideSpots() { var inHideSpot = false; for (var i = 0; i < hideSpots.length; i++) { if (platypus.intersects(hideSpots[i])) { inHideSpot = true; if (!platypus.hidden) { platypus.hide(); } break; } } if (!inHideSpot && platypus.hidden) { platypus.unhide(); } } // Handle game input function handleMove(x, y, obj) { if (dragNode) { dragNode.targetX = x; dragNode.targetY = y; } } game.move = handleMove; game.down = function (x, y, obj) { if (!gameStarted) { startGame(); } dragNode = platypus; platypus.targetX = x; platypus.targetY = y; handleMove(x, y, obj); }; game.up = function (x, y, obj) { dragNode = null; }; // Main game update game.update = function () { // Update energy bar energyBar.width = platypus.energy / platypus.maxEnergy * 500; // Check if platypus is in a hide spot checkHideSpots(); // Check for food collisions for (var i = foodItems.length - 1; i >= 0; i--) { if (platypus.intersects(foodItems[i])) { // Eat food var food = foodItems[i]; platypus.energy = Math.min(platypus.maxEnergy, platypus.energy + food.value); score += food.value; scoreTxt.setText("Score: " + score + " | Level: " + level); foodEaten += 1; if (score >= level * 100) { level += 1; console.log("Level Up! Current Level: " + level); // Increase predator speed with each level up predators.forEach(function (predator) { predator.moveSpeed += 0.5; // Increase speed by 0.5 for each level }); // Remove one hiding spot every level up if (hideSpots.length > 0) { var removedHideSpot = hideSpots.pop(); removedHideSpot.destroy(); } } scoreTxt.setText("Score: " + score + " | Level: " + level); // Remove food foodItems.splice(i, 1); food.destroy(); // Create splash effect var splash = LK.getAsset('splash', { anchorX: 0.5, anchorY: 0.5, x: food.x, y: food.y, alpha: 0.7 }); game.addChild(splash); tween(splash, { alpha: 0 }, { duration: 800, onFinish: function onFinish() { splash.destroy(); } }); // Play eat sound LK.getSound('eat').play(); } } // Check for predator collisions for (var j = 0; j < predators.length; j++) { var predator = predators[j]; // Predator follows platypus if not hidden if (!platypus.hidden && LK.ticks % 60 === 0) { var chaseChance = 0.7; if (Math.random() < chaseChance) { predator.targetX = platypus.x; predator.targetY = platypus.y; } } // Check collision with platypus if (platypus.intersects(predator) && !platypus.hidden) { platypus.takeDamage(predator.damage); score = Math.max(0, score - 2); // Deduct 2 points, ensuring score doesn't go below 0 scoreTxt.setText("Score: " + score + " | Level: " + level); // Push predator away from platypus var pushAngle = Math.atan2(predator.y - platypus.y, predator.x - platypus.x); predator.x += Math.cos(pushAngle) * 150; predator.y += Math.sin(pushAngle) * 150; predator.pickNewTarget(); } } // Spawn initial food if game has started if (gameStarted && foodItems.length === 0 && LK.ticks === 10) { for (var k = 0; k < 3; k++) { spawnFood(); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScores: []
});
/****
* Classes
****/
var Food = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'insect';
self.value = self.type === 'insect' ? 5 : 10; // Shrimp gives more energy
var graphic = self.attachAsset(self.type, {
anchorX: 0.5,
anchorY: 0.5
});
// Random movement
self.speedX = (Math.random() - 0.5) * 2;
self.speedY = (Math.random() - 0.5) * 2;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
// Bounce off edges
if (self.x < 50 || self.x > 2048 - 50) {
self.speedX *= -1;
}
if (self.y < 50 || self.y > 2732 - 50) {
self.speedY *= -1;
}
};
return self;
});
var HideSpot = Container.expand(function () {
var self = Container.call(this);
var graphic = self.attachAsset('hideSpot', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
return self;
});
var Platypus = Container.expand(function () {
var self = Container.call(this);
// Create platypus body
var body = self.attachAsset('platypus', {
anchorX: 0.5,
anchorY: 0.5
});
// Platypus properties
self.speed = 8;
self.energy = 100;
self.maxEnergy = 100;
self.hidden = false;
self.invulnerable = false;
// Movement target for smooth motion
self.targetX = 0;
self.targetY = 0;
self.update = function () {
// Move towards target position smoothly
if (Math.abs(self.x - self.targetX) > 5 || Math.abs(self.y - self.targetY) > 5) {
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var angle = Math.atan2(dy, dx);
self.x += Math.cos(angle) * self.speed;
self.y += Math.sin(angle) * self.speed;
// Rotate platypus to face movement direction
self.rotation = angle;
}
// Decrease energy over time
if (LK.ticks % 60 === 0 && !self.hidden) {
self.energy -= 1;
if (self.energy <= 0) {
self.energy = 0;
// Update high score list
var highScores = storage.highScores;
highScores.push(score);
highScores.sort(function (a, b) {
return b - a;
});
if (highScores.length > 5) {
highScores.pop(); // Keep only top 5 scores
}
storage.highScores = highScores;
// Update high score list
var highScores = storage.highScores;
highScores.push(score);
highScores.sort(function (a, b) {
return b - a;
});
if (highScores.length > 5) {
highScores.pop(); // Keep only top 5 scores
}
storage.highScores = highScores;
scoreTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(scoreTxt);
scoreTxt.y = 0;
// Update high score list
var highScores = storage.highScores;
highScores.push(score);
highScores.sort(function (a, b) {
return b - a;
});
if (highScores.length > 5) {
highScores.pop(); // Keep only top 5 scores
}
storage.highScores = highScores;
LK.showGameOver();
}
}
};
self.hide = function () {
if (!self.hidden) {
self.hidden = true;
LK.getSound('hide').play();
tween(self, {
alpha: 0.3
}, {
duration: 300
});
}
};
self.unhide = function () {
if (self.hidden) {
self.hidden = true;
tween(self, {
alpha: 1
}, {
duration: 300,
onFinish: function onFinish() {
self.hidden = false;
}
});
}
};
self.makeInvulnerable = function (duration) {
self.invulnerable = true;
// Flash effect to show invulnerability
var flashCount = 0;
var flashInterval = LK.setInterval(function () {
body.alpha = body.alpha === 1 ? 0.3 : 1;
// Removed reference to undefined 'bill'
flashCount++;
if (flashCount >= 10) {
LK.clearInterval(flashInterval);
body.alpha = 1;
self.invulnerable = false;
}
}, 150);
};
self.takeDamage = function (amount) {
if (!self.invulnerable && !self.hidden) {
self.energy -= amount;
LK.getSound('damage').play();
LK.effects.flashScreen(0xFF0000, 300);
if (self.energy <= 0) {
self.energy = 0;
// Update high score list
var highScores = storage.highScores;
highScores.push(score);
highScores.sort(function (a, b) {
return b - a;
});
if (highScores.length > 5) {
highScores.pop(); // Keep only top 5 scores
}
storage.highScores = highScores;
scoreTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(scoreTxt);
scoreTxt.y = 0;
LK.showGameOver();
} else {
self.makeInvulnerable(1500);
}
}
};
return self;
});
var Predator = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'snake';
// Different predators have different damage and speed
switch (self.type) {
case 'snake':
self.damage = 20;
self.moveSpeed = 3;
break;
case 'waterRat':
self.damage = 15;
self.moveSpeed = 4;
break;
case 'goanna':
self.damage = 25;
self.moveSpeed = 2.5;
break;
default:
self.damage = 15;
self.moveSpeed = 3;
}
var graphic = self.attachAsset(self.type, {
anchorX: 0.5,
anchorY: 0.5
});
// Target positions for movement
self.targetX = 0;
self.targetY = 0;
self.active = true;
self.update = function () {
if (self.active) {
// Move towards target
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var angle = Math.atan2(dy, dx);
self.x += Math.cos(angle) * self.moveSpeed;
self.y += Math.sin(angle) * self.moveSpeed;
// Rotate to face movement direction
self.rotation = angle;
// Change direction occasionally or if close to target
if (LK.ticks % 120 === 0 || Math.abs(dx) < 20 && Math.abs(dy) < 20) {
self.pickNewTarget();
}
}
};
self.pickNewTarget = function () {
self.targetX = 100 + Math.random() * (2048 - 200);
self.targetY = 100 + Math.random() * (2732 - 200);
};
// Initial target
self.pickNewTarget();
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4DA6FF
});
/****
* Game Code
****/
var background = LK.getAsset('waterBackground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChild(background);
// Create game title
var gameTitle = new Text2('Platypus Adventure', {
size: 100,
fill: 0x000000,
fontWeight: 'bold'
});
gameTitle.anchor.set(0.5, 0.5);
LK.gui.center.addChild(gameTitle);
gameTitle.y = -200;
// Create UI
var score = 0;
var level = 1;
var foodEaten = 0;
var foodItems = [];
var predators = [];
var hideSpots = [];
var gameStarted = false;
var spawnInterval = null;
var predatorInterval = null;
var dragNode = null;
// Create platypus
var platypus = new Platypus();
platypus.x = 2048 / 2;
platypus.y = 2732 / 2;
game.addChild(platypus);
// Create hide spots
function createHideSpots() {
// Create 5 hide spots around the pond
for (var i = 0; i < 5; i++) {
var hideSpot = new HideSpot();
hideSpot.x = 300 + Math.random() * (2048 - 600);
hideSpot.y = 300 + Math.random() * (2732 - 600);
game.addChild(hideSpot);
hideSpots.push(hideSpot);
}
}
// Create UI
var scoreTxt = new Text2('Score: 0', {
size: 80,
// Increased size to make the text larger
fill: 0x000000,
fontWeight: 'bold' // Make text bolder and thicker
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 60;
// Energy bar background
var energyBarBg = LK.getAsset('energyBarBg', {
anchorX: 0.5,
anchorY: 0.5
});
LK.gui.bottom.addChild(energyBarBg);
energyBarBg.y = -100;
// Energy bar
var energyBar = LK.getAsset('energyBar', {
anchorX: 0,
anchorY: 0.5,
x: -250,
y: 0
});
energyBarBg.addChild(energyBar);
// Instructions text
var instructionsTxt = new Text2('Tap to guide your platypus. Catch food and avoid predators!', {
size: 40,
fill: 0x000000,
fontWeight: 'bold' // Make text bolder and thicker
});
instructionsTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionsTxt);
// Start game function
function startGame() {
if (!gameStarted) {
// Remove game title
gameTitle.destroy();
gameStarted = true;
createHideSpots();
// Remove instructions
instructionsTxt.destroy();
// Schedule food spawning
spawnInterval = LK.setInterval(function () {
spawnFood();
}, 2000);
// Schedule predator spawning
predatorInterval = LK.setInterval(function () {
spawnPredator();
}, 5000);
// Play background music
LK.playMusic('gameMusic');
}
}
// Spawn food
function spawnFood() {
var foodType = Math.random() < 0.7 ? 'insect' : 'shrimp';
var food = new Food(foodType);
// Spawn food at random positions, but not too close to the edges
food.x = 100 + Math.random() * (2048 - 200);
food.y = 100 + Math.random() * (2732 - 200);
game.addChild(food);
foodItems.push(food);
// Food automatically disappears after some time
LK.setTimeout(function () {
if (foodItems.indexOf(food) !== -1) {
foodItems.splice(foodItems.indexOf(food), 1);
food.destroy();
}
}, 10000);
}
// Spawn predator
function spawnPredator() {
// Don't spawn too many predators
if (predators.length >= 5) {
return;
}
// Choose predator type based on the current level
var types = [];
if (level >= 1) {
types.push('waterRat');
}
if (level >= 2) {
types.push('snake');
}
if (level >= 3) {
types.push('goanna');
}
var randomType = types[Math.floor(Math.random() * types.length)];
var predator = new Predator(randomType);
// Spawn predator at edge of screen
var side = Math.floor(Math.random() * 4);
switch (side) {
case 0:
// Top
predator.x = Math.random() * 2048;
predator.y = -50;
break;
case 1:
// Right
predator.x = 2048 + 50;
predator.y = Math.random() * 2732;
break;
case 2:
// Bottom
predator.x = Math.random() * 2048;
predator.y = 2732 + 50;
break;
case 3:
// Left
predator.x = -50;
predator.y = Math.random() * 2732;
break;
}
game.addChild(predator);
predators.push(predator);
// Predator leaves after some time
LK.setTimeout(function () {
if (predators.indexOf(predator) !== -1) {
predators.splice(predators.indexOf(predator), 1);
predator.destroy();
}
}, 15000 + Math.random() * 10000);
}
// Check if platypus is in a hide spot
function checkHideSpots() {
var inHideSpot = false;
for (var i = 0; i < hideSpots.length; i++) {
if (platypus.intersects(hideSpots[i])) {
inHideSpot = true;
if (!platypus.hidden) {
platypus.hide();
}
break;
}
}
if (!inHideSpot && platypus.hidden) {
platypus.unhide();
}
}
// Handle game input
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.targetX = x;
dragNode.targetY = y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
if (!gameStarted) {
startGame();
}
dragNode = platypus;
platypus.targetX = x;
platypus.targetY = y;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update
game.update = function () {
// Update energy bar
energyBar.width = platypus.energy / platypus.maxEnergy * 500;
// Check if platypus is in a hide spot
checkHideSpots();
// Check for food collisions
for (var i = foodItems.length - 1; i >= 0; i--) {
if (platypus.intersects(foodItems[i])) {
// Eat food
var food = foodItems[i];
platypus.energy = Math.min(platypus.maxEnergy, platypus.energy + food.value);
score += food.value;
scoreTxt.setText("Score: " + score + " | Level: " + level);
foodEaten += 1;
if (score >= level * 100) {
level += 1;
console.log("Level Up! Current Level: " + level);
// Increase predator speed with each level up
predators.forEach(function (predator) {
predator.moveSpeed += 0.5; // Increase speed by 0.5 for each level
});
// Remove one hiding spot every level up
if (hideSpots.length > 0) {
var removedHideSpot = hideSpots.pop();
removedHideSpot.destroy();
}
}
scoreTxt.setText("Score: " + score + " | Level: " + level);
// Remove food
foodItems.splice(i, 1);
food.destroy();
// Create splash effect
var splash = LK.getAsset('splash', {
anchorX: 0.5,
anchorY: 0.5,
x: food.x,
y: food.y,
alpha: 0.7
});
game.addChild(splash);
tween(splash, {
alpha: 0
}, {
duration: 800,
onFinish: function onFinish() {
splash.destroy();
}
});
// Play eat sound
LK.getSound('eat').play();
}
}
// Check for predator collisions
for (var j = 0; j < predators.length; j++) {
var predator = predators[j];
// Predator follows platypus if not hidden
if (!platypus.hidden && LK.ticks % 60 === 0) {
var chaseChance = 0.7;
if (Math.random() < chaseChance) {
predator.targetX = platypus.x;
predator.targetY = platypus.y;
}
}
// Check collision with platypus
if (platypus.intersects(predator) && !platypus.hidden) {
platypus.takeDamage(predator.damage);
score = Math.max(0, score - 2); // Deduct 2 points, ensuring score doesn't go below 0
scoreTxt.setText("Score: " + score + " | Level: " + level);
// Push predator away from platypus
var pushAngle = Math.atan2(predator.y - platypus.y, predator.x - platypus.x);
predator.x += Math.cos(pushAngle) * 150;
predator.y += Math.sin(pushAngle) * 150;
predator.pickNewTarget();
}
}
// Spawn initial food if game has started
if (gameStarted && foodItems.length === 0 && LK.ticks === 10) {
for (var k = 0; k < 3; k++) {
spawnFood();
}
}
};
Cute Platypus swimming. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. In game asset main character 2d
Dragonfly, small but detailed. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Green reeds with Lilly pad. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Light Brown moving snake top down view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Goanna swimming top down view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Pink shrimp. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Water rat swimming top down view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Small splash in water. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Green water energy bar. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows