/****
* Classes
****/
// Coin class representing coins for the penguin to pick
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -5;
self.value = 10;
self.update = function () {
self.x += self.speed;
self.y += Math.sin(self.x / 100) * 10; // Add a sine wave movement to the y position
if (self.x < -100) {
self.destroy();
}
};
});
// HighCoin class representing higher coins for the penguin to pick
var HighCoin = Coin.expand(function () {
var self = Coin.call(this);
if (self) {
self.value = 5;
}
});
// Level2Obstacle class representing level 2 obstacles on the path
var Level2Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -7; // Increase speed for level 2
self.update = function () {
self.x += self.speed;
if (self.x < -100) {
self.destroy();
}
};
});
// Obstacle class representing obstacles on the path
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -5;
self.update = function () {
self.x += self.speed;
if (self.x < -100) {
self.destroy();
}
};
});
//<Assets used in the game will automatically appear here>
// Penguin class representing the player character
var Penguin = Container.expand(function () {
var self = Container.call(this);
var penguinGraphics = self.attachAsset('penguin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.jumpHeight = 55;
self.isJumping = false;
self.update = function () {
if (self.isJumping) {
self.y -= self.speed;
if (self.y <= self.jumpHeight) {
self.isJumping = false;
self.jumpHeight = Math.random() * 200; // Randomize jump height between 0 and 200
}
} else if (self.y < 2732 / 2) {
self.y += self.speed;
}
};
self.jump = function () {
if (!self.isJumping) {
self.isJumping = true;
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000080 // Set the background color to navy blue to represent underwater
});
/****
* Game Code
****/
// Add the ocean as the background
var ocean = game.addChild(LK.getAsset('Ocean', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
}));
// Set initial ocean wave direction
ocean.waveDirection = 1;
// Initialize game variables
var penguin = game.addChild(new Penguin());
penguin.x = 2048 / 2;
penguin.y = 2732 / 2;
var obstacles = [];
var coins = [];
var score = 0;
var scoreTxt = new Text2('0', {
size: 100,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var alternate = false;
// Function to handle game updates
game.update = function () {
// Animate the ocean to give the illusion of underwater waves
ocean.y += ocean.waveDirection;
if (ocean.y > 2732 / 2 + 5 || ocean.y < 2732 / 2 - 5) {
ocean.waveDirection *= -1;
}
penguin.update();
for (var i = obstacles.length - 1; i >= 0; i--) {
obstacles[i].update();
if (penguin.intersects(obstacles[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
if (LK.ticks % 60 == 0) {
var newObstacle = new Obstacle();
newObstacle.x = 2048;
newObstacle.y = alternate ? 2732 / 3 : 2732 / 2;
obstacles.push(newObstacle);
game.addChild(newObstacle);
alternate = !alternate;
}
// Add level 2 obstacles every 90 ticks
if (LK.ticks % 90 == 0) {
var newLevel2Obstacle = new Level2Obstacle();
newLevel2Obstacle.x = 2048;
newLevel2Obstacle.y = alternate ? 2732 / 2 : 2732 / 3;
obstacles.push(newLevel2Obstacle);
game.addChild(newLevel2Obstacle);
}
// Add coins every 90 ticks
if (LK.ticks % 90 == 0) {
var newCoin = alternate ? new HighCoin() : new Coin();
newCoin.x = 2048;
newCoin.y = alternate ? 2732 / 3 : 2732 / 2; // Position coins near the pingos
coins.push(newCoin);
game.addChild(newCoin);
}
// Update the score when the penguin picks a coin
for (var i = coins.length - 1; i >= 0; i--) {
if (penguin.intersects(coins[i])) {
score += coins[i].value;
coins[i].destroy();
coins.splice(i, 1);
}
}
scoreTxt.setText(score);
};
// Event listener for touch down to make the penguin jump
game.down = function (x, y, obj) {
penguin.jump();
};
// Change the color of the background once the player hits 50 points
if (score >= 50) {
game.setBackgroundColor(0x00FFFF); // Change the background color to blue
}
// Increase the speed of the obstacles and the coins once the user collects points worth 100 points
if (score >= 100) {
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed += 2;
}
for (var i = 0; i < coins.length; i++) {
coins[i].speed += 2;
}
}
// End the game when the player reaches 500 points
if (score >= 500) {
LK.showGameOver();
}