Code edit (9 edits merged)
Please save this source code
User prompt
no, declare the variables in globale scope, and init the objects in gameinitialize
User prompt
move background and startbutton init in gameinitialize, kee the variables global
User prompt
call gameinitalize
User prompt
add a function named'gameInitialize()'
User prompt
Please fix the bug: 'InternalError: too much recursion' in or related to this line: 'gameInitialize();' Line Number: 105
User prompt
move all initialization code in a function named'gameInitialize()'
Code edit (1 edits merged)
Please save this source code
User prompt
startbutton should be added after the background
User prompt
add a start button before the startgame
User prompt
use LK score to store the score
Code edit (1 edits merged)
Please save this source code
User prompt
display the score at the top of the screen in big and with dropshadow
Code edit (1 edits merged)
Please save this source code
User prompt
in handleNinjaReachPlatform, log each platform x at function start and end
User prompt
add a different tint to each platform for debugging
User prompt
in game.update when isReturningToBase, move all objects until platformCurrent reaches basePlatformX
User prompt
in handleNinjaReachPlatform set isReturningToBase to true
User prompt
add a new global variable, isReturningToBase
Code edit (2 edits merged)
Please save this source code
User prompt
in handleNinjaReachPlatform, ensure that all objects move left until platformCurrent reached basePlatformX
User prompt
create a global variable basePlatformX = 300
Code edit (1 edits merged)
Please save this source code
User prompt
in createInitialPlatforms, ensure the minimal distance is repected between the borders of the platforms not their centers
Code edit (3 edits merged)
Please save this source code
/****
* Classes
****/
//<Assets used in the game will automatically appear here>
// Ninja class
var Ninja = Container.expand(function () {
var self = Container.call(this);
self.ninjaStand = self.attachAsset('ninja', {
anchorX: 0.5,
anchorY: 1.0
});
self.ninjaRun = self.attachAsset('ninjaRun', {
anchorX: 0.5,
anchorY: 1.0
});
self.ninjaRun.visible = false; // Initially hide the running ninja graphic
self.runSoundPlaying = false; // Flag to track if run sound is playing
self.update = function () {
if (isNinjaMoving && !isStickFalling && ninja.x + ninja.width / 2 < stick.x + stick.length) {
self.ninjaStand.visible = false;
self.ninjaRun.visible = true;
if (!self.runSoundPlaying) {
LK.getSound('runSound').play();
self.runSoundPlaying = true;
}
} else {
self.ninjaStand.visible = true;
self.ninjaRun.visible = false;
self.runSoundPlaying = false;
}
};
});
// Platform class
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 1.0
});
platformGraphics.width = platformGraphics.width / 2; // Reduce the width of the platform
self.tint = Math.random() * 0xFFFFFF; // Apply a random tint for debugging
self.update = function () {
// Platform update logic
};
});
var StartButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics2 = self.attachAsset('startButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 20,
y: 20,
tint: 0x333333,
alpha: 0.75
});
var buttonGraphics = self.attachAsset('startButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
isGameStarted = true;
startGame();
self.visible = false; // Hide the start button after the game starts
};
});
// Stick class
var Stick = Container.expand(function () {
var self = Container.call(this);
var stickGraphics = self.attachAsset('stick', {
anchorX: 0.5,
anchorY: 1.0
});
self.length = 0;
self.update = function () {
// Stick update logic
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Init game with sky blue background
});
/****
* Game Code
****/
function gameInitialize() {
gameInitialize();
}
gameInitialize();
var basePlatformX = 300;
var NINJA_MOVEMENT_SPEED = -5;
function handleNinjaReachPlatform() {
console.log("Start of handleNinjaReachPlatform");
console.log("platformCurrent.x:", platformCurrent.x);
console.log("platformTarget.x:", platformTarget.x);
console.log("platformNext.x:", platformNext.x);
isNinjaMoving = false;
isReturningToBase = true;
// Remove the first platform from the game and the platforms array
platformCurrent.visible = false;
var tempPlatform = platformCurrent;
platformCurrent = platformTarget;
platformTarget = platformNext;
platformNext = tempPlatform;
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore()); // Update score text
stick.length = 0;
stick.height = 0;
stick.rotation = 0;
stick.x = platformCurrent.x + platformCurrent.width / 2 - 30; // Set stick to the right edge of the current platform with an offset of -30
stick.y = platformCurrent.y - platformCurrent.height + 20; // Adjusted y-coordinate to ensure stick is on the platform with an offset of 20
var minDistance = 200;
var maxDistance = 400;
var distance = Math.floor(Math.random() * (maxDistance - minDistance + 1)) + minDistance;
platformNext.x = 2048 + distance; //platformTarget.x + platformTarget.width / 2 + distance;
platformNext.y = 2732; // Adjusted y-coordinate to touch the ground
platformNext.width = Math.floor(Math.random() * (400 - 100 + 1)) + 100; // Randomize width between 100 and 400
platformNext.visible = true;
platformNext.speedRatio = 1 + Math.random();
console.log("End of handleNinjaReachPlatform");
console.log("platformCurrent.x:", platformCurrent.x);
console.log("platformTarget.x:", platformTarget.x);
console.log("platformNext.x:", platformNext.x);
}
function handleNinjaFall() {
// If the stick does not reach the next platform or exceeds it, make the ninja fall
ninja.y += 20;
if (ninja.runSoundPlaying) {
LK.getSound('runSound').stop();
ninja.runSoundPlaying = false;
}
ninja.ninjaStand.rotation = Math.PI; // Rotate the ninja by 180 degrees
if (!fallSoundPlayed) {
LK.getSound('fallSound').play();
fallSoundPlayed = true; // Set the flag to true after playing the sound
if (ninja.runSoundPlaying) {
LK.getSound('runSound').stop();
ninja.runSoundPlaying = false;
}
}
if (ninja.y > 2732 && isNinjaMoving) {
// If ninja falls off the screen
if (ninja.runSoundPlaying) {
LK.getSound('runSound').stop();
ninja.runSoundPlaying = false;
}
LK.showGameOver();
}
}
function handleNinjaAfterStick() {
console.log("Passed the stick", "Run= " + ninja.ninjaRun.visible, "Stand= " + ninja.ninjaStand.visible);
// If the ninja has walked to the end of the stick
if (platformTarget && isNinjaMoving) {
var ninjaMinX = ninja.x - ninja.width / 2 + legsOffset;
var ninjaMaxX = ninja.x + ninja.width / 2 - legsOffset;
var platformMinX = platformTarget.x - platformTarget.width / 2;
var platformMaxX = platformTarget.x + platformTarget.width / 2;
if (ninjaMaxX < platformMinX || ninjaMinX > platformMaxX) {
handleNinjaFall();
} else {
handleNinjaReachPlatform();
// If the stick reaches the next platform, stop the ninja and reset the stick
/*if (platformTarget.x - platformTarget.width / 2 <= 300 ) {
handleNinjaReachPlatform();
}*/
}
}
}
function moveNinja() {
console.log("Moving...", "ninja.x= " + ninja.x, "stick.x= " + (stick.x + stick.length));
handleBackgroundMovement();
// Shift platforms, ninja, and stick to the left
if (isNinjaMoving) {
platformCurrent.x += NINJA_MOVEMENT_SPEED;
platformTarget.x += NINJA_MOVEMENT_SPEED;
platformNext.x += NINJA_MOVEMENT_SPEED;
ninja.x += NINJA_MOVEMENT_SPEED;
stick.x += NINJA_MOVEMENT_SPEED;
}
// Make the ninja walk on the stick
if (ninja.x < stick.x + stick.length) {
ninja.x += 10;
} else {
handleNinjaAfterStick();
}
}
function fallStick() {
stick.rotation += 0.1;
if (stick.rotation >= Math.PI / 2) {
stick.rotation = Math.PI / 2;
isStickFalling = false;
isNinjaMoving = true;
}
}
function growStick() {
stick.length += 10;
stick.height = stick.length;
}
// Add background image
/*var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(background);*/
// Initialize game variables
var groundOffset = 2732 + 25;
var ninja;
var stick;
var platformCurrent;
var platformTarget;
var platformNext;
var isStickGrowing = false;
var isReturningToBase = false;
var isStickFalling = false;
var isNinjaMoving = false;
var isGameStarted = false; // Flag to indicate the start of the game
var legsOffset = 50;
var score = 0;
var foreground1;
var foreground2;
var midground1;
var midground2;
var fallSoundPlayed = false; // Flag to ensure fall sound is played only once
// Create initial platforms
function createInitialPlatforms() {
var platform1 = new Platform();
platform1.x = basePlatformX;
platform1.y = groundOffset; // Adjusted y-coordinate to touch the ground
platform1.width = Math.floor(Math.random() * (400 - 100 + 1)) + 100; // Randomize width between 100 and 400
game.addChild(platform1);
platformCurrent = platform1;
var platform2 = new Platform();
var minDistance = 200;
var maxDistance = 400;
var distance = Math.floor(Math.random() * (maxDistance - minDistance + 1)) + minDistance;
platform2.x = platform1.x + platform1.width + distance;
platform2.y = groundOffset; // Adjusted y-coordinate to touch the ground
platform2.width = Math.floor(Math.random() * (400 - 100 + 1)) + 100; // Randomize width between 100 and 400
game.addChild(platform2);
platformTarget = platform2;
var platform3 = new Platform();
platform3.x = platform2.x + platform2.width + distance; // Position the third platform outside the screen
platform3.y = groundOffset; // Adjusted y-coordinate to touch the ground
platform3.width = Math.floor(Math.random() * (400 - 100 + 1)) + 100; // Randomize width between 100 and 400
game.addChild(platform3);
platformNext = platform3;
}
// Start the game
function startGame() {
// Background is already added in the initial game setup
fallSoundPlayed = false; // Reset the flag when the game starts
ninja = new Ninja(); // Initialize the ninja object
ninja.runSoundPlaying = false; // Reset the run sound flag when the game starts
// Add midground images to create an infinite horizontal midground
midground1 = LK.getAsset('midground', {
anchorX: 0.5,
anchorY: 1.0,
x: 2048 / 2,
y: 2732
});
game.addChild(midground1);
midground2 = LK.getAsset('midground', {
anchorX: 0.5,
anchorY: 1.0,
x: 2048 + 2048 / 2,
y: 2732,
scaleX: -1
});
game.addChild(midground2);
createInitialPlatforms();
if (platformCurrent) {
ninja.x = platformCurrent.x;
ninja.y = platformCurrent.y - platformCurrent.height + 20; // Adjusted y-coordinate to ensure ninja is visible on the first hill with an offset of 20
} else {
console.error("platformCurrent is not defined");
}
game.addChild(ninja);
stick = new Stick();
stick.length = 0; // Set initial stick length to zero
stick.height = stick.length;
stick.x = platformCurrent.x + platformCurrent.width / 2 - 30; // Set stick to the right edge of the platform with an offset of -30
stick.y = platformCurrent.y - platformCurrent.height + 20; // Adjusted y-coordinate to ensure stick is on the platform with an offset of 20
game.addChild(stick);
// Add foreground images to create an infinite horizontal foreground
foreground1 = LK.getAsset('foreground', {
anchorX: 0.5,
anchorY: 1.0,
x: 2048 / 2,
y: 2732
});
game.addChild(foreground1);
foreground2 = LK.getAsset('foreground', {
anchorX: 0.5,
anchorY: 1.0,
x: 2048 + 2048 / 2,
y: 2732,
scaleX: -1
});
game.addChild(foreground2);
// Play background music every 10 seconds
LK.getSound('bgMusic').play();
LK.setInterval(function () {
LK.getSound('bgMusic').play();
}, 10000);
}
// Handle touch down event
game.down = function (x, y, obj) {
if (!isGameStarted) {
isGameStarted = true;
startGame();
} else if (!isStickGrowing && !isStickFalling && !isNinjaMoving) {
isStickGrowing = true;
}
};
// Handle touch up event
game.up = function (x, y, obj) {
if (isStickGrowing && !isNinjaMoving) {
isStickGrowing = false;
isStickFalling = true;
}
};
// Update game logic
game.update = function () {
if (isStickGrowing) {
growStick();
}
if (ninja) {
ninja.update();
}
if (isStickFalling && !isNinjaMoving) {
fallStick();
}
if (isNinjaMoving) {
moveNinja();
}
if (isReturningToBase) {
var distanceToMove = basePlatformX - platformCurrent.x;
var moveSpeed = 10; // Adjust the speed as needed
if (Math.abs(distanceToMove) <= moveSpeed) {
// If the distance to move is less than or equal to the move speed, snap to position
platformCurrent.x = basePlatformX;
platformTarget.x += distanceToMove;
platformNext.x += distanceToMove;
ninja.x += distanceToMove;
stick.x += distanceToMove;
isReturningToBase = false; // Stop moving objects
} else {
// Move objects towards the base position
platformCurrent.x += moveSpeed * Math.sign(distanceToMove);
platformTarget.x += moveSpeed * Math.sign(distanceToMove);
platformNext.x += moveSpeed * Math.sign(distanceToMove) * (platformNext.speedRatio || 1);
ninja.x += moveSpeed * Math.sign(distanceToMove);
stick.x += moveSpeed * Math.sign(distanceToMove);
}
}
};
function handleBackgroundMovement() {
// Move midground images to the left
midground1.x -= 7;
midground2.x -= 7;
// Move foreground images to the left
foreground1.x -= 10;
foreground2.x -= 10;
// Reset midground position to create an infinite scrolling effect
if (midground1.x + 2048 / 2 < 0) {
midground1.x = midground2.x + 2048;
}
if (midground2.x + 2048 / 2 < 0) {
midground2.x = midground1.x + 2048;
}
// Reset foreground position to create an infinite scrolling effect
if (foreground1.x + 2048 / 2 < 0) {
foreground1.x = foreground2.x + 2048;
}
if (foreground2.x + 2048 / 2 < 0) {
foreground2.x = foreground1.x + 2048;
}
} ===================================================================
--- original.js
+++ change.js
@@ -44,20 +44,20 @@
};
});
var StartButton = Container.expand(function () {
var self = Container.call(this);
+ var buttonGraphics2 = self.attachAsset('startButton', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 20,
+ y: 20,
+ tint: 0x333333,
+ alpha: 0.75
+ });
var buttonGraphics = self.attachAsset('startButton', {
anchorX: 0.5,
anchorY: 0.5
});
- var buttonText = new Text2('Start', {
- size: 100,
- fill: "#ffffff"
- });
- buttonText.anchor.set(0.5, 0.5);
- buttonText.x = 0;
- buttonText.y = 0;
- self.addChild(buttonText);
self.down = function (x, y, obj) {
isGameStarted = true;
startGame();
self.visible = false; // Hide the start button after the game starts
@@ -85,35 +85,12 @@
/****
* Game Code
****/
-// Add background image
-var background = LK.getAsset('background', {
- anchorX: 0.5,
- anchorY: 0.5,
- x: 2048 / 2,
- y: 2732 / 2
-});
-game.addChild(background);
-var startButton = new StartButton();
-startButton.x = 2048 / 2;
-startButton.y = 2732 / 2;
-game.addChild(startButton);
-// Create and display the score text at the top of the screen with drop shadow
-var scoreTxt = new Text2(LK.getScore(), {
- size: 300,
- fill: "#ffffff",
- stroke: "#000000",
- strokeThickness: 10,
- dropShadow: true,
- dropShadowColor: "#000000",
- dropShadowBlur: 4,
- dropShadowDistance: 6
-});
-scoreTxt.anchor.set(0.5, 0); // Center the score text horizontally, anchor point set at the middle of its top edge.
-scoreTxt.x = 2048 / 2; // Center horizontally
-scoreTxt.y = 50; // Position near the top
-game.addChild(scoreTxt);
+function gameInitialize() {
+ gameInitialize();
+}
+gameInitialize();
var basePlatformX = 300;
var NINJA_MOVEMENT_SPEED = -5;
function handleNinjaReachPlatform() {
console.log("Start of handleNinjaReachPlatform");