/**** * Classes ****/ // Define a class for bee enemies var Bee = Container.expand(function () { var self = Container.call(this); var beeGraphics = self.attachAsset('Bee', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; // Slightly faster than regular enemies self.verticalSpeed = 2; self.direction = 1; // 1 for down, -1 for up self.verticalRange = 150; // How far the bee can move up and down self.startY = 0; // Will be set on initialization self.update = function () { // Move horizontally self.x -= self.speed; // Move vertically in a wave pattern self.y += self.verticalSpeed * self.direction; // Change direction when reaching vertical limits if (self.y > self.startY + self.verticalRange) { self.direction = -1; } else if (self.y < self.startY - self.verticalRange) { self.direction = 1; } // Remove when off screen if (self.x < -50) { self.destroy(); } }; return self; }); // Define a class for collectible coins 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.update = function () { self.x -= self.speed; // Remove when off screen if (self.x < -50) { self.destroy(); } }; return self; }); // Define a class for enemies var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; return self; }); // Define a class for monster enemies var Monster = Container.expand(function () { var self = Container.call(this); var monsterGraphics = self.attachAsset('Enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 4; // Slightly slower than regular enemies self.health = 2; // Monsters take two hits to defeat self.update = function () { self.x -= self.speed; // Remove when off screen if (self.x < -50) { self.destroy(); } }; return self; }); //<Assets used in the game will automatically appear here> // Define a class for the player character var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.jumpHeight = 30; // Slightly increased jump height self.isJumping = false; self.velocityY = 0; self.jumpCount = 0; // Track number of jumps self.maxJumps = 2; // Allow double jump self.update = function () { if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; // Decreased gravity effect by 30% if (self.y >= 2732 * 0.8) { // Ground level self.y = 2732 * 0.8; self.isJumping = false; self.velocityY = 0; self.jumpCount = 0; // Reset jump count when landing } } }; self.jump = function () { if (!self.isJumping || self.jumpCount < self.maxJumps) { self.isJumping = true; self.velocityY = -self.jumpHeight; self.jumpCount++; // Increment jump count } }; }); // Define a class for Mario portal var Portal = Container.expand(function () { var self = Container.call(this); var portalGraphics = self.attachAsset('Creat', { anchorX: 0.5, anchorY: 0.5 }); // Scale up the portal for better visibility portalGraphics.scale.set(2.5, 2.5); // Set movement properties similar to monsters self.speed = 3; // Slightly slower than other enemies // Add a rotation animation to make it look more like a portal self.update = function () { // Move horizontally like enemies self.x -= self.speed; // Continue rotating portalGraphics.rotation += 0.02; // Remove when off screen if (self.x < -50) { self.destroy(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0 })); background.x = 0; background.y = 0; // Initialize player var player = game.addChild(new Player()); player.x = 2048 / 2; player.y = 2732 * 0.8; // Position player lower on the screen // Initialize enemies var enemies = []; var enemySpawnInterval = 100; var enemySpawnCounter = 0; // Initialize bees var bees = []; var beeSpawnInterval = 200; var beeSpawnCounter = 0; // Initialize coins var coins = []; var coinSpawnInterval = 80; var coinSpawnCounter = 0; // Initialize monsters var monsters = []; var monsterSpawnInterval = 300; var monsterSpawnCounter = 0; // Initialize portals var portals = []; var portalCount = 3; // Number of portals to create var enemyKillCount = 0; // Track enemy kills for portal spawning var needPortalSpawn = false; // Flag to trigger portal spawn // Create a new Text2 object to display the score var scoreText = new Text2('Puan: 0', { size: 100, fill: 0xFFFFFF }); // Add the score text to the game GUI at the top center of the screen LK.gui.top.addChild(scoreText); scoreText.x = 2048 / 2; scoreText.y = 0; // Function to spawn portals function spawnPortal() { var portal = new Portal(); portal.x = 2048; portal.y = 2732 * 0.8; // Position at same height as other characters portals.push(portal); game.addChild(portal); needPortalSpawn = false; // Reset the spawn flag } // Portal spawning is now tied to enemy kills, no need for timed spawning // Handle game updates game.update = function () { player.update(); // Spawn enemies enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 * 0.8; // Position enemies at the same height as player enemies.push(enemy); game.addChild(enemy); // Randomize the spawn interval for the next enemy enemySpawnInterval = Math.floor(Math.random() * 150) + 50; enemySpawnCounter = 0; } // Spawn bees beeSpawnCounter++; if (beeSpawnCounter >= beeSpawnInterval) { var bee = new Bee(); bee.x = 2048; // Position bees higher than ground enemies, random Y position bee.y = 2732 * 0.8 - 200 - Math.random() * 300; bee.startY = bee.y; // Set the center of vertical movement bees.push(bee); game.addChild(bee); // Randomize the spawn interval for the next bee beeSpawnInterval = Math.floor(Math.random() * 200) + 150; beeSpawnCounter = 0; } // Spawn coins coinSpawnCounter++; if (coinSpawnCounter >= coinSpawnInterval) { var coin = new Coin(); coin.x = 2048; // Position coins at random heights coin.y = 2732 * 0.8 - 50 - Math.random() * 400; coins.push(coin); game.addChild(coin); // Randomize the spawn interval for the next coin coinSpawnInterval = Math.floor(Math.random() * 100) + 50; coinSpawnCounter = 0; } // Spawn monsters monsterSpawnCounter++; if (monsterSpawnCounter >= monsterSpawnInterval) { var monster = new Monster(); monster.x = 2048; monster.y = 2732 * 0.8; // Position monsters at the same height as player monsters.push(monster); game.addChild(monster); // Randomize the spawn interval for the next monster monsterSpawnInterval = Math.floor(Math.random() * 250) + 150; monsterSpawnCounter = 0; } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (player.intersects(enemies[j])) { // Check if player is jumping and falling (coming from above) if (player.isJumping && player.velocityY > 0 && player.y < enemies[j].y) { // Kill enemy when jumped on enemies[j].destroy(); enemies.splice(j, 1); // Bounce the player back up a bit player.velocityY = -player.jumpHeight * 0.6; // Add score LK.setScore(LK.getScore() + 1); scoreText.setText('Puan: ' + LK.getScore()); // Track enemy kills for portal spawning enemyKillCount++; // Check if player killed 10 enemies if (enemyKillCount >= 10) { needPortalSpawn = true; enemyKillCount = 0; // Reset counter } } else { // Player collided with enemy but not from above LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver("Oyun Bitti!"); } } else if (player.x > enemies[j].x && !enemies[j].passed) { enemies[j].passed = true; LK.setScore(LK.getScore() + 1); scoreText.setText('Puan: ' + LK.getScore()); } } // Update bees for (var k = bees.length - 1; k >= 0; k--) { bees[k].update(); if (player.intersects(bees[k])) { // Check if player is jumping and falling (coming from above) if (player.isJumping && player.velocityY > 0) { // Kill bee when jumped on bees[k].destroy(); bees.splice(k, 1); // Bounce the player back up a bit player.velocityY = -player.jumpHeight * 0.6; // Add score (bees are worth 2 points) LK.setScore(LK.getScore() + 2); scoreText.setText('Puan: ' + LK.getScore()); } else { // Player collided with bee but not from above LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver("Oyun Bitti!"); } } else if (player.x > bees[k].x && !bees[k].passed) { bees[k].passed = true; LK.setScore(LK.getScore() + 1); scoreText.setText('Puan: ' + LK.getScore()); } } // Update coins for (var i = coins.length - 1; i >= 0; i--) { coins[i].update(); // Check for collision with player if (player.intersects(coins[i])) { // Collect coin coins[i].destroy(); coins.splice(i, 1); // Add 5 points for collecting a coin LK.setScore(LK.getScore() + 5); scoreText.setText('Puan: ' + LK.getScore()); } } // Update monsters for (var m = monsters.length - 1; m >= 0; m--) { monsters[m].update(); if (player.intersects(monsters[m])) { // Always kill the monster when player touches it, regardless of position monsters[m].destroy(); monsters.splice(m, 1); // Bounce the player back up a bit player.velocityY = -player.jumpHeight * 0.6; // Add score (monsters are worth 3 points when defeated) LK.setScore(LK.getScore() + 3); scoreText.setText('Puan: ' + LK.getScore()); } else if (player.x > monsters[m].x && !monsters[m].passed) { monsters[m].passed = true; LK.setScore(LK.getScore() + 2); scoreText.setText('Puan: ' + LK.getScore()); } } // Update portals (animation only, no movement) for (var p = 0; p < portals.length; p++) { portals[p].update(); // Check if player intersects with a portal if (player.intersects(portals[p])) { // Visual feedback when player touches a portal LK.effects.flashObject(portals[p], 0x00ff00, 500); // Change background to Marioba background background.texture = LK.getAsset('Marioba', { width: 2048, height: 2732, anchorX: 0, anchorY: 0 }).texture; // Remove the portal after use portals[p].destroy(); portals.splice(p, 1); break; } } // Check if we need to spawn a new portal if (needPortalSpawn && portals.length < portalCount) { spawnPortal(); } }; // Handle player jump game.down = function (x, y, obj) { player.jump(); };
/****
* Classes
****/
// Define a class for bee enemies
var Bee = Container.expand(function () {
var self = Container.call(this);
var beeGraphics = self.attachAsset('Bee', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6; // Slightly faster than regular enemies
self.verticalSpeed = 2;
self.direction = 1; // 1 for down, -1 for up
self.verticalRange = 150; // How far the bee can move up and down
self.startY = 0; // Will be set on initialization
self.update = function () {
// Move horizontally
self.x -= self.speed;
// Move vertically in a wave pattern
self.y += self.verticalSpeed * self.direction;
// Change direction when reaching vertical limits
if (self.y > self.startY + self.verticalRange) {
self.direction = -1;
} else if (self.y < self.startY - self.verticalRange) {
self.direction = 1;
}
// Remove when off screen
if (self.x < -50) {
self.destroy();
}
};
return self;
});
// Define a class for collectible coins
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.update = function () {
self.x -= self.speed;
// Remove when off screen
if (self.x < -50) {
self.destroy();
}
};
return self;
});
// Define a class for enemies
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
return self;
});
// Define a class for monster enemies
var Monster = Container.expand(function () {
var self = Container.call(this);
var monsterGraphics = self.attachAsset('Enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4; // Slightly slower than regular enemies
self.health = 2; // Monsters take two hits to defeat
self.update = function () {
self.x -= self.speed;
// Remove when off screen
if (self.x < -50) {
self.destroy();
}
};
return self;
});
//<Assets used in the game will automatically appear here>
// Define a class for the player character
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.jumpHeight = 30; // Slightly increased jump height
self.isJumping = false;
self.velocityY = 0;
self.jumpCount = 0; // Track number of jumps
self.maxJumps = 2; // Allow double jump
self.update = function () {
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7; // Decreased gravity effect by 30%
if (self.y >= 2732 * 0.8) {
// Ground level
self.y = 2732 * 0.8;
self.isJumping = false;
self.velocityY = 0;
self.jumpCount = 0; // Reset jump count when landing
}
}
};
self.jump = function () {
if (!self.isJumping || self.jumpCount < self.maxJumps) {
self.isJumping = true;
self.velocityY = -self.jumpHeight;
self.jumpCount++; // Increment jump count
}
};
});
// Define a class for Mario portal
var Portal = Container.expand(function () {
var self = Container.call(this);
var portalGraphics = self.attachAsset('Creat', {
anchorX: 0.5,
anchorY: 0.5
});
// Scale up the portal for better visibility
portalGraphics.scale.set(2.5, 2.5);
// Set movement properties similar to monsters
self.speed = 3; // Slightly slower than other enemies
// Add a rotation animation to make it look more like a portal
self.update = function () {
// Move horizontally like enemies
self.x -= self.speed;
// Continue rotating
portalGraphics.rotation += 0.02;
// Remove when off screen
if (self.x < -50) {
self.destroy();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0
}));
background.x = 0;
background.y = 0;
// Initialize player
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 * 0.8; // Position player lower on the screen
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
// Initialize bees
var bees = [];
var beeSpawnInterval = 200;
var beeSpawnCounter = 0;
// Initialize coins
var coins = [];
var coinSpawnInterval = 80;
var coinSpawnCounter = 0;
// Initialize monsters
var monsters = [];
var monsterSpawnInterval = 300;
var monsterSpawnCounter = 0;
// Initialize portals
var portals = [];
var portalCount = 3; // Number of portals to create
var enemyKillCount = 0; // Track enemy kills for portal spawning
var needPortalSpawn = false; // Flag to trigger portal spawn
// Create a new Text2 object to display the score
var scoreText = new Text2('Puan: 0', {
size: 100,
fill: 0xFFFFFF
});
// Add the score text to the game GUI at the top center of the screen
LK.gui.top.addChild(scoreText);
scoreText.x = 2048 / 2;
scoreText.y = 0;
// Function to spawn portals
function spawnPortal() {
var portal = new Portal();
portal.x = 2048;
portal.y = 2732 * 0.8; // Position at same height as other characters
portals.push(portal);
game.addChild(portal);
needPortalSpawn = false; // Reset the spawn flag
}
// Portal spawning is now tied to enemy kills, no need for timed spawning
// Handle game updates
game.update = function () {
player.update();
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 * 0.8; // Position enemies at the same height as player
enemies.push(enemy);
game.addChild(enemy);
// Randomize the spawn interval for the next enemy
enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
enemySpawnCounter = 0;
}
// Spawn bees
beeSpawnCounter++;
if (beeSpawnCounter >= beeSpawnInterval) {
var bee = new Bee();
bee.x = 2048;
// Position bees higher than ground enemies, random Y position
bee.y = 2732 * 0.8 - 200 - Math.random() * 300;
bee.startY = bee.y; // Set the center of vertical movement
bees.push(bee);
game.addChild(bee);
// Randomize the spawn interval for the next bee
beeSpawnInterval = Math.floor(Math.random() * 200) + 150;
beeSpawnCounter = 0;
}
// Spawn coins
coinSpawnCounter++;
if (coinSpawnCounter >= coinSpawnInterval) {
var coin = new Coin();
coin.x = 2048;
// Position coins at random heights
coin.y = 2732 * 0.8 - 50 - Math.random() * 400;
coins.push(coin);
game.addChild(coin);
// Randomize the spawn interval for the next coin
coinSpawnInterval = Math.floor(Math.random() * 100) + 50;
coinSpawnCounter = 0;
}
// Spawn monsters
monsterSpawnCounter++;
if (monsterSpawnCounter >= monsterSpawnInterval) {
var monster = new Monster();
monster.x = 2048;
monster.y = 2732 * 0.8; // Position monsters at the same height as player
monsters.push(monster);
game.addChild(monster);
// Randomize the spawn interval for the next monster
monsterSpawnInterval = Math.floor(Math.random() * 250) + 150;
monsterSpawnCounter = 0;
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (player.intersects(enemies[j])) {
// Check if player is jumping and falling (coming from above)
if (player.isJumping && player.velocityY > 0 && player.y < enemies[j].y) {
// Kill enemy when jumped on
enemies[j].destroy();
enemies.splice(j, 1);
// Bounce the player back up a bit
player.velocityY = -player.jumpHeight * 0.6;
// Add score
LK.setScore(LK.getScore() + 1);
scoreText.setText('Puan: ' + LK.getScore());
// Track enemy kills for portal spawning
enemyKillCount++;
// Check if player killed 10 enemies
if (enemyKillCount >= 10) {
needPortalSpawn = true;
enemyKillCount = 0; // Reset counter
}
} else {
// Player collided with enemy but not from above
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver("Oyun Bitti!");
}
} else if (player.x > enemies[j].x && !enemies[j].passed) {
enemies[j].passed = true;
LK.setScore(LK.getScore() + 1);
scoreText.setText('Puan: ' + LK.getScore());
}
}
// Update bees
for (var k = bees.length - 1; k >= 0; k--) {
bees[k].update();
if (player.intersects(bees[k])) {
// Check if player is jumping and falling (coming from above)
if (player.isJumping && player.velocityY > 0) {
// Kill bee when jumped on
bees[k].destroy();
bees.splice(k, 1);
// Bounce the player back up a bit
player.velocityY = -player.jumpHeight * 0.6;
// Add score (bees are worth 2 points)
LK.setScore(LK.getScore() + 2);
scoreText.setText('Puan: ' + LK.getScore());
} else {
// Player collided with bee but not from above
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver("Oyun Bitti!");
}
} else if (player.x > bees[k].x && !bees[k].passed) {
bees[k].passed = true;
LK.setScore(LK.getScore() + 1);
scoreText.setText('Puan: ' + LK.getScore());
}
}
// Update coins
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].update();
// Check for collision with player
if (player.intersects(coins[i])) {
// Collect coin
coins[i].destroy();
coins.splice(i, 1);
// Add 5 points for collecting a coin
LK.setScore(LK.getScore() + 5);
scoreText.setText('Puan: ' + LK.getScore());
}
}
// Update monsters
for (var m = monsters.length - 1; m >= 0; m--) {
monsters[m].update();
if (player.intersects(monsters[m])) {
// Always kill the monster when player touches it, regardless of position
monsters[m].destroy();
monsters.splice(m, 1);
// Bounce the player back up a bit
player.velocityY = -player.jumpHeight * 0.6;
// Add score (monsters are worth 3 points when defeated)
LK.setScore(LK.getScore() + 3);
scoreText.setText('Puan: ' + LK.getScore());
} else if (player.x > monsters[m].x && !monsters[m].passed) {
monsters[m].passed = true;
LK.setScore(LK.getScore() + 2);
scoreText.setText('Puan: ' + LK.getScore());
}
}
// Update portals (animation only, no movement)
for (var p = 0; p < portals.length; p++) {
portals[p].update();
// Check if player intersects with a portal
if (player.intersects(portals[p])) {
// Visual feedback when player touches a portal
LK.effects.flashObject(portals[p], 0x00ff00, 500);
// Change background to Marioba background
background.texture = LK.getAsset('Marioba', {
width: 2048,
height: 2732,
anchorX: 0,
anchorY: 0
}).texture;
// Remove the portal after use
portals[p].destroy();
portals.splice(p, 1);
break;
}
}
// Check if we need to spawn a new portal
if (needPortalSpawn && portals.length < portalCount) {
spawnPortal();
}
};
// Handle player jump
game.down = function (x, y, obj) {
player.jump();
};
Turtle. In-Game asset. 2d. High contrast. No shadows
Boy running. In-Game asset. 2d. High contrast. No shadows
Mario background. In-Game asset. 2d. High contrast. No shadows
Bee. In-Game asset. 2d. High contrast. No shadows
Coin. In-Game asset. 2d. High contrast. No shadows
Monster. In-Game asset. 2d. High contrast. No shadows
Mario portal.. In-Game asset. 2d. High contrast. No shadows
Mario background night. In-Game asset. 2d. High contrast. No shadows