/**** * 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(); };
/****
* 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.