/****
* 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