User prompt
çocuk adeasında canımızda gitmeyecek
User prompt
çocuk odasına geçince daha yukarıdan birşeyler gelmesin
User prompt
3 canımız bitince bir anda 2 boyutlu kuş bakışı bir çocuk odasına at
User prompt
oyun 3000 puandan sonra bir anda acayip zorlansın
User prompt
oyun yavaş yavaş hızlansın
User prompt
kaleyi biraz daha büyüt ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Castle Ball Collector
Initial prompt
Collecting balls that come from above with a castle moving on the same axis
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballColors = ['ball', 'ballBlue', 'ballGreen', 'ballYellow'];
var randomColor = ballColors[Math.floor(Math.random() * ballColors.length)];
var ballGraphics = self.attachAsset(randomColor, {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 3 + 2; // Random speed between 2-5
self.baseSpeed = self.speed; // Store original speed
self.lastY = 0;
self.lastIntersecting = false;
self.update = function () {
self.y += self.speed * speedMultiplier;
};
return self;
});
var Castle = Container.expand(function () {
var self = Container.call(this);
var castleGraphics = self.attachAsset('castle', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
var ChildRoom = Container.expand(function () {
var self = Container.call(this);
// Room floor
var floor = self.attachAsset('roomFloor', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
// Carpet in center
var carpet = self.attachAsset('carpet', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
// Bed in top right corner
var bed = self.attachAsset('bed', {
anchorX: 0,
anchorY: 0,
x: 1500,
y: 200
});
// Desk on left wall
var desk = self.attachAsset('desk', {
anchorX: 0,
anchorY: 0,
x: 200,
y: 800
});
// Chair by desk
var chair = self.attachAsset('chair', {
anchorX: 0,
anchorY: 0,
x: 400,
y: 850
});
// Bookshelf on bottom wall
var bookshelf = self.attachAsset('bookshelf', {
anchorX: 0,
anchorY: 0,
x: 800,
y: 2000
});
// Scattered toys
var toy1 = self.attachAsset('toy', {
anchorX: 0.5,
anchorY: 0.5,
x: 600,
y: 1200
});
var toy2 = self.attachAsset('toy', {
anchorX: 0.5,
anchorY: 0.5,
x: 1400,
y: 1500
});
var toy3 = self.attachAsset('toy', {
anchorX: 0.5,
anchorY: 0.5,
x: 300,
y: 1800
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var castle = game.addChild(new Castle());
castle.x = 1024; // Center horizontally
castle.y = 2732 - 50; // Near bottom with some padding
var balls = [];
var lives = 3;
var ballSpawnTimer = 0;
var ballSpawnRate = 60; // Spawn every 60 ticks initially
var speedMultiplier = 1.0; // Speed multiplier for progressive difficulty
var dragNode = null;
var childRoom = null;
var isInRoom = false;
// Score display
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Lives display
var livesTxt = new Text2('Lives: 3', {
size: 60,
fill: 0xFFFFFF
});
livesTxt.anchor.set(0, 0);
livesTxt.x = 100;
livesTxt.y = 100;
LK.gui.topLeft.addChild(livesTxt);
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
// Keep castle within screen bounds
if (dragNode.x < 100) dragNode.x = 100;
if (dragNode.x > 1948) dragNode.x = 1948;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = castle;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
// Spawn balls only if not in child room
if (!isInRoom) {
ballSpawnTimer++;
if (ballSpawnTimer >= ballSpawnRate) {
var newBall = new Ball();
newBall.x = Math.random() * 1848 + 100; // Random x position within screen bounds
newBall.y = -50; // Start above screen
newBall.lastY = newBall.y;
newBall.lastIntersecting = false;
balls.push(newBall);
game.addChild(newBall);
ballSpawnTimer = 0;
// Gradually increase difficulty
if (LK.getScore() >= 3000) {
// Extreme difficulty after 3000 points - much faster spawn rate
if (ballSpawnRate > 10) {
ballSpawnRate = Math.max(10, ballSpawnRate - 0.5);
}
} else {
// Normal difficulty progression before 3000 points
if (ballSpawnRate > 30) {
ballSpawnRate = Math.max(30, ballSpawnRate - 0.1);
}
}
// Gradually increase speed multiplier every 300 ticks (5 seconds at 60fps)
if (LK.ticks % 300 === 0) {
if (LK.getScore() >= 3000) {
speedMultiplier += 0.3; // Extreme speed increase after 3000 points
} else {
speedMultiplier += 0.05; // Normal speed increase before 3000 points
}
}
}
}
// Update balls
for (var i = balls.length - 1; i >= 0; i--) {
var ball = balls[i];
// Check if ball went off screen (missed)
if (ball.lastY < 2732 && ball.y >= 2732) {
// Ball hit ground
lives--;
livesTxt.setText('Lives: ' + lives);
LK.getSound('miss').play();
LK.effects.flashScreen(0xFF0000, 300);
if (lives <= 0) {
// Transition to child room instead of game over
if (!isInRoom) {
isInRoom = true;
// Hide all game elements
castle.visible = false;
for (var j = 0; j < balls.length; j++) {
balls[j].visible = false;
}
// Create and show child room
childRoom = game.addChild(new ChildRoom());
// Hide UI elements
scoreTxt.visible = false;
livesTxt.visible = false;
// Show restart message after a delay
LK.setTimeout(function () {
LK.showGameOver();
}, 3000);
}
}
ball.destroy();
balls.splice(i, 1);
continue;
}
// Check collision with castle
var currentIntersecting = ball.intersects(castle);
if (!ball.lastIntersecting && currentIntersecting) {
// Ball caught
LK.setScore(LK.getScore() + 10);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('catch').play();
// Flash castle green briefly
LK.effects.flashObject(castle, 0x00FF00, 200);
// Scale castle animation when catching ball
tween(castle, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(castle, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150,
easing: tween.easeIn
});
}
});
ball.destroy();
balls.splice(i, 1);
continue;
}
// Update tracking variables
ball.lastY = ball.y;
ball.lastIntersecting = currentIntersecting;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -150,38 +150,40 @@
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
- // Spawn balls
- ballSpawnTimer++;
- if (ballSpawnTimer >= ballSpawnRate) {
- var newBall = new Ball();
- newBall.x = Math.random() * 1848 + 100; // Random x position within screen bounds
- newBall.y = -50; // Start above screen
- newBall.lastY = newBall.y;
- newBall.lastIntersecting = false;
- balls.push(newBall);
- game.addChild(newBall);
- ballSpawnTimer = 0;
- // Gradually increase difficulty
- if (LK.getScore() >= 3000) {
- // Extreme difficulty after 3000 points - much faster spawn rate
- if (ballSpawnRate > 10) {
- ballSpawnRate = Math.max(10, ballSpawnRate - 0.5);
- }
- } else {
- // Normal difficulty progression before 3000 points
- if (ballSpawnRate > 30) {
- ballSpawnRate = Math.max(30, ballSpawnRate - 0.1);
- }
- }
- // Gradually increase speed multiplier every 300 ticks (5 seconds at 60fps)
- if (LK.ticks % 300 === 0) {
+ // Spawn balls only if not in child room
+ if (!isInRoom) {
+ ballSpawnTimer++;
+ if (ballSpawnTimer >= ballSpawnRate) {
+ var newBall = new Ball();
+ newBall.x = Math.random() * 1848 + 100; // Random x position within screen bounds
+ newBall.y = -50; // Start above screen
+ newBall.lastY = newBall.y;
+ newBall.lastIntersecting = false;
+ balls.push(newBall);
+ game.addChild(newBall);
+ ballSpawnTimer = 0;
+ // Gradually increase difficulty
if (LK.getScore() >= 3000) {
- speedMultiplier += 0.3; // Extreme speed increase after 3000 points
+ // Extreme difficulty after 3000 points - much faster spawn rate
+ if (ballSpawnRate > 10) {
+ ballSpawnRate = Math.max(10, ballSpawnRate - 0.5);
+ }
} else {
- speedMultiplier += 0.05; // Normal speed increase before 3000 points
+ // Normal difficulty progression before 3000 points
+ if (ballSpawnRate > 30) {
+ ballSpawnRate = Math.max(30, ballSpawnRate - 0.1);
+ }
}
+ // Gradually increase speed multiplier every 300 ticks (5 seconds at 60fps)
+ if (LK.ticks % 300 === 0) {
+ if (LK.getScore() >= 3000) {
+ speedMultiplier += 0.3; // Extreme speed increase after 3000 points
+ } else {
+ speedMultiplier += 0.05; // Normal speed increase before 3000 points
+ }
+ }
}
}
// Update balls
for (var i = balls.length - 1; i >= 0; i--) {
beyaz ağlardan olusan direkleri olan bir futbol kalesi. In-Game asset. 2d. High contrast. No shadows
v. . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
kulak . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
araba . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
bir dolabın üst kısmını çiz. In-Game asset. 2d. High contrast. No shadows
kuş bakışı üstünde kitaplar olan bir masa çiz. In-Game asset. 2d. High contrast. No shadows
. . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
. . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
gun. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
bulut . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
yıldırım . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat