Code edit (2 edits merged)
Please save this source code
User prompt
every time a new star is created increase the threshold to destroy obstacles that are offcreeen in 300 pixels
User prompt
add hand to game start. dot should be bouncing on top of hand.
User prompt
on game start move star orbit and obstacle 1000 pixels higher
Code edit (1 edits merged)
Please save this source code
User prompt
dot should bounce on click but should start in still position on the top of the hand
User prompt
first star should spawn 700 pixels higher
User prompt
move dot 400 pixels higher on game start and should bounce 400 pixels higher too
User prompt
move all assets from game start 500 pixels higher
Code edit (1 edits merged)
Please save this source code
User prompt
move initial orbit 500 pixels lower
User prompt
move initial obstacles 500 pixels higher
User prompt
make dot bounce point 500 pixels higher
User prompt
initial dot bounce should happen 500 pixels higher from current spot.
Code edit (2 edits merged)
Please save this source code
User prompt
add hand below dot on game start
User prompt
dot should continue to bounce on initial position and not go dowards until first star is destroyed
User prompt
after first star is destroyed, destroy hand, and allow dot to keep moving downwards and not bounce
User prompt
dot should bounce when it intersects with hand
User prompt
hand destroy should be a fade down
User prompt
when first star is destroyed, hand should move downwards 800 pixels and then destroy itself.
User prompt
do not destroy hand when star is destroyed
User prompt
when star is destroyed, add movement to the hand, and move the hand downwards 1000 pixels
User prompt
hand should mvoe on tick 1000 pixels down after star is destroyed
User prompt
when first star is destroyed, move hand on tick 1000 pixels down.
/****
* Classes
****/
var ScorePopup = Container.expand(function (x, y) {
var self = Container.call(this);
self.x = x;
self.y = y;
var scoreText = new Text2('+1', {
size: 100,
fill: "#ffffff",
anchorX: 0.5,
anchorY: 0.5
});
scoreText.x = -scoreText.width / 2;
scoreText.y = -scoreText.height / 2;
self.addChild(scoreText);
self.alpha = 1;
var duration = 90;
self.update = function () {
duration--;
self.y -= 2;
self.alpha -= 1 / 90;
if (duration <= 0) {
self.destroy();
}
};
game.addChild(self);
});
var ParticleEffect = Container.expand(function (x, y) {
var self = Container.call(this);
self.x = x;
self.y = y;
var particles = [];
for (var i = 0; i < 20; i++) {
var particle = self.attachAsset('star', {
anchorX: 0.5,
anchorY: 0.5
});
particle.scaleX = particle.scaleY = Math.random() * 0.5 + 0.5;
particle.alpha = 0.7;
particle.vx = (Math.random() - 0.5) * 10;
particle.vy = (Math.random() - 0.5) * 10;
particles.push(particle);
}
self.update = function () {
for (var i = particles.length - 1; i >= 0; i--) {
particles[i].x += particles[i].vx;
particles[i].y += particles[i].vy;
particles[i].alpha -= 0.02;
if (particles[i].alpha <= 0) {
particles[i].destroy();
particles.splice(i, 1);
}
}
if (particles.length === 0) {
self.destroy();
}
};
game.addChild(self);
});
var DotParticleEffect = Container.expand(function (x, y) {
var self = Container.call(this);
self.x = x;
self.y = y;
var particles = [];
var angleIncrement = Math.PI * 2 / 20;
var speed = 30;
for (var i = 0; i < 20; i++) {
var particle = self.attachAsset('dot', {
anchorX: 0.5,
anchorY: 0.5
});
particle.scaleX = particle.scaleY = 0.5;
particle.alpha = 1;
var angle = i * angleIncrement;
particle.vx = Math.cos(angle) * speed;
particle.vy = Math.sin(angle) * speed;
particles.push(particle);
}
self.update = function () {
for (var i = particles.length - 1; i >= 0; i--) {
particles[i].x += particles[i].vx;
particles[i].y += particles[i].vy;
particles[i].alpha -= 0.0167;
if (particles[i].alpha <= 0) {
particles[i].destroy();
particles.splice(i, 1);
}
}
if (particles.length === 0) {
self.destroy();
}
};
game.addChild(self);
});
var Dot = Container.expand(function () {
var self = Container.call(this);
var dotGraphics = self.attachAsset('dot', {
anchorX: 0.5,
anchorY: 0.5
});
self.destroyed = false;
self.velocityY = 0;
self.gravity = 0.7;
self.bounce = -15;
self.update = function () {
var previousY = self.y;
self.velocityY += self.gravity;
self.y += self.velocityY;
if (self.y > 2732 - self.height / 2 && !self.firstTouch) {
self.velocityY = self.bounce;
} else if (self.y > 2832 && !self.destroyed) {
createDotParticleEffect(self.x, self.y);
self.destroyed = true;
self.destroy();
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
self.movedDistance = self.y - previousY;
};
self.bounceUp = function () {
if (!self.destroyed) {
self.velocityY = self.bounce;
self.firstTouch = true;
}
};
});
var CircularObstacle = Container.expand(function (starX, starY, radius, angleSpeed, initialAngle) {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.angle = initialAngle || 0;
self.radius = radius;
self.angleSpeed = angleSpeed * 0.75;
self.starX = starX;
self.starY = starY;
self.updatePosition = function () {
self.x = self.starX + Math.cos(self.angle) * self.radius;
self.y = self.starY + Math.sin(self.angle) * self.radius;
self.angle += self.angleSpeed * 0.35;
obstacleGraphics.rotation += self.angleSpeed * 0.35;
};
self.moveDown = function (distance) {
self.starY += distance * 2;
};
self.updatePosition();
});
var Star = Container.expand(function () {
var self = Container.call(this);
var starGraphics = self.attachAsset('star', {
anchorX: 0.5,
anchorY: 0.5
});
self.scaleDirection = 1;
self.scaleSpeed = 0.005;
self.minScale = 1;
self.maxScale = 1.2;
self.moveDown = function (distance) {
self.y += distance * 2;
if (self.y > 2732 - self.height / 2) {
self.y = -self.height / 2;
}
};
self.updateScale = function () {
if (self.scaleDirection === 1 && starGraphics.scale.x < self.maxScale) {
starGraphics.scale.x += self.scaleSpeed;
starGraphics.scale.y += self.scaleSpeed;
} else if (self.scaleDirection === -1 && starGraphics.scale.x > self.minScale) {
starGraphics.scale.x -= self.scaleSpeed;
starGraphics.scale.y -= self.scaleSpeed;
}
if (starGraphics.scale.x >= self.maxScale || starGraphics.scale.x <= self.minScale) {
self.scaleDirection *= -1;
}
};
});
var OrbitLine = Container.expand(function (starX, starY, radius) {
var self = Container.call(this);
self.starX = starX;
self.starY = starY;
self.radius = radius;
var segments = 50;
var angleIncrement = Math.PI * 2 / segments;
for (var i = 0; i < segments; i++) {
var angle = i * angleIncrement;
var dot = self.attachAsset('smallObstacle', {
x: starX + Math.cos(angle) * radius,
y: starY + Math.sin(angle) * radius,
anchorX: 0.5,
anchorY: 0.5
});
if (i % 2 === 0) {
dot.alpha = 0;
}
}
self.moveDown = function (distance) {
self.y += distance * 2;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
function createParticleEffect(x, y) {
var effect = new ParticleEffect(x, y);
LK.on('tick', function () {
effect.update();
});
}
function createDotParticleEffect(x, y) {
var effect = new DotParticleEffect(x, y);
LK.on('tick', function () {
effect.update();
});
}
var dot = game.addChild(new Dot());
dot.x = 2048 / 2;
dot.y = 2732 - dot.height / 2;
var obstacles = [];
function updateObstacles() {
var obstacleCount = 5 + LK.getScore();
while (obstacles.length < obstacleCount) {
var obstacle = game.addChild(new Obstacle());
obstacle.x = obstacle.direction === 1 ? -obstacle.width / 2 : 2048 + obstacle.width / 2;
obstacle.y = Math.random() * (2732 - obstacle.height) + obstacle.height / 2;
obstacles.push(obstacle);
}
}
var scoreTxt = new Text2('', {
size: 200,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
scoreTxt.x = 600;
LK.gui.top.addChild(scoreTxt);
LK.gui.top.addChild(scoreTxt);
game.on('down', function (obj) {
if (dot) {
dot.bounceUp();
}
});
var stars = [];
var star = game.addChild(new Star());
star.x = 2048 / 2;
star.y = 2732 / 2;
stars.push(star);
// Add dotted orbit for the first star
var orbitLine = game.addChild(new OrbitLine(star.x, star.y, 300));
obstacles.push(orbitLine);
function spawnInitialObstacles() {
var starX = 2048 / 2;
var starY = 2732 / 2;
var radius = 300;
var angleSpeed = 0.05;
for (var i = 0; i < 20; i++) {
var obstacle = game.addChild(new CircularObstacle(starX, starY, radius, angleSpeed));
obstacles.push(obstacle);
}
}
spawnInitialObstacles();
LK.on('tick', function () {
dot.update();
for (var i = 0; i < obstacles.length; i++) {
if (obstacles[i] instanceof CircularObstacle) {
obstacles[i].updatePosition();
} else {
if (typeof obstacles[i].move === 'function') {
obstacles[i].move();
}
}
if (dot.y < 1500 && dot.movedDistance < 0) {
obstacles[i].moveDown(-dot.movedDistance);
}
if (dot.intersects(obstacles[i]) && !(obstacles[i] instanceof OrbitLine)) {
if (!dot.destroyed) {
createDotParticleEffect(dot.x, dot.y);
dot.destroyed = true;
}
dot.destroy();
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
} else if (obstacles[i].y > 2732 + 1000) {
obstacles[i].destroy();
obstacles.splice(i, 1);
}
}
for (var j = stars.length - 1; j >= 0; j--) {
stars[j].updateScale();
if (dot.intersects(stars[j])) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore().toString());
scoreTxt.alpha = 0;
var originalY = scoreTxt.y;
LK.on('tick', function updateScoreTextFadeIn() {
scoreTxt.alpha += 0.05;
scoreTxt.y = originalY - (1 - scoreTxt.alpha) * 50;
if (scoreTxt.alpha >= 1) {
scoreTxt.alpha = 1;
LK.off('tick', updateScoreTextFadeIn);
}
});
var oldStarY = stars[j].y;
createParticleEffect(stars[j].x, stars[j].y);
var scorePopup = new ScorePopup(stars[j].x, stars[j].y);
LK.on('tick', function () {
scorePopup.update();
});
stars[j].destroy();
stars.splice(j, 1);
var newStar = game.addChild(new Star());
newStar.x = 2048 / 2;
var additionalYOffset = LK.getScore() > 1 ? (LK.getScore() - 1) * 200 : 0;
newStar.y = oldStarY - 2000 - additionalYOffset;
stars.push(newStar);
// Add a cumulative number of CircularObstacles at random positions around the new star
var cumulativeObstacles = 1 + LK.getScore();
for (var k = 0; k < cumulativeObstacles; k++) {
var randomAngle = Math.random() * Math.PI * 2; // Random angle in radians
var radiusOffset = k * 100;
var circularObstacle = game.addChild(new CircularObstacle(newStar.x, newStar.y, 300 + radiusOffset, 0.05 * (k % 2 === 0 ? 1 : -1), randomAngle));
obstacles.push(circularObstacle);
}
// Add orbit line after creating all obstacles
var orbitLine = game.addChild(new OrbitLine(newStar.x, newStar.y, 300 + radiusOffset));
obstacles.push(orbitLine);
} else if (dot.y < 1500 && dot.movedDistance < 0) {
stars[j].moveDown(-dot.movedDistance);
}
}
});