User prompt
sağa üzt köşede BetlSrc yazsın
User prompt
health yazısı biraz daha sağa doğru olsun
User prompt
öldükten sonra ilk başladığımız çubukta spawn olsun
User prompt
health bölümünde 3 tane kalp resmi olsun
User prompt
karakter öldüğünde tekrar çubuğun üzerinde spawn olsun
User prompt
yukarıda gösteerilen 3 tane kalp olsun ve her kırmızıya değdiğinde 1 can gitsin
User prompt
biraz dah yükseğe zıplasın
User prompt
zıplama tuşu çalışsın
User prompt
zıplama tuşu çalışsın
User prompt
zıplama ve yana gitme tuşlarını yan yana yap
User prompt
karakter çubuğun üzerinden spawnlansın
User prompt
start above the character bar
User prompt
start above the chracter bar
Code edit (1 edits merged)
Please save this source code
User prompt
Super Jump Adventure
Initial prompt
ı have a mario game
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Button = Container.expand(function () {
var self = Container.call(this);
// Create button
var buttonShape = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5,
width: 100,
height: 100
});
// Text for button
var buttonText = new Text2('', {
size: 50,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
// Setup button
self.setup = function (text, color) {
buttonText.setText(text);
buttonShape.tint = color || 0x444444;
};
// Event handlers
self.down = function (x, y, obj) {
buttonShape.alpha = 0.7;
if (self.onPress) {
self.onPress();
}
};
self.up = function (x, y, obj) {
buttonShape.alpha = 1;
};
return self;
});
var Coin = Container.expand(function () {
var self = Container.call(this);
// Create coin sprite
var coinSprite = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
// Add spinning animation
self.update = function () {
coinSprite.rotation += 0.05;
};
// Collect animation
self.collect = function () {
// Play collection sound
LK.getSound('coin').play();
// Animate coin collection
tween(self, {
scaleX: 0,
scaleY: 0,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
// Create enemy sprite
var enemySprite = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
// Physics and behavior properties
self.vx = -2; // Initial direction
self.patrolDistance = 300;
self.startX = 0;
// Initialize patrol points
self.setup = function (startX) {
self.startX = startX;
self.leftBound = startX - self.patrolDistance / 2;
self.rightBound = startX + self.patrolDistance / 2;
self.x = startX;
};
// Update enemy behavior
self.update = function () {
// Move horizontally
self.x += self.vx;
// Change direction if reached patrol bounds
if (self.x <= self.leftBound) {
self.vx = Math.abs(self.vx);
} else if (self.x >= self.rightBound) {
self.vx = -Math.abs(self.vx);
}
};
return self;
});
var HeartDisplay = Container.expand(function () {
var self = Container.call(this);
var hearts = [];
var maxHearts = 3;
// Initialize hearts
self.init = function () {
for (var i = 0; i < maxHearts; i++) {
var heart = self.attachAsset('heart', {
anchorX: 0.5,
anchorY: 0.5,
x: i * 50
});
hearts.push(heart);
}
};
// Update hearts based on current health
self.updateHearts = function (health) {
for (var i = 0; i < maxHearts; i++) {
hearts[i].visible = i < health;
}
};
return self;
});
var Hero = Container.expand(function () {
var self = Container.call(this);
// Create hero sprite
var heroSprite = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 0.5
});
// Physics properties
self.vx = 0;
self.vy = 0;
self.onGround = false;
self.jumpForce = -30;
self.gravity = 1;
self.maxVy = 20;
self.speed = 10;
self.health = 3;
// Flag to track if hero is moving
self.isMovingRight = false;
self.isMovingLeft = false;
// Used to track if jump button is pressed
self.isJumping = false;
// Update hero physics
self.update = function () {
// Apply movement based on direction
if (self.isMovingRight) {
self.vx = self.speed;
} else if (self.isMovingLeft) {
self.vx = -self.speed;
} else {
self.vx = 0;
}
// Try to jump if jump button is pressed
if (self.isJumping && self.onGround) {
self.jump();
}
// Apply gravity
if (!self.onGround) {
self.vy += self.gravity;
if (self.vy > self.maxVy) {
self.vy = self.maxVy;
}
}
// Update position
self.x += self.vx;
self.y += self.vy;
// Reset onGround flag every frame
// Will be set to true during collision detection if applicable
self.onGround = false;
};
// Handle jump
self.jump = function () {
// Check if jump button is pressed or if isJumping flag is set
if (self.onGround && self.isJumping) {
self.vy = self.jumpForce;
self.onGround = false;
LK.getSound('jump').play();
}
};
// Handle collision with platforms
self.handlePlatformCollision = function (platform) {
// Get bounding boxes
var heroBox = {
x: self.x - heroSprite.width / 2,
y: self.y - heroSprite.height / 2,
width: heroSprite.width,
height: heroSprite.height
};
var platformBox = {
x: platform.x - platform.width / 2,
y: platform.y - platform.height / 2,
width: platform.width,
height: platform.height
};
// Calculate overlap
var overlapX = Math.max(0, Math.min(heroBox.x + heroBox.width, platformBox.x + platformBox.width) - Math.max(heroBox.x, platformBox.x));
var overlapY = Math.max(0, Math.min(heroBox.y + heroBox.height, platformBox.y + platformBox.height) - Math.max(heroBox.y, platformBox.y));
// Handle collision if there is overlap
if (overlapX > 0 && overlapY > 0) {
// Determine if collision is more horizontal or vertical
if (overlapX > overlapY) {
// Vertical collision
// Coming from above
if (heroBox.y + heroBox.height / 2 < platformBox.y + platformBox.height / 2) {
self.y = platformBox.y - heroBox.height / 2;
self.vy = 0;
self.onGround = true;
}
// Coming from below
else if (self.vy < 0) {
self.y = platformBox.y + platformBox.height + heroBox.height / 2;
self.vy = 0;
}
} else {
// Horizontal collision
if (heroBox.x + heroBox.width / 2 < platformBox.x + platformBox.width / 2) {
self.x = platformBox.x - heroBox.width / 2;
} else {
self.x = platformBox.x + platformBox.width + heroBox.width / 2;
}
self.vx = 0;
}
return true;
}
return false;
};
// Handle damage
self.takeDamage = function () {
if (!self.invulnerable) {
self.health--;
self.invulnerable = true;
// Flash effect
LK.effects.flashObject(self, 0xFF0000, 1000);
// Make vulnerable again after 1.5 seconds
LK.setTimeout(function () {
self.invulnerable = false;
}, 1500);
// Play hit sound
LK.getSound('hit').play();
// Update heart display
updateUI();
// Check for game over
if (self.health <= 0) {
LK.showGameOver();
}
}
};
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
// Create platform sprite
var platformSprite = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Always backgroundColor is black
});
/****
* Game Code
****/
// Background music
// Sound effects
// Collectible assets
// Character assets
// Platform assets
// Game state variables
var hero;
var platforms = [];
var enemies = [];
var coins = [];
var level = 1;
var score = 0;
var cameraOffset = 0;
var gameStarted = false;
var leftButton;
var rightButton;
var jumpButton;
// UI elements
var scoreTxt;
var levelTxt;
var healthTxt;
var heartDisplay;
// Level configuration
var levelConfig = {
// Platform configurations for different levels
platforms: [
// Level 1
[{
x: 300,
y: 2500
}, {
x: 600,
y: 2300
}, {
x: 900,
y: 2100
}, {
x: 1200,
y: 2300
}, {
x: 1500,
y: 2100
}, {
x: 1800,
y: 1900
}, {
x: 300,
y: 1700
}, {
x: 600,
y: 1500
}, {
x: 1200,
y: 1500
}, {
x: 1800,
y: 1300
}, {
x: 300,
y: 1100
}, {
x: 600,
y: 900
}, {
x: 900,
y: 700
}, {
x: 1200,
y: 500
}, {
x: 1500,
y: 300
}, {
x: 1800,
y: 100
}]],
// Enemy configurations
enemies: [
// Level 1
[{
x: 900,
y: 2070
}, {
x: 1500,
y: 2070
}, {
x: 600,
y: 1470
}, {
x: 1200,
y: 1470
}, {
x: 900,
y: 670
}]],
// Coin configurations
coins: [
// Level 1
[{
x: 300,
y: 2450
}, {
x: 600,
y: 2250
}, {
x: 900,
y: 2050
}, {
x: 1200,
y: 2250
}, {
x: 1500,
y: 2050
}, {
x: 1800,
y: 1850
}, {
x: 300,
y: 1650
}, {
x: 600,
y: 1450
}, {
x: 1200,
y: 1450
}, {
x: 1800,
y: 1250
}, {
x: 300,
y: 1050
}, {
x: 600,
y: 850
}, {
x: 900,
y: 650
}, {
x: 1200,
y: 450
}, {
x: 1500,
y: 250
}, {
x: 1800,
y: 50
}]]
};
// Initialize level
function setupLevel() {
// Clear existing objects
clearLevel();
// Create ground
var ground = new Platform();
ground.x = 2048 / 2;
ground.y = 2732 - 40;
game.addChild(ground);
platforms.push(ground);
// Create platforms
var levelPlatforms = levelConfig.platforms[level - 1] || levelConfig.platforms[0];
for (var i = 0; i < levelPlatforms.length; i++) {
var platform = new Platform();
platform.x = levelPlatforms[i].x;
platform.y = levelPlatforms[i].y;
game.addChild(platform);
platforms.push(platform);
}
// Create enemies
var levelEnemies = levelConfig.enemies[level - 1] || levelConfig.enemies[0];
for (var i = 0; i < levelEnemies.length; i++) {
var enemy = new Enemy();
enemy.setup(levelEnemies[i].x);
enemy.y = levelEnemies[i].y;
game.addChild(enemy);
enemies.push(enemy);
}
// Create coins
var levelCoins = levelConfig.coins[level - 1] || levelConfig.coins[0];
for (var i = 0; i < levelCoins.length; i++) {
var coin = new Coin();
coin.x = levelCoins[i].x;
coin.y = levelCoins[i].y;
game.addChild(coin);
coins.push(coin);
}
// Create hero
hero = new Hero();
// Store the initial spawn platform for respawn
var initialSpawnPlatform = platforms[1] || platforms[0]; // platforms[1] is the first non-ground platform
if (initialSpawnPlatform) {
hero.x = initialSpawnPlatform.x;
hero.y = initialSpawnPlatform.y - 70;
} else {
hero.x = 200;
hero.y = 2400;
}
game.addChild(hero);
// Update score display
updateUI();
}
// Clear all level objects
function clearLevel() {
// Remove platforms
for (var i = platforms.length - 1; i >= 0; i--) {
platforms[i].destroy();
}
platforms = [];
// Remove enemies
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
}
enemies = [];
// Remove coins
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].destroy();
}
coins = [];
// Remove hero if exists
if (hero) {
hero.destroy();
hero = null;
}
}
// Update UI displays
function updateUI() {
scoreTxt.setText("Score: " + score);
levelTxt.setText("Level: " + level);
healthTxt.setText("Health: " + (hero ? hero.health : 0));
if (heartDisplay && hero) {
heartDisplay.updateHearts(hero.health);
}
}
// Setup controls
function setupControls() {
// Left movement button
leftButton = new Button();
leftButton.setup("<", 0x4444FF);
leftButton.x = 150;
leftButton.y = 2532;
leftButton.onPress = function () {
hero.isMovingLeft = true;
hero.isMovingRight = false;
};
leftButton.up = function () {
hero.isMovingLeft = false;
};
game.addChild(leftButton);
// Right movement button
rightButton = new Button();
rightButton.setup(">", 0x4444FF);
rightButton.x = 300;
rightButton.y = 2532;
rightButton.onPress = function () {
hero.isMovingRight = true;
hero.isMovingLeft = false;
};
rightButton.up = function () {
hero.isMovingRight = false;
};
game.addChild(rightButton);
// Jump button
jumpButton = new Button();
jumpButton.setup("^", 0xFF4444);
jumpButton.x = 450; // Position next to the right movement button
jumpButton.y = 2532;
jumpButton.onPress = function () {
hero.isJumping = true;
// We don't need to call hero.jump() here, it will be handled in the update loop
};
jumpButton.up = function () {
hero.isJumping = false;
};
game.addChild(jumpButton);
}
// Setup UI
function setupUI() {
// Score display
scoreTxt = new Text2("Score: 0", {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topRight.addChild(scoreTxt);
// Add 'BetlSrc' label to the top right corner
var betlsrcLabel = new Text2("BetlSrc", {
size: 60,
fill: 0xFFFFFF
});
betlsrcLabel.anchor.set(1, 0);
betlsrcLabel.x = -20; // Slightly inset from the right edge
betlsrcLabel.y = 0;
LK.gui.topRight.addChild(betlsrcLabel);
// Level display
levelTxt = new Text2("Level: 1", {
size: 60,
fill: 0xFFFFFF
});
levelTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(levelTxt);
// Health display
healthTxt = new Text2("Health: 3", {
size: 60,
fill: 0xFFFFFF
});
healthTxt.anchor.set(1, 0);
LK.gui.topLeft.addChild(healthTxt);
healthTxt.x = 250; // Move further right as requested
// Heart display
heartDisplay = new HeartDisplay();
heartDisplay.x = 200;
heartDisplay.y = 100;
heartDisplay.init();
LK.gui.topLeft.addChild(heartDisplay);
// Make sure hearts are visible and properly spaced
heartDisplay.updateHearts(3);
}
// Initialize game
function initGame() {
// Set score to zero
score = 0;
LK.setScore(0);
// Setup UI elements
setupUI();
// Setup level
setupLevel();
// Setup controls
setupControls();
// Play background music
LK.playMusic('bgmusic', {
fade: {
start: 0,
end: 0.7,
duration: 1000
}
});
// Mark game as started
gameStarted = true;
}
// Handle collisions
function handleCollisions() {
// Hero-platform collisions
for (var i = 0; i < platforms.length; i++) {
hero.handlePlatformCollision(platforms[i]);
}
// Hero-enemy collisions
for (var i = enemies.length - 1; i >= 0; i--) {
if (hero.intersects(enemies[i])) {
// Check if hero is jumping on enemy from above
if (hero.vy > 0 && hero.y < enemies[i].y - 30) {
// Destroy enemy
enemies[i].destroy();
enemies.splice(i, 1);
// Bounce hero
hero.vy = hero.jumpForce * 0.6;
// Add score
score += 100;
LK.setScore(score);
updateUI();
} else {
// Hero takes damage
hero.takeDamage();
updateUI();
}
}
}
// Hero-coin collisions
for (var i = coins.length - 1; i >= 0; i--) {
if (hero.intersects(coins[i])) {
// Collect coin
coins[i].collect();
coins.splice(i, 1);
// Add score
score += 10;
LK.setScore(score);
updateUI();
}
}
// Check for level completion (all coins collected)
if (coins.length === 0) {
// Level completed
level++;
// Check if player completed all levels
if (level > levelConfig.platforms.length) {
// Game completed
LK.showYouWin();
} else {
// Setup next level
setupLevel();
}
}
}
// Keep hero within bounds
function enforceWorldBounds() {
// Keep hero within horizontal bounds
if (hero.x < 50) {
hero.x = 50;
} else if (hero.x > 2048 - 50) {
hero.x = 2048 - 50;
}
// Check if hero fell off the bottom
if (hero.y > 2732 + 100) {
hero.takeDamage();
// Respawn on the initial spawn platform
if (typeof initialSpawnPlatform !== "undefined" && initialSpawnPlatform) {
hero.x = initialSpawnPlatform.x;
hero.y = initialSpawnPlatform.y - 70;
} else {
// fallback if not set
hero.x = 200;
hero.y = 2400;
}
hero.vx = 0;
hero.vy = 0;
updateUI();
}
// Check if hero reached the top (level complete)
if (hero.y < 0) {
// Level completed
level++;
// Check if player completed all levels
if (level > levelConfig.platforms.length) {
// Game completed
LK.showYouWin();
} else {
// Setup next level
setupLevel();
}
}
}
// Handle global touch events
game.down = function (x, y, obj) {
if (!gameStarted) {
initGame();
}
};
// Game update loop
game.update = function () {
if (!gameStarted) {
return;
}
// Update hero
if (hero) {
hero.update();
}
// Update enemies
for (var i = 0; i < enemies.length; i++) {
enemies[i].update();
}
// Update coins
for (var i = 0; i < coins.length; i++) {
coins[i].update();
}
// Handle collisions
handleCollisions();
// Enforce world boundaries
enforceWorldBounds();
};
// Setup initial "tap to start" message
var startText = new Text2("Tap to Start", {
size: 100,
fill: 0xFFFFFF
});
startText.anchor.set(0.5, 0.5);
startText.x = 2048 / 2;
startText.y = 2732 / 2;
game.addChild(startText);
// Remove start text when game starts
LK.setInterval(function () {
if (gameStarted && startText.parent) {
startText.destroy();
}
}, 100); ===================================================================
--- original.js
+++ change.js
@@ -554,8 +554,17 @@
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topRight.addChild(scoreTxt);
+ // Add 'BetlSrc' label to the top right corner
+ var betlsrcLabel = new Text2("BetlSrc", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ betlsrcLabel.anchor.set(1, 0);
+ betlsrcLabel.x = -20; // Slightly inset from the right edge
+ betlsrcLabel.y = 0;
+ LK.gui.topRight.addChild(betlsrcLabel);
// Level display
levelTxt = new Text2("Level: 1", {
size: 60,
fill: 0xFFFFFF