/****
* Classes
****/
// Define the BackgroundContainer class
var BackgroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
// Define the Left Coin class
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1 // Flip the X axis
});
self.speed = 10;
self.update = function () {
self.x += self.speed;
self.y += Math.sin(LK.ticks / 4) * 8; // Add shake effect
if (self.intersects(player)) {
LK.setScore(LK.getScore() + 1);
scoreText.setText(LK.getScore());
LK.getSound('Eat').play(); // Play the Eat sound
self.destroy();
} else if (self.x > 2048 + self.width) {
self.destroy();
}
};
return self;
});
// Define the Right Coins class
var CoinLeft = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: +1 // Flip the X axis
});
self.speed = -10;
self.update = function () {
self.x += self.speed;
self.y += Math.sin(LK.ticks / 4) * 8; // Add shake effect
if (self.intersects(player)) {
LK.setScore(LK.getScore() + 1);
scoreText.setText(LK.getScore());
LK.getSound('Eat').play(); // Play the Eat sound
self.destroy();
} else if (self.x < -self.width) {
self.destroy();
}
};
return self;
});
// Define the ForegroundContainer class
var ForegroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
// Define the Life class
var Life = Container.expand(function () {
var self = Container.call(this);
var lifeGraphics = self.attachAsset('Life', {
anchorX: 0.5,
anchorY: 0.5
});
self.direction = 1; // 1 for right, -1 for left
self.speed = 4;
self.x = lifeGraphics.width / 2 + 500; // Position at left edge of the screen
self.y = 260; // Lower y position
self.update = function () {
self.x += self.speed * self.direction;
// Check if life's edge has reached the edge of the screen
if (self.x + lifeGraphics.width / 2 >= 2048 - 500 || self.x - lifeGraphics.width / 2 <= 500) {
self.direction *= -1; // Change direction
}
};
return self;
});
// Define the Lives class
var Lives = Container.expand(function () {
var self = Container.call(this);
self.lives = 5; // Start with 5 lives
self.livesGraphics = []; // Array to hold the life graphics
// Create 5 life graphics and add them to the livesGraphics array
for (var i = 0; i < self.lives; i++) {
var lifeGraphic = LK.getAsset('Life', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8,
x: i * 120 // Position each life graphic 130 pixels apart
});
self.addChild(lifeGraphic);
self.livesGraphics.push(lifeGraphic);
}
// Method to deduct a life
self.deductLife = function () {
if (self.lives > 0) {
self.lives--;
// Turn the deducted life graphic black
self.livesGraphics[self.lives].tint = 0x000000;
if (self.lives === 0) {
LK.showGameOver();
}
}
};
// Method to refill a life
self.refillLife = function () {
if (self.lives < 5) {
// Turn the refilled life graphic back to its original color
self.livesGraphics[self.lives].tint = 0xFFFFFF;
self.lives++;
} else if (self.lives === 5) {
// Add a temporary 6th life
var tempLifeGraphic = LK.getAsset('Life', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8,
x: self.lives * 120 // Position the temporary life graphic
});
self.addChild(tempLifeGraphic);
self.livesGraphics.push(tempLifeGraphic);
self.lives++;
}
};
return self;
});
// Define the MidgroundContainer class
var MidgroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
//<Assets used in the game will automatically appear here>
// Define the Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.isJumping = false;
self.isInAir = false;
self.jumpStartTime = 0;
self.jumpCharge = 0;
self.update = function () {
if (self.isJumping) {
self.jumpCharge = Math.min(60, LK.ticks - self.jumpStartTime);
} else {
self.velocityY += 1; // Gravity
if (self.jumpCharge > 0) {
self.velocityY = -Math.max(25, self.jumpCharge * 1.3); // Multiply the jump charge by 2 to increase the jump height, with a minimum jump height of 10
self.jumpCharge = 0;
}
}
self.y += self.velocityY;
// Slide the background down when the player jumps
if (self.velocityY < 0) {
backgroundContainer.y = Math.max(initialBackgroundY - self.jumpCharge * 0.3, backgroundContainer.y - self.velocityY * 0.3);
} else if (self.velocityY > 0) {
backgroundContainer.y = Math.max(initialBackgroundY, backgroundContainer.y - self.velocityY);
}
// Check if player's top edge has reached the top of the screen
if (self.y - playerGraphics.height <= 0) {
LK.showGameOver();
}
// Prevent player from falling below the ground
if (self.y > 2940 - playerGraphics.height) {
self.y = 2940 - playerGraphics.height;
self.velocityY = 0;
self.isOnGround = true;
if (self.isInAir) {
self.isInAir = false;
self.removeChildren(); // Remove all children (including player_jump asset)
self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
LK.getSound('Land').play(); // Play the Land sound
if (lives.lives === 6) {
// Remove the temporary 6th life
lives.livesGraphics[5].destroy();
lives.livesGraphics.pop();
lives.lives--;
} else {
lives.deductLife(); // Deduct a life when the player returns to the ground
}
}
} else {
self.isOnGround = false;
}
// Add a shake effect to the player when the jump is being charged
if (self.shake) {
self.x += Math.sin(LK.ticks / 1) * 3;
}
};
self.startJump = function () {
if (self.isOnGround) {
self.isJumping = true;
self.jumpStartTime = LK.ticks;
}
};
self.endJump = function () {
self.isJumping = false;
self.isInAir = true;
// Smoothly slide the background back up to its original position
var slideUpInterval = LK.setInterval(function () {
if (backgroundContainer.y < initialBackgroundY) {
backgroundContainer.y += 10; // Adjust the speed as needed
} else {
LK.clearInterval(slideUpInterval);
backgroundContainer.y = initialBackgroundY; // Ensure it snaps to the exact position
}
}, 16); // Approximately 60 FPS
self.removeChildren(); // Remove all children (including player asset)
self.attachAsset('player_jump', {
anchorX: 0.5,
anchorY: 1.0
});
};
return self;
});
// Define the Spawner class
var Spawner = Container.expand(function (spawnRate, y) {
var self = Container.call(this);
self.spawnRate = spawnRate;
self.y = y;
self.spawnTimer = 0;
self.update = function () {
self.spawnTimer++;
if (self.spawnTimer >= self.spawnRate) {
var coin = game.addChild(new Coin());
coin.x = -50;
coin.y = self.y;
self.spawnTimer = 0;
}
};
return self;
});
// Define the SpawnerLeft class
var SpawnerLeft = Container.expand(function (spawnRate, y) {
var self = Container.call(this);
self.spawnRate = spawnRate;
self.y = y;
self.spawnTimer = 0;
self.update = function () {
self.spawnTimer++;
if (self.spawnTimer >= self.spawnRate) {
var coin = game.addChild(new CoinLeft());
coin.x = 2098;
coin.y = self.y;
self.spawnTimer = 0;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x77c3fa // Sky blue background
});
/****
* Game Code
****/
LK.playMusic('backgroundMusic', {
loop: true
});
var backgroundContainer = game.addChild(new BackgroundContainer());
var initialBackgroundY = backgroundContainer.y; // Store initial background position
var backgroundImage = LK.getAsset('background', {
anchorX: 0.0,
anchorY: 0.0,
scaleX: 1,
scaleY: 1,
x: 0,
y: 0
});
backgroundContainer.addChild(backgroundImage);
var midgroundContainer = game.addChild(new MidgroundContainer());
var foregroundContainer = game.addChild(new ForegroundContainer());
var player = foregroundContainer.addChild(new Player());
player.collectedLifeOnFirstJump = false;
var lives = midgroundContainer.addChild(new Lives());
lives.x = game.width / 2 - 235;
lives.y = 70; // Position the lives system in the center of the screen
game.update = function () {
player.update();
life.update();
// Update the spawners on the right side of the screen
for (var i = 0; i < spawnersLeft.length; i++) {
spawnersLeft[i].update();
}
// Update the spawners
for (var i = 0; i < spawners.length; i++) {
spawners[i].update();
}
if (player.intersects(life)) {
life.destroy();
life = game.addChild(new Life());
lives.refillLife(); // Refill a life when the player collects the moving Life
LK.getSound('Life').play(); // Play the Life sound
if (player.isOnGround) {
player.collectedLifeOnFirstJump = true;
}
}
life.update();
};
// Create and add score text to the midground container
var scoreText = new Text2('0', {
size: 200,
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 15,
anchorX: 0.5,
anchorY: 0.5
});
scoreText.x = game.width / 2;
scoreText.y = game.height / 2 - 1110;
scoreText.anchor.set(0.5, 0.5);
midgroundContainer.addChild(scoreText);
var life = foregroundContainer.addChild(new Life());
player.x = 2048 / 2;
player.y = 2732 - player.height;
// Create the spawners
var spawners = [];
for (var i = 0; i < 5; i++) {
var spawner = foregroundContainer.addChild(new Spawner(40 * (i + 1), 2732 / 7 * i + 500));
spawners.push(spawner);
}
// Create the spawners on the right side of the screen
var spawnersLeft = [];
for (var i = 0; i < 5; i++) {
var spawner = foregroundContainer.addChild(new SpawnerLeft(60 * (i + 1), 2732 / 7 * i + 700));
spawnersLeft.push(spawner);
}
game.down = function (x, y, obj) {
if (!player.isInAir) {
player.startJump();
LK.getSound('Charge').play();
player.shake = true;
}
};
game.up = function (x, y, obj) {
player.endJump();
LK.getSound('Charge').stop();
LK.getSound('Jump').play();
player.shake = false;
};
game.update = function () {
player.update();
life.update();
// Update the spawners on the right side of the screen
for (var i = 0; i < spawnersLeft.length; i++) {
spawnersLeft[i].update();
}
// Update the spawners
for (var i = 0; i < spawners.length; i++) {
spawners[i].update();
}
if (player.intersects(life)) {
life.destroy();
life = game.addChild(new Life());
lives.refillLife(); // Refill a life when the player collects the moving Life
LK.getSound('Life').play(); // Play the Life sound
}
life.update();
};
pixelated 8-bit cute sitting frog seen from the front. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixelated 8-bit cute jumping frog seen from the front. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
background of a pond in the middle of the nature. pixelated 8-bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.