User prompt
Very nice, add more features
User prompt
add different features
User prompt
oyunun amacını ingilizce yaz küçük bir yazıyla ve arka plan değişsin her aşamada ve kontrol kolay olsun
User prompt
oyunun amacını başta belirt ve neon ışıklı yap herşeyi
User prompt
renklendir her yeri
Code edit (1 edits merged)
Please save this source code
User prompt
Color Catcher
Initial prompt
make a simple game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Ball class var Ball = Container.expand(function () { var self = Container.call(this); var ballAsset = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); // Neon color palette for balls var colors = [0x00ffff, 0xff00ff, 0xffff00, 0x00ff00, 0xff8800, 0x00ffea, 0xff0088]; ballAsset.color = colors[Math.floor(Math.random() * colors.length)]; ballAsset.tint = ballAsset.color; // Neon glow effect: animate alpha for a pulsing glow tween(ballAsset, { alpha: 0.7 }, { duration: 400, yoyo: true, repeat: Infinity, easing: tween.easeInOut }); self.speed = 18 + Math.random() * 6; // px per frame, increases with score self.update = function () { self.y += self.speed; }; return self; }); // Basket class var Basket = Container.expand(function () { var self = Container.call(this); var basketAsset = self.attachAsset('basket', { anchorX: 0.5, anchorY: 0.5 }); // Neon basket: random neon color and glow var basketColors = [0x00ffff, 0xff00ff, 0xffff00, 0x00ff00, 0xff8800, 0x00ffea, 0xff0088]; basketAsset.tint = basketColors[Math.floor(Math.random() * basketColors.length)]; tween(basketAsset, { alpha: 0.7 }, { duration: 600, yoyo: true, repeat: Infinity, easing: tween.easeInOut }); return self; }); // Bomb class var Bomb = Container.expand(function () { var self = Container.call(this); var bombAsset = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); // Neon bomb: magenta or cyan var bombColors = [0xff00ff, 0x00ffff, 0xffff00]; bombAsset.tint = bombColors[Math.floor(Math.random() * bombColors.length)]; tween(bombAsset, { alpha: 0.6 }, { duration: 400, yoyo: true, repeat: Infinity, easing: tween.easeInOut }); self.speed = 20 + Math.random() * 8; self.update = function () { self.y += self.speed; }; return self; }); // PowerUp class (neon star) var PowerUp = Container.expand(function () { var self = Container.call(this); // Use a ball asset for now, but tint and scale to look like a power-up var starAsset = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); // Neon star color var starColors = [0xFFD700, 0x00ffea, 0xff00ff, 0x00ff00]; starAsset.tint = starColors[Math.floor(Math.random() * starColors.length)]; starAsset.scaleX = 1.3; starAsset.scaleY = 1.3; // Animate alpha for a pulsing glow tween(starAsset, { alpha: 0.8 }, { duration: 300, yoyo: true, repeat: Infinity, easing: tween.easeInOut }); self.speed = 16 + Math.random() * 4; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Game area: 2048x2732 // Basket: wide rectangle // Ball: colored ellipse // Bomb: black ellipse // Sound for catching a ball // Sound for catching a bomb // Sound for missing a ball game.setBackgroundColor(0x000000); // Neon-style game objective text at the start (small, English, subtle neon) var objectiveTxt = new Text2('Goal: Catch the balls, avoid the bombs!', { size: 54, // smaller text fill: 0x00ffff, stroke: 0x222222, strokeThickness: 8, dropShadow: true, dropShadowColor: 0x00ffff, dropShadowBlur: 12, dropShadowDistance: 0, align: "center" }); objectiveTxt.anchor.set(0.5, 0); objectiveTxt.y = 90; LK.gui.top.addChild(objectiveTxt); // Hide objective after 2.5 seconds LK.setTimeout(function () { objectiveTxt.visible = false; }, 2500); // Score text var scoreTxt = new Text2('0', { size: 120, fill: 0x00FFEA, stroke: 0xFF00FF, strokeThickness: 18, dropShadow: true, dropShadowColor: 0x00FFFF, dropShadowBlur: 24, dropShadowDistance: 0, align: "center" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Misses text (shows "Missed!" when a ball is missed) var missTxt = new Text2('', { size: 90, fill: 0x00FFFF, stroke: 0xFF00FF, strokeThickness: 14, dropShadow: true, dropShadowColor: 0x00FFFF, dropShadowBlur: 18, dropShadowDistance: 0, align: "center" }); missTxt.anchor.set(0.5, 0); LK.gui.top.addChild(missTxt); missTxt.visible = false; // Basket var basket = new Basket(); game.addChild(basket); basket.y = 2732 - 180; basket.x = 2048 / 2; // Ball, bomb, and power-up arrays var balls = []; var bombs = []; var powerups = []; // Dragging var dragNode = null; // Spawning control var spawnTimer = 0; var spawnInterval = 55; // frames between spawns, will decrease as score increases // State var lastScore = 0; var gameOver = false; // Helper: spawn a ball, bomb, or power-up function spawnFallingObject() { // 80% ball, 20% bomb, 5% power-up (power-up can overlap with ball, so rare) var rand = Math.random(); var x = 150 + Math.random() * (2048 - 300); if (rand < 0.2) { var bomb = new Bomb(); bomb.x = x; bomb.y = -60; bomb.lastIntersecting = false; bombs.push(bomb); game.addChild(bomb); } else if (rand > 0.95) { // 5% chance for power-up var powerup = new PowerUp(); powerup.x = x; powerup.y = -60; powerup.lastIntersecting = false; powerups.push(powerup); game.addChild(powerup); } else { var ball = new Ball(); ball.x = x; ball.y = -60; ball.lastIntersecting = false; balls.push(ball); game.addChild(ball); } } // Move handler for dragging basket function handleMove(x, y, obj) { if (dragNode) { // Clamp basket within screen var halfWidth = dragNode.width / 2; var minX = halfWidth; var maxX = 2048 - halfWidth; dragNode.x = Math.max(minX, Math.min(maxX, x)); } } // Touch/mouse events game.down = function (x, y, obj) { // Allow drag from anywhere in lower 1/3 of screen for easier control if (y > 2732 * 2 / 3) { dragNode = basket; handleMove(x, y, obj); } }; game.move = handleMove; game.up = function (x, y, obj) { dragNode = null; }; // Main update loop game.update = function () { if (gameOver) return; // Change background color at each 5 points (neon palette) var neonBgColors = [0x000000, 0x0ff0fc, 0x1a0033, 0x3b6eea, 0x00ffea, 0xff00ff, 0x00ff00, 0xf75e5e, 0xf7c325]; var score = LK.getScore(); var bgIndex = Math.floor(score / 5) % neonBgColors.length; game.setBackgroundColor(neonBgColors[bgIndex]); // Spawn balls/bombs spawnTimer++; // Decrease interval as score increases (min 25) var interval = Math.max(25, spawnInterval - Math.floor(LK.getScore() / 10) * 3); if (spawnTimer >= interval) { spawnFallingObject(); spawnTimer = 0; } // Update balls for (var i = balls.length - 1; i >= 0; i--) { var ball = balls[i]; if (ball.lastY === undefined) ball.lastY = ball.y; if (ball.lastIntersecting === undefined) ball.lastIntersecting = false; ball.update(); // Check for catch var intersecting = ball.intersects(basket); if (!ball.lastIntersecting && intersecting) { // Caught! LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); LK.getSound('catch').play(); // Flash screen with a random color for fun var flashColors = [0x4ad991, 0xf75e5e, 0x3b6eea, 0xf7a325, 0xFFD700]; LK.effects.flashScreen(flashColors[Math.floor(Math.random() * flashColors.length)], 200); // Animate ball to basket and fade out LK.effects.flashObject(basket, 0x4ad991, 200); // Flash basket green tween(ball, { y: basket.y, alpha: 0 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { ball.destroy(); } }); balls.splice(i, 1); continue; } // Missed (goes below basket) if (ball.lastY < 2732 && ball.y >= 2732 - 80) { // Missed! LK.getSound('miss').play(); missTxt.setText('Missed!'); missTxt.visible = true; // Flash screen LK.effects.flashScreen(0xff0000, 600); // End game after short delay LK.setTimeout(function () { LK.showGameOver(); }, 600); gameOver = true; return; } // Off screen (cleanup) if (ball.y > 2800) { ball.destroy(); balls.splice(i, 1); continue; } ball.lastY = ball.y; ball.lastIntersecting = intersecting; } // Update bombs for (var j = bombs.length - 1; j >= 0; j--) { var bomb = bombs[j]; if (bomb.lastY === undefined) bomb.lastY = bomb.y; if (bomb.lastIntersecting === undefined) bomb.lastIntersecting = false; bomb.update(); // Check for catch var intersecting = bomb.intersects(basket); if (!bomb.lastIntersecting && intersecting) { // Caught bomb: game over LK.getSound('boom').play(); // Flash basket red LK.effects.flashObject(basket, 0xff0000, 600); // Flash screen LK.effects.flashScreen(0x000000, 600); // End game after short delay LK.setTimeout(function () { LK.showGameOver(); }, 600); gameOver = true; return; } // Off screen (cleanup) if (bomb.y > 2800) { bomb.destroy(); bombs.splice(j, 1); continue; } bomb.lastY = bomb.y; bomb.lastIntersecting = intersecting; } // Update power-ups for (var k = powerups.length - 1; k >= 0; k--) { var powerup = powerups[k]; if (powerup.lastY === undefined) powerup.lastY = powerup.y; if (powerup.lastIntersecting === undefined) powerup.lastIntersecting = false; powerup.update(); // Check for catch var intersecting = powerup.intersects(basket); if (!powerup.lastIntersecting && intersecting) { // Caught power-up: double points! LK.setScore(LK.getScore() + 2); scoreTxt.setText(LK.getScore()); LK.getSound('catch').play(); // Flash screen with a bright gold LK.effects.flashScreen(0xFFD700, 350); // Animate power-up to basket and fade out LK.effects.flashObject(basket, 0xFFD700, 300); tween(powerup, { y: basket.y, alpha: 0 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { powerup.destroy(); } }); powerups.splice(k, 1); continue; } // Off screen (cleanup) if (powerup.y > 2800) { powerup.destroy(); powerups.splice(k, 1); continue; } powerup.lastY = powerup.y; powerup.lastIntersecting = intersecting; } // Hide miss text after a short time if (missTxt.visible) { if (!missTxt.hideTimeout) { missTxt.hideTimeout = LK.setTimeout(function () { missTxt.visible = false; missTxt.hideTimeout = null; }, 900); } } }; // Reset state on new game LK.on('gameStart', function () { // Remove all balls, bombs, and powerups for (var i = 0; i < balls.length; i++) balls[i].destroy(); for (var j = 0; j < bombs.length; j++) bombs[j].destroy(); for (var k = 0; k < powerups.length; k++) powerups[k].destroy(); balls = []; bombs = []; powerups = []; basket.x = 2048 / 2; basket.y = 2732 - 180; // Randomize basket color on new game var basketColors = [0x3b6eea, 0x4ad991, 0xf75e5e, 0xf7a325, 0xFFD700]; if (basket.children && basket.children.length > 0) { basket.children[0].tint = basketColors[Math.floor(Math.random() * basketColors.length)]; } LK.setScore(0); scoreTxt.setText('0'); missTxt.setText(''); missTxt.visible = false; if (missTxt.hideTimeout) { LK.clearTimeout(missTxt.hideTimeout); missTxt.hideTimeout = null; } spawnTimer = 0; gameOver = false; });
===================================================================
--- original.js
+++ change.js
@@ -75,8 +75,36 @@
self.y += self.speed;
};
return self;
});
+// PowerUp class (neon star)
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ // Use a ball asset for now, but tint and scale to look like a power-up
+ var starAsset = self.attachAsset('ball', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Neon star color
+ var starColors = [0xFFD700, 0x00ffea, 0xff00ff, 0x00ff00];
+ starAsset.tint = starColors[Math.floor(Math.random() * starColors.length)];
+ starAsset.scaleX = 1.3;
+ starAsset.scaleY = 1.3;
+ // Animate alpha for a pulsing glow
+ tween(starAsset, {
+ alpha: 0.8
+ }, {
+ duration: 300,
+ yoyo: true,
+ repeat: Infinity,
+ easing: tween.easeInOut
+ });
+ self.speed = 16 + Math.random() * 4;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
/****
* Initialize Game
****/
@@ -86,15 +114,15 @@
/****
* Game Code
****/
-// Sound for missing a ball
-// Sound for catching a bomb
-// Sound for catching a ball
-// Bomb: black ellipse
-// Ball: colored ellipse
-// Basket: wide rectangle
// Game area: 2048x2732
+// Basket: wide rectangle
+// Ball: colored ellipse
+// Bomb: black ellipse
+// Sound for catching a ball
+// Sound for catching a bomb
+// Sound for missing a ball
game.setBackgroundColor(0x000000);
// Neon-style game objective text at the start (small, English, subtle neon)
var objectiveTxt = new Text2('Goal: Catch the balls, avoid the bombs!', {
size: 54,
@@ -148,31 +176,40 @@
var basket = new Basket();
game.addChild(basket);
basket.y = 2732 - 180;
basket.x = 2048 / 2;
-// Ball and bomb arrays
+// Ball, bomb, and power-up arrays
var balls = [];
var bombs = [];
+var powerups = [];
// Dragging
var dragNode = null;
// Spawning control
var spawnTimer = 0;
var spawnInterval = 55; // frames between spawns, will decrease as score increases
// State
var lastScore = 0;
var gameOver = false;
-// Helper: spawn a ball or bomb
+// Helper: spawn a ball, bomb, or power-up
function spawnFallingObject() {
- // 80% ball, 20% bomb
- var isBomb = Math.random() < 0.2;
+ // 80% ball, 20% bomb, 5% power-up (power-up can overlap with ball, so rare)
+ var rand = Math.random();
var x = 150 + Math.random() * (2048 - 300);
- if (isBomb) {
+ if (rand < 0.2) {
var bomb = new Bomb();
bomb.x = x;
bomb.y = -60;
bomb.lastIntersecting = false;
bombs.push(bomb);
game.addChild(bomb);
+ } else if (rand > 0.95) {
+ // 5% chance for power-up
+ var powerup = new PowerUp();
+ powerup.x = x;
+ powerup.y = -60;
+ powerup.lastIntersecting = false;
+ powerups.push(powerup);
+ game.addChild(powerup);
} else {
var ball = new Ball();
ball.x = x;
ball.y = -60;
@@ -304,8 +341,47 @@
}
bomb.lastY = bomb.y;
bomb.lastIntersecting = intersecting;
}
+ // Update power-ups
+ for (var k = powerups.length - 1; k >= 0; k--) {
+ var powerup = powerups[k];
+ if (powerup.lastY === undefined) powerup.lastY = powerup.y;
+ if (powerup.lastIntersecting === undefined) powerup.lastIntersecting = false;
+ powerup.update();
+ // Check for catch
+ var intersecting = powerup.intersects(basket);
+ if (!powerup.lastIntersecting && intersecting) {
+ // Caught power-up: double points!
+ LK.setScore(LK.getScore() + 2);
+ scoreTxt.setText(LK.getScore());
+ LK.getSound('catch').play();
+ // Flash screen with a bright gold
+ LK.effects.flashScreen(0xFFD700, 350);
+ // Animate power-up to basket and fade out
+ LK.effects.flashObject(basket, 0xFFD700, 300);
+ tween(powerup, {
+ y: basket.y,
+ alpha: 0
+ }, {
+ duration: 200,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ powerup.destroy();
+ }
+ });
+ powerups.splice(k, 1);
+ continue;
+ }
+ // Off screen (cleanup)
+ if (powerup.y > 2800) {
+ powerup.destroy();
+ powerups.splice(k, 1);
+ continue;
+ }
+ powerup.lastY = powerup.y;
+ powerup.lastIntersecting = intersecting;
+ }
// Hide miss text after a short time
if (missTxt.visible) {
if (!missTxt.hideTimeout) {
missTxt.hideTimeout = LK.setTimeout(function () {
@@ -316,13 +392,15 @@
}
};
// Reset state on new game
LK.on('gameStart', function () {
- // Remove all balls and bombs
+ // Remove all balls, bombs, and powerups
for (var i = 0; i < balls.length; i++) balls[i].destroy();
for (var j = 0; j < bombs.length; j++) bombs[j].destroy();
+ for (var k = 0; k < powerups.length; k++) powerups[k].destroy();
balls = [];
bombs = [];
+ powerups = [];
basket.x = 2048 / 2;
basket.y = 2732 - 180;
// Randomize basket color on new game
var basketColors = [0x3b6eea, 0x4ad991, 0xf75e5e, 0xf7a325, 0xFFD700];