Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'LK.Graphics is not a constructor' in or related to this line: 'var ropeGraphics = new LK.Graphics();' Line Number: 111
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'LK.Graphics is not a constructor' in or related to this line: 'var ropeGraphics = new LK.Graphics();' Line Number: 107
Code edit (3 edits merged)
Please save this source code
User prompt
Plugins failed to load. Please try again and if the problem persists, please contact technical support i got this error
User prompt
var tween = LK.import("@upit/tween.v1"); this is the problem ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
still have problem
User prompt
fix the error please
Code edit (1 edits merged)
Please save this source code
User prompt
Crane Balance Master
Initial prompt
I want to create a balancing game with square containers dropped from a crane. The surroundings can be a construction site.
/**** * Classes ****/ var Crane = Container.expand(function () { var self = Container.call(this); var craneGraphics = self.attachAsset('crane', { anchorX: 0.5, anchorY: 0.5 }); // Vinç sabit kalacağı için update fonksiyonuna gerek yok self.update = function () {}; return self; }); var GameContainer = Container.expand(function () { var self = Container.call(this); var containerGraphics = self.attachAsset('container', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = { x: 0, y: 0 }; self.grounded = false; self.settled = false; self.settleTimer = 0; self.isAttached = true; self.intersects = function (other) { // Daha hassas çarpışma kontrolü return Math.abs(self.x - other.x) < 200 && // X ekseninde çarpışma alanı Math.abs(self.y - other.y) < 150; // Y ekseninde çarpışma alanı }; self.update = function () { if (self.isAttached) { return; } if (!self.grounded) { self.velocity.y += 0.8; // Yerçekimi self.x += self.velocity.x; self.y += self.velocity.y; // Çarpışma kontrolü - HER FRAME'DE kontrol et var hitSomething = false; var landingY = null; // Platform ile çarpışma kontrolü if (self.x >= platformX - 150 && self.x <= platformX + 150 && self.y >= platformY - 182.62 / 2) { landingY = platformY - 182.62 / 2; hitSomething = true; console.log("Platforma çarptı"); } // Diğer konteynerlerle çarpışma kontrolü var highestContainer = null; var highestY = platformY; // Başlangıç referansı for (var i = 0; i < containers.length; i++) { var other = containers[i]; if (other !== self && other.grounded) { // Önce X ekseninde çakışma var mı kontrol et if (Math.abs(self.x - other.x) < 200) { // Sonra Y ekseninde bu konteynerin üstüne düşüp düşmediğini kontrol et var containerTop = other.y - 182.62 / 2; if (self.y + 182.62 / 2 >= containerTop && self.y < other.y) { if (containerTop < highestY) { highestY = containerTop; highestContainer = other; landingY = containerTop - 182.62 / 2; hitSomething = true; } } } } } // Eğer bir yere çarptıysa if (hitSomething && landingY !== null) { self.y = landingY; self.grounded = true; self.velocity.y = 0; self.velocity.x *= 0.3; self.settleTimer = 60; LK.getSound('stack').play(); console.log("Kutu yerleşti: x=" + self.x + ", y=" + self.y); // Denge kontrolü if (highestContainer && Math.abs(self.x - highestContainer.x) > 150) { LK.effects.flashScreen(0xff0000, 500); LK.setTimeout(function () { LK.showGameOver(); }, 500); console.log("Denge bozuldu: x farkı=" + Math.abs(self.x - highestContainer.x)); } } // Ekran dışına çıkma kontrolü if (self.y > 2732 + 182.62) { self.destroy(); containers.splice(containers.indexOf(self), 1); LK.showGameOver(); console.log("Ekran dışına çıktı"); } } else { // Yerleştikten sonraki hareket if (self.settleTimer > 0) { self.settleTimer--; if (self.settleTimer <= 0) { self.settled = true; } } if (Math.abs(self.velocity.x) > 0.1) { self.x += self.velocity.x; self.velocity.x *= 0.95; } } }; return self; }); var Hook = Container.expand(function () { var self = Container.call(this); var hookGraphics = self.attachAsset('hook', { anchorX: 0.5, anchorY: 0.5 }); var ropeGraphics = self.attachAsset('rope', { anchorX: 0.5, anchorY: 0 }); ropeGraphics.visible = false; self.hasContainer = false; self.attachedContainer = null; self.direction = 1; // Kanca hareket yönü self.speed = 6; // Kanca hareket hızı self.update = function () { // Kanca sağa-sola hareket eder self.x += self.direction * self.speed; // Hareket sınırları (örneğin, ekranın 200-1848 piksel arası) if (self.x <= 200) { self.direction = 1; } else if (self.x >= 1848) { self.direction = -1; } // İp görünümünü vinç ile kanca arasında güncelle ropeGraphics.visible = true; // İp her zaman görünür (konteyner olmasa bile) var ropeLength = Math.abs(self.y - crane.y); // Vinç ile kanca arasındaki mesafe ropeGraphics.height = ropeLength; ropeGraphics.x = crane.x - self.x; // İpin x ofseti (vinç ile kanca arası) ropeGraphics.y = ropeLength / 2; // İpin y pozisyonu // Konteyner bağlıysa, konteyneri kancaya göre güncelle if (self.hasContainer && self.attachedContainer) { self.attachedContainer.x = self.x; self.attachedContainer.y = self.y + 80; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var containers = []; var crane; var hook; var platform; var ground; var platformX = 2048 / 2; var platformY = 2732 - 300; var scoreText; var nextContainerTimer = 0; var gameSpeed = 1; var maxContainers = 12; // 12 konteyner = 120 puan var gameEnded = false; ground = game.addChild(LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 - 50 })); platform = game.addChild(LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5, x: platformX, y: platformY })); crane = game.addChild(new Crane()); crane.x = 2048 / 2; crane.y = 1550; hook = game.addChild(new Hook()); hook.x = crane.x; hook.y = 100; scoreText = new Text2('Score: 0', { size: 80, fill: 0x000000 }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); function createNewContainer() { // Maksimum konteyner sayısına ulaşıldı mı kontrol et if (containers.length >= maxContainers) { return false; } var newContainer = new GameContainer(); newContainer.x = hook.x; newContainer.y = hook.y + 80; newContainer.isAttached = true; containers.push(newContainer); game.addChild(newContainer); hook.hasContainer = true; hook.attachedContainer = newContainer; return true; } function dropContainer() { if (hook.hasContainer && hook.attachedContainer) { hook.attachedContainer.isAttached = false; hook.attachedContainer.velocity.x = hook.direction * hook.speed * 0.5; hook.attachedContainer.velocity.y = 2; hook.hasContainer = false; hook.attachedContainer = null; LK.getSound('drop').play(); LK.setScore(LK.getScore() + 10); scoreText.setText('Score: ' + LK.getScore()); nextContainerTimer = 120; if (LK.getScore() % 100 === 0) { hook.speed += 0.5; } } } createNewContainer(); game.down = function (x, y, obj) { if (!gameEnded) { dropContainer(); } }; game.update = function () { if (gameEnded) { return; } if (nextContainerTimer > 0) { nextContainerTimer--; if (nextContainerTimer <= 0 && !hook.hasContainer) { // Yeni konteyner oluştur, eğer maksimuma ulaşmadıysak if (!createNewContainer()) { // Maksimum konteyner sayısına ulaşıldı, oyunu bitir gameEnded = true; LK.effects.flashScreen(0x00ff00, 500); // Yeşil flash - başarı LK.setTimeout(function () { LK.showYouWin(); }, 500); return; } } } for (var i = containers.length - 1; i >= 0; i--) { var container = containers[i]; // Platform dışına çıkma kontrolü if (container.grounded && (container.x < platformX - 250 || container.x > platformX + 250)) { gameEnded = true; LK.effects.flashScreen(0xff0000, 500); LK.setTimeout(function () { LK.showGameOver(); }, 500); break; } // Ekranın üstüne çıkma kontrolü (Y değeri 0'a yaklaştığında) if (container.grounded && container.y <= 100) { gameEnded = true; LK.effects.flashScreen(0x00ff00, 500); // Yeşil flash - başarı LK.setTimeout(function () { LK.showYouWin(); }, 500); break; } } // Alternatif bitiş koşulu - 120 puana ulaşma if (LK.getScore() >= 120) { gameEnded = true; LK.effects.flashScreen(0x00ff00, 500); LK.setTimeout(function () { LK.showYouWin(); }, 500); } };
/****
* Classes
****/
var Crane = Container.expand(function () {
var self = Container.call(this);
var craneGraphics = self.attachAsset('crane', {
anchorX: 0.5,
anchorY: 0.5
});
// Vinç sabit kalacağı için update fonksiyonuna gerek yok
self.update = function () {};
return self;
});
var GameContainer = Container.expand(function () {
var self = Container.call(this);
var containerGraphics = self.attachAsset('container', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = {
x: 0,
y: 0
};
self.grounded = false;
self.settled = false;
self.settleTimer = 0;
self.isAttached = true;
self.intersects = function (other) {
// Daha hassas çarpışma kontrolü
return Math.abs(self.x - other.x) < 200 &&
// X ekseninde çarpışma alanı
Math.abs(self.y - other.y) < 150; // Y ekseninde çarpışma alanı
};
self.update = function () {
if (self.isAttached) {
return;
}
if (!self.grounded) {
self.velocity.y += 0.8; // Yerçekimi
self.x += self.velocity.x;
self.y += self.velocity.y;
// Çarpışma kontrolü - HER FRAME'DE kontrol et
var hitSomething = false;
var landingY = null;
// Platform ile çarpışma kontrolü
if (self.x >= platformX - 150 && self.x <= platformX + 150 && self.y >= platformY - 182.62 / 2) {
landingY = platformY - 182.62 / 2;
hitSomething = true;
console.log("Platforma çarptı");
}
// Diğer konteynerlerle çarpışma kontrolü
var highestContainer = null;
var highestY = platformY; // Başlangıç referansı
for (var i = 0; i < containers.length; i++) {
var other = containers[i];
if (other !== self && other.grounded) {
// Önce X ekseninde çakışma var mı kontrol et
if (Math.abs(self.x - other.x) < 200) {
// Sonra Y ekseninde bu konteynerin üstüne düşüp düşmediğini kontrol et
var containerTop = other.y - 182.62 / 2;
if (self.y + 182.62 / 2 >= containerTop && self.y < other.y) {
if (containerTop < highestY) {
highestY = containerTop;
highestContainer = other;
landingY = containerTop - 182.62 / 2;
hitSomething = true;
}
}
}
}
}
// Eğer bir yere çarptıysa
if (hitSomething && landingY !== null) {
self.y = landingY;
self.grounded = true;
self.velocity.y = 0;
self.velocity.x *= 0.3;
self.settleTimer = 60;
LK.getSound('stack').play();
console.log("Kutu yerleşti: x=" + self.x + ", y=" + self.y);
// Denge kontrolü
if (highestContainer && Math.abs(self.x - highestContainer.x) > 150) {
LK.effects.flashScreen(0xff0000, 500);
LK.setTimeout(function () {
LK.showGameOver();
}, 500);
console.log("Denge bozuldu: x farkı=" + Math.abs(self.x - highestContainer.x));
}
}
// Ekran dışına çıkma kontrolü
if (self.y > 2732 + 182.62) {
self.destroy();
containers.splice(containers.indexOf(self), 1);
LK.showGameOver();
console.log("Ekran dışına çıktı");
}
} else {
// Yerleştikten sonraki hareket
if (self.settleTimer > 0) {
self.settleTimer--;
if (self.settleTimer <= 0) {
self.settled = true;
}
}
if (Math.abs(self.velocity.x) > 0.1) {
self.x += self.velocity.x;
self.velocity.x *= 0.95;
}
}
};
return self;
});
var Hook = Container.expand(function () {
var self = Container.call(this);
var hookGraphics = self.attachAsset('hook', {
anchorX: 0.5,
anchorY: 0.5
});
var ropeGraphics = self.attachAsset('rope', {
anchorX: 0.5,
anchorY: 0
});
ropeGraphics.visible = false;
self.hasContainer = false;
self.attachedContainer = null;
self.direction = 1; // Kanca hareket yönü
self.speed = 6; // Kanca hareket hızı
self.update = function () {
// Kanca sağa-sola hareket eder
self.x += self.direction * self.speed;
// Hareket sınırları (örneğin, ekranın 200-1848 piksel arası)
if (self.x <= 200) {
self.direction = 1;
} else if (self.x >= 1848) {
self.direction = -1;
}
// İp görünümünü vinç ile kanca arasında güncelle
ropeGraphics.visible = true; // İp her zaman görünür (konteyner olmasa bile)
var ropeLength = Math.abs(self.y - crane.y); // Vinç ile kanca arasındaki mesafe
ropeGraphics.height = ropeLength;
ropeGraphics.x = crane.x - self.x; // İpin x ofseti (vinç ile kanca arası)
ropeGraphics.y = ropeLength / 2; // İpin y pozisyonu
// Konteyner bağlıysa, konteyneri kancaya göre güncelle
if (self.hasContainer && self.attachedContainer) {
self.attachedContainer.x = self.x;
self.attachedContainer.y = self.y + 80;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var containers = [];
var crane;
var hook;
var platform;
var ground;
var platformX = 2048 / 2;
var platformY = 2732 - 300;
var scoreText;
var nextContainerTimer = 0;
var gameSpeed = 1;
var maxContainers = 12; // 12 konteyner = 120 puan
var gameEnded = false;
ground = game.addChild(LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 - 50
}));
platform = game.addChild(LK.getAsset('platform', {
anchorX: 0.5,
anchorY: 0.5,
x: platformX,
y: platformY
}));
crane = game.addChild(new Crane());
crane.x = 2048 / 2;
crane.y = 1550;
hook = game.addChild(new Hook());
hook.x = crane.x;
hook.y = 100;
scoreText = new Text2('Score: 0', {
size: 80,
fill: 0x000000
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
function createNewContainer() {
// Maksimum konteyner sayısına ulaşıldı mı kontrol et
if (containers.length >= maxContainers) {
return false;
}
var newContainer = new GameContainer();
newContainer.x = hook.x;
newContainer.y = hook.y + 80;
newContainer.isAttached = true;
containers.push(newContainer);
game.addChild(newContainer);
hook.hasContainer = true;
hook.attachedContainer = newContainer;
return true;
}
function dropContainer() {
if (hook.hasContainer && hook.attachedContainer) {
hook.attachedContainer.isAttached = false;
hook.attachedContainer.velocity.x = hook.direction * hook.speed * 0.5;
hook.attachedContainer.velocity.y = 2;
hook.hasContainer = false;
hook.attachedContainer = null;
LK.getSound('drop').play();
LK.setScore(LK.getScore() + 10);
scoreText.setText('Score: ' + LK.getScore());
nextContainerTimer = 120;
if (LK.getScore() % 100 === 0) {
hook.speed += 0.5;
}
}
}
createNewContainer();
game.down = function (x, y, obj) {
if (!gameEnded) {
dropContainer();
}
};
game.update = function () {
if (gameEnded) {
return;
}
if (nextContainerTimer > 0) {
nextContainerTimer--;
if (nextContainerTimer <= 0 && !hook.hasContainer) {
// Yeni konteyner oluştur, eğer maksimuma ulaşmadıysak
if (!createNewContainer()) {
// Maksimum konteyner sayısına ulaşıldı, oyunu bitir
gameEnded = true;
LK.effects.flashScreen(0x00ff00, 500); // Yeşil flash - başarı
LK.setTimeout(function () {
LK.showYouWin();
}, 500);
return;
}
}
}
for (var i = containers.length - 1; i >= 0; i--) {
var container = containers[i];
// Platform dışına çıkma kontrolü
if (container.grounded && (container.x < platformX - 250 || container.x > platformX + 250)) {
gameEnded = true;
LK.effects.flashScreen(0xff0000, 500);
LK.setTimeout(function () {
LK.showGameOver();
}, 500);
break;
}
// Ekranın üstüne çıkma kontrolü (Y değeri 0'a yaklaştığında)
if (container.grounded && container.y <= 100) {
gameEnded = true;
LK.effects.flashScreen(0x00ff00, 500); // Yeşil flash - başarı
LK.setTimeout(function () {
LK.showYouWin();
}, 500);
break;
}
}
// Alternatif bitiş koşulu - 120 puana ulaşma
if (LK.getScore() >= 120) {
gameEnded = true;
LK.effects.flashScreen(0x00ff00, 500);
LK.setTimeout(function () {
LK.showYouWin();
}, 500);
}
};