User prompt
Oyun biterse goalCountu ekrana yazdır
Code edit (14 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: LK.log is not a function. (In 'LK.log("Game Over by Save. Current goalCount: " + goalCount)', 'LK.log' is undefined)' in or related to this line: 'LK.log("Game Over by Save. Current goalCount: " + goalCount);' Line Number: 238
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Can't find variable: Text1' in or related to this line: 'var topScoreTxt = new Text2('Top Score : MrSabri 65', {' Line Number: 199
User prompt
Please fix the bug: 'Can't find variable: Text1' in or related to this line: 'var topScoreTxt = new Text1('Top Score : MrSabri 65', {' Line Number: 199
Code edit (2 edits merged)
Please save this source code
User prompt
topscoretxt color be light yellow
User prompt
Topscoretxt color be red
Code edit (1 edits merged)
Please save this source code
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); self.velocityX = 0; self.velocityY = 0; self.isMoving = false; self.gravity = -0.5; self.friction = 0.97; self.shoot = function (targetX, targetY) { var deltaX = targetX - self.x; var deltaY = targetY - self.y; var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); self.velocityX = deltaX / distance * 30; // Increase speed for direct aim self.velocityY = deltaY / distance * 30; // Increase speed for direct aim self.isMoving = true; }; self.reset = function () { self.x = 1024; self.y = 1700; self.velocityX = 0; self.velocityY = 0; self.isMoving = false; }; self.update = function () { if (self.isMoving) { self.x += self.velocityX; self.y += self.velocityY; self.velocityY += self.gravity; self.velocityX *= self.friction; self.velocityY *= self.friction; if (Math.abs(self.velocityX) < 0.5 && Math.abs(self.velocityY) < 0.5) { self.isMoving = false; } } }; // Override intersects to reduce the hotbox of the ball self.intersects = function (other) { // Get bounds of this ball var ballWidth = ballGraphics.width; var ballHeight = ballGraphics.height; // Reduce hotbox by 30% in each direction var hotboxShrinkX = ballWidth * 0.15; var hotboxShrinkY = ballHeight * 0.15; var ballLeft = self.x - ballWidth / 2 + hotboxShrinkX; var ballRight = self.x + ballWidth / 2 - hotboxShrinkX; var ballTop = self.y - ballHeight / 2 + hotboxShrinkY; var ballBottom = self.y + ballHeight / 2 - hotboxShrinkY; // Get bounds of the other object var otherLeft = other.x; var otherRight = other.x + (other.width || other.getAsset && other.getAsset({}, {}).width || 0); var otherTop = other.y; var otherBottom = other.y + (other.height || other.getAsset && other.getAsset({}, {}).height || 0); // If other has anchor, adjust accordingly if (typeof other.anchorX === "number" && typeof other.anchorY === "number" && other.width && other.height) { otherLeft = other.x - other.width * other.anchorX; otherRight = other.x + other.width * (1 - other.anchorX); otherTop = other.y - other.height * other.anchorY; otherBottom = other.y + other.height * (1 - other.anchorY); } // AABB collision return !(ballLeft > otherRight || ballRight < otherLeft || ballTop > otherBottom || ballBottom < otherTop); }; return self; }); var Goalkeeper = Container.expand(function () { var self = Container.call(this); var keeperGraphics = self.attachAsset('goalkeeper', { anchorX: 0.5, anchorY: 1.0 }); self.direction = 1; self.speed = 5; self.minX = 710; // kale direğinin sol kenarı self.maxX = 1340; // kale direğinin sağ kenarı self.reactDistance = 700; self.update = function () { self.x += self.direction * self.speed; if (self.x <= self.minX) { self.x = self.minX; self.direction = 1; } else if (self.x >= self.maxX) { self.x = self.maxX; self.direction = -1; } if (ball.isMoving && ball.y < self.y + self.reactDistance) { if (ball.x < self.x - 20) { self.direction = -1; self.speed = 5; } else if (ball.x > self.x + 20) { self.direction = 1; self.speed = 5; } } else { self.speed = 3 + Math.floor(goalCount / 1); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x228b22 }); /**** * Game Code ****/ LK.playMusic('MatchMusic'); var goalWidth = 800; // Increased width var goalHeight = 400; // Increased height var goalX = 1024 - goalWidth / 2; // Centered horizontally var goalY = 500; // Moved further down the screen var goalPostLeftX = goalX; // Left post X position var goalPostRightX = goalX + goalWidth; // Right post X position var background = game.addChild(LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 2.048, scaleY: 2.732 })); var net = game.addChild(LK.getAsset('net', { x: goalX + 20, y: goalY + 20, alpha: 0.3 })); var leftPost = game.addChild(LK.getAsset('goalpost', { x: goalX, y: goalY, anchorX: 0.5, anchorY: 0 })); var rightPost = game.addChild(LK.getAsset('goalpost', { x: goalX + goalWidth, y: goalY, anchorX: 0.5, anchorY: 0 })); var crossbar = game.addChild(LK.getAsset('crossbar', { x: goalX, y: goalY, anchorX: 0, anchorY: 0.5 })); var ball = game.addChild(new Ball()); ball.reset(); var goalkeeper = game.addChild(new Goalkeeper()); goalkeeper.x = 1024; goalkeeper.y = goalY + goalHeight + 30; // Moved even closer to the net var aimLine = game.addChild(LK.getAsset('aimLine', { anchorX: 0.5, anchorY: 0, alpha: 0 })); var isAiming = false; var shotCount = 0; var goalCount = 0; var scoreTxt = new Text2('Goals: 0', { size: 90, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 3); // Anchor to a position slightly higher than before LK.gui.bottom.addChild(scoreTxt); // Add score text to the bottom of the screen var instructionTxt = new Text2('Tap and drag to aim, release to shoot!', { size: 80, fill: 0xFFFFFF }); instructionTxt.anchor.set(0.5, 3); instructionTxt.x = 1024; instructionTxt.y = 2400; game.addChild(instructionTxt); // Add "Top Score : MrSabri 65" to the bottom left corner var topScoreTxt = new Text2('Top Score : MrSabri 65', { size: 50, fill: 0xFFFF00 //{1e} // yellow }); topScoreTxt.anchor.set(0, 1.3); // left edge, bottom LK.gui.bottomLeft.addChild(topScoreTxt); function updateScore() { scoreTxt.setText('Goals: ' + goalCount); } function resetForNextShot() { LK.setTimeout(function () { ball.reset(); isAiming = false; aimLine.alpha = 0; ball.reset(); isAiming = false; aimLine.alpha = 0; }, 500); } function checkGoal() { if (ball.intersects(net)) { // Check for goalkeeper collision with reduced side hitbox var keeperSaveZone = { x: goalkeeper.x - 110, // Increased from 100 to 110 for wider side coverage y: goalkeeper.y - 160, // Reduced height zone width: 220, // Increased from 200 to 220 for wider side hitbox height: 160 // Reduced from ~212 to 160 }; var ballInSaveZone = ball.x > keeperSaveZone.x && ball.x < keeperSaveZone.x + keeperSaveZone.width && ball.y > keeperSaveZone.y && ball.y < keeperSaveZone.y + keeperSaveZone.height; if (!ballInSaveZone) { goalCount++; goalkeeper.speed += 1; // Increase goalkeeper speed after a goal is scored LK.effects.flashScreen(0x00ff00, 500); // Trigger green light effect } else { goalkeeper.speed += 2; // Increase goalkeeper speed after conceding a goal LK.effects.flashScreen(0xff0000, 500); // Trigger red light effect LK.showGameOver('Final Score: ' + goalCount); LK.stopMusic(); } updateScore(); resetForNextShot(); return true; } // Check if ball is in goal area but doesn't touch net (save scenario) var inGoalArea = ball.x > goalX - 50 && ball.x < goalX + goalWidth + 50 && ball.y > goalY - 50 && ball.y < goalY + goalHeight + 50; if (inGoalArea && !ball.intersects(net) && ball.isMoving) { resetForNextShot(); return true; } return false; } game.down = function (x, y, obj) { if (!ball.isMoving) { isAiming = true; aimLine.x = ball.x; aimLine.y = ball.y; aimLine.alpha = 0.8; var deltaX = x - ball.x; var deltaY = y - ball.y; var angle = Math.atan2(deltaY, deltaX); aimLine.rotation = angle - Math.PI / 2; var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); aimLine.height = Math.min(distance * 0.5, 200); } }; game.move = function (x, y, obj) { if (isAiming) { var deltaX = x - ball.x; var deltaY = y - ball.y; var angle = Math.atan2(deltaY, deltaX); aimLine.rotation = angle - Math.PI / 2; var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); aimLine.height = Math.min(distance * 0.5, 200); } }; game.up = function (x, y, obj) { if (isAiming && !ball.isMoving) { shotCount++; ball.shoot(x, y); isAiming = false; aimLine.alpha = 0; if (shotCount === 1) { instructionTxt.alpha = 0; } } }; var ballLastY = ball.y; var ballLastInGoal = false; game.update = function () { var currentInGoal = ball.x > goalX && ball.x < goalX + goalWidth && ball.y > goalY && ball.y < goalY + goalHeight; if (!ballLastInGoal && currentInGoal && ball.isMoving) { checkGoal(); } if (ball.y < -100) { LK.showGameOver('Final Score: ' + goalCount); // End the game and show goal count LK.stopMusic(); } if (ball.x < 0 || ball.x > 2048) { LK.showGameOver('Final Score: ' + goalCount); // End the game and show goal count LK.stopMusic(); } ballLastY = ball.y; ballLastInGoal = currentInGoal; };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballGraphics = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.isMoving = false;
self.gravity = -0.5;
self.friction = 0.97;
self.shoot = function (targetX, targetY) {
var deltaX = targetX - self.x;
var deltaY = targetY - self.y;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
self.velocityX = deltaX / distance * 30; // Increase speed for direct aim
self.velocityY = deltaY / distance * 30; // Increase speed for direct aim
self.isMoving = true;
};
self.reset = function () {
self.x = 1024;
self.y = 1700;
self.velocityX = 0;
self.velocityY = 0;
self.isMoving = false;
};
self.update = function () {
if (self.isMoving) {
self.x += self.velocityX;
self.y += self.velocityY;
self.velocityY += self.gravity;
self.velocityX *= self.friction;
self.velocityY *= self.friction;
if (Math.abs(self.velocityX) < 0.5 && Math.abs(self.velocityY) < 0.5) {
self.isMoving = false;
}
}
};
// Override intersects to reduce the hotbox of the ball
self.intersects = function (other) {
// Get bounds of this ball
var ballWidth = ballGraphics.width;
var ballHeight = ballGraphics.height;
// Reduce hotbox by 30% in each direction
var hotboxShrinkX = ballWidth * 0.15;
var hotboxShrinkY = ballHeight * 0.15;
var ballLeft = self.x - ballWidth / 2 + hotboxShrinkX;
var ballRight = self.x + ballWidth / 2 - hotboxShrinkX;
var ballTop = self.y - ballHeight / 2 + hotboxShrinkY;
var ballBottom = self.y + ballHeight / 2 - hotboxShrinkY;
// Get bounds of the other object
var otherLeft = other.x;
var otherRight = other.x + (other.width || other.getAsset && other.getAsset({}, {}).width || 0);
var otherTop = other.y;
var otherBottom = other.y + (other.height || other.getAsset && other.getAsset({}, {}).height || 0);
// If other has anchor, adjust accordingly
if (typeof other.anchorX === "number" && typeof other.anchorY === "number" && other.width && other.height) {
otherLeft = other.x - other.width * other.anchorX;
otherRight = other.x + other.width * (1 - other.anchorX);
otherTop = other.y - other.height * other.anchorY;
otherBottom = other.y + other.height * (1 - other.anchorY);
}
// AABB collision
return !(ballLeft > otherRight || ballRight < otherLeft || ballTop > otherBottom || ballBottom < otherTop);
};
return self;
});
var Goalkeeper = Container.expand(function () {
var self = Container.call(this);
var keeperGraphics = self.attachAsset('goalkeeper', {
anchorX: 0.5,
anchorY: 1.0
});
self.direction = 1;
self.speed = 5;
self.minX = 710; // kale direğinin sol kenarı
self.maxX = 1340; // kale direğinin sağ kenarı
self.reactDistance = 700;
self.update = function () {
self.x += self.direction * self.speed;
if (self.x <= self.minX) {
self.x = self.minX;
self.direction = 1;
} else if (self.x >= self.maxX) {
self.x = self.maxX;
self.direction = -1;
}
if (ball.isMoving && ball.y < self.y + self.reactDistance) {
if (ball.x < self.x - 20) {
self.direction = -1;
self.speed = 5;
} else if (ball.x > self.x + 20) {
self.direction = 1;
self.speed = 5;
}
} else {
self.speed = 3 + Math.floor(goalCount / 1);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228b22
});
/****
* Game Code
****/
LK.playMusic('MatchMusic');
var goalWidth = 800; // Increased width
var goalHeight = 400; // Increased height
var goalX = 1024 - goalWidth / 2; // Centered horizontally
var goalY = 500; // Moved further down the screen
var goalPostLeftX = goalX; // Left post X position
var goalPostRightX = goalX + goalWidth; // Right post X position
var background = game.addChild(LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 2.048,
scaleY: 2.732
}));
var net = game.addChild(LK.getAsset('net', {
x: goalX + 20,
y: goalY + 20,
alpha: 0.3
}));
var leftPost = game.addChild(LK.getAsset('goalpost', {
x: goalX,
y: goalY,
anchorX: 0.5,
anchorY: 0
}));
var rightPost = game.addChild(LK.getAsset('goalpost', {
x: goalX + goalWidth,
y: goalY,
anchorX: 0.5,
anchorY: 0
}));
var crossbar = game.addChild(LK.getAsset('crossbar', {
x: goalX,
y: goalY,
anchorX: 0,
anchorY: 0.5
}));
var ball = game.addChild(new Ball());
ball.reset();
var goalkeeper = game.addChild(new Goalkeeper());
goalkeeper.x = 1024;
goalkeeper.y = goalY + goalHeight + 30; // Moved even closer to the net
var aimLine = game.addChild(LK.getAsset('aimLine', {
anchorX: 0.5,
anchorY: 0,
alpha: 0
}));
var isAiming = false;
var shotCount = 0;
var goalCount = 0;
var scoreTxt = new Text2('Goals: 0', {
size: 90,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 3); // Anchor to a position slightly higher than before
LK.gui.bottom.addChild(scoreTxt); // Add score text to the bottom of the screen
var instructionTxt = new Text2('Tap and drag to aim, release to shoot!', {
size: 80,
fill: 0xFFFFFF
});
instructionTxt.anchor.set(0.5, 3);
instructionTxt.x = 1024;
instructionTxt.y = 2400;
game.addChild(instructionTxt);
// Add "Top Score : MrSabri 65" to the bottom left corner
var topScoreTxt = new Text2('Top Score : MrSabri 65', {
size: 50,
fill: 0xFFFF00 //{1e} // yellow
});
topScoreTxt.anchor.set(0, 1.3); // left edge, bottom
LK.gui.bottomLeft.addChild(topScoreTxt);
function updateScore() {
scoreTxt.setText('Goals: ' + goalCount);
}
function resetForNextShot() {
LK.setTimeout(function () {
ball.reset();
isAiming = false;
aimLine.alpha = 0;
ball.reset();
isAiming = false;
aimLine.alpha = 0;
}, 500);
}
function checkGoal() {
if (ball.intersects(net)) {
// Check for goalkeeper collision with reduced side hitbox
var keeperSaveZone = {
x: goalkeeper.x - 110,
// Increased from 100 to 110 for wider side coverage
y: goalkeeper.y - 160,
// Reduced height zone
width: 220,
// Increased from 200 to 220 for wider side hitbox
height: 160 // Reduced from ~212 to 160
};
var ballInSaveZone = ball.x > keeperSaveZone.x && ball.x < keeperSaveZone.x + keeperSaveZone.width && ball.y > keeperSaveZone.y && ball.y < keeperSaveZone.y + keeperSaveZone.height;
if (!ballInSaveZone) {
goalCount++;
goalkeeper.speed += 1; // Increase goalkeeper speed after a goal is scored
LK.effects.flashScreen(0x00ff00, 500); // Trigger green light effect
} else {
goalkeeper.speed += 2; // Increase goalkeeper speed after conceding a goal
LK.effects.flashScreen(0xff0000, 500); // Trigger red light effect
LK.showGameOver('Final Score: ' + goalCount);
LK.stopMusic();
}
updateScore();
resetForNextShot();
return true;
}
// Check if ball is in goal area but doesn't touch net (save scenario)
var inGoalArea = ball.x > goalX - 50 && ball.x < goalX + goalWidth + 50 && ball.y > goalY - 50 && ball.y < goalY + goalHeight + 50;
if (inGoalArea && !ball.intersects(net) && ball.isMoving) {
resetForNextShot();
return true;
}
return false;
}
game.down = function (x, y, obj) {
if (!ball.isMoving) {
isAiming = true;
aimLine.x = ball.x;
aimLine.y = ball.y;
aimLine.alpha = 0.8;
var deltaX = x - ball.x;
var deltaY = y - ball.y;
var angle = Math.atan2(deltaY, deltaX);
aimLine.rotation = angle - Math.PI / 2;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
aimLine.height = Math.min(distance * 0.5, 200);
}
};
game.move = function (x, y, obj) {
if (isAiming) {
var deltaX = x - ball.x;
var deltaY = y - ball.y;
var angle = Math.atan2(deltaY, deltaX);
aimLine.rotation = angle - Math.PI / 2;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
aimLine.height = Math.min(distance * 0.5, 200);
}
};
game.up = function (x, y, obj) {
if (isAiming && !ball.isMoving) {
shotCount++;
ball.shoot(x, y);
isAiming = false;
aimLine.alpha = 0;
if (shotCount === 1) {
instructionTxt.alpha = 0;
}
}
};
var ballLastY = ball.y;
var ballLastInGoal = false;
game.update = function () {
var currentInGoal = ball.x > goalX && ball.x < goalX + goalWidth && ball.y > goalY && ball.y < goalY + goalHeight;
if (!ballLastInGoal && currentInGoal && ball.isMoving) {
checkGoal();
}
if (ball.y < -100) {
LK.showGameOver('Final Score: ' + goalCount); // End the game and show goal count
LK.stopMusic();
}
if (ball.x < 0 || ball.x > 2048) {
LK.showGameOver('Final Score: ' + goalCount); // End the game and show goal count
LK.stopMusic();
}
ballLastY = ball.y;
ballLastInGoal = currentInGoal;
};