User prompt
Add a main menu and maybe add a tutorial in the main menu
User prompt
make it so you can select the color you want by clicking it and then control the left arrow sprites
User prompt
There's nothing in the random game.
User prompt
Color Cascade
Initial prompt
Make a random game, it could be your choice, just make a random game.
/****
* Classes
****/
var Basket = Container.expand(function (color) {
var self = Container.call(this);
self.color = color;
self.isDragging = false;
var basketGraphics = self.attachAsset(color + 'Basket', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
self.isDragging = true;
draggedBasket = self;
};
self.up = function (x, y, obj) {
self.isDragging = false;
if (draggedBasket === self) {
draggedBasket = null;
}
};
return self;
});
// Game variables
var Orb = Container.expand(function (color) {
var self = Container.call(this);
self.color = color;
self.speed = 3 + Math.random() * 2; // Random fall speed
var orbGraphics = self.attachAsset(color + 'Orb', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.lastY === undefined) self.lastY = self.y;
self.y += self.speed;
// Check if orb hit the ground
if (self.lastY < 2650 && self.y >= 2650) {
// Missed - lose health
health--;
LK.getSound('miss').play();
self.destroy();
// Remove from orbs array
for (var i = orbs.length - 1; i >= 0; i--) {
if (orbs[i] === self) {
orbs.splice(i, 1);
break;
}
}
}
self.lastY = self.y;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x001122
});
/****
* Game Code
****/
// Sound effects
// Colored baskets
// Colored orbs
// Game variables
var score = 0;
var health = 5;
var gameSpeed = 1;
var colors = ['red', 'blue', 'green'];
var orbs = [];
var baskets = [];
var draggedBasket = null;
var orbSpawnTimer = 0;
var orbSpawnDelay = 90; // frames between orb spawns
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var healthText = new Text2('Health: 5', {
size: 60,
fill: 0xFF4444
});
healthText.anchor.set(0.5, 0);
healthText.y = 80;
LK.gui.top.addChild(healthText);
// Tutorial system
var showTutorial = true;
var tutorialStep = 0;
var tutorialTimer = 0;
var tutorialTexts = [];
// Create tutorial overlay
var tutorialOverlay = LK.getAsset('tutorialOverlay', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
tutorialOverlay.x = 1024;
tutorialOverlay.y = 1366;
// Tutorial text content
var tutorialMessages = ["Welcome to Color Cascade!", "Drag baskets to catch falling orbs", "Match orb colors with basket colors", "Correct catches = +10 points", "Wrong colors or misses = -1 health", "Reach 500 points to win!", "Tap anywhere to start playing"];
// Create tutorial text elements
for (var t = 0; t < tutorialMessages.length; t++) {
var tutorialText = new Text2(tutorialMessages[t], {
size: 80,
fill: 0xFFFFFF
});
tutorialText.anchor.set(0.5, 0.5);
tutorialText.x = 1024;
tutorialText.y = 1366 + (t - 3) * 100;
tutorialText.alpha = 0;
tutorialTexts.push(tutorialText);
}
// Add tutorial elements to game
if (showTutorial) {
game.addChild(tutorialOverlay);
for (var t = 0; t < tutorialTexts.length; t++) {
game.addChild(tutorialTexts[t]);
}
}
// Create baskets
for (var i = 0; i < colors.length; i++) {
var basket = new Basket(colors[i]);
basket.x = 400 + i * 400;
basket.y = 2600;
baskets.push(basket);
game.addChild(basket);
}
// Mouse/touch handlers
game.down = function (x, y, obj) {
// Dismiss tutorial on any touch
if (showTutorial) {
showTutorial = false;
// Remove tutorial elements
tutorialOverlay.destroy();
for (var t = 0; t < tutorialTexts.length; t++) {
tutorialTexts[t].destroy();
}
tutorialTexts = [];
return;
}
};
game.move = function (x, y, obj) {
if (draggedBasket) {
draggedBasket.x = Math.max(60, Math.min(1988, x));
}
};
game.up = function (x, y, obj) {
draggedBasket = null;
for (var i = 0; i < baskets.length; i++) {
baskets[i].isDragging = false;
}
};
// Main game update loop
game.update = function () {
// Handle tutorial display
if (showTutorial) {
tutorialTimer++;
// Show tutorial steps with timing
if (tutorialTimer < 60) {
// Fade in overlay
tutorialOverlay.alpha = Math.min(0.8, tutorialTimer / 60 * 0.8);
} else if (tutorialTimer < 420) {
// Show tutorial steps every 60 frames
var currentStep = Math.floor((tutorialTimer - 60) / 60);
if (currentStep < tutorialTexts.length) {
tutorialTexts[currentStep].alpha = 1;
tutorialStep = currentStep;
}
}
return; // Don't run game logic during tutorial
}
// Check for game over
if (health <= 0) {
LK.showGameOver();
return;
}
// Check for win condition
if (score >= 500) {
LK.showYouWin();
return;
}
// Spawn orbs
orbSpawnTimer++;
if (orbSpawnTimer >= orbSpawnDelay / gameSpeed) {
orbSpawnTimer = 0;
var randomColor = colors[Math.floor(Math.random() * colors.length)];
var newOrb = new Orb(randomColor);
newOrb.x = 100 + Math.random() * 1848;
newOrb.y = -50;
newOrb.lastIntersecting = [];
// Initialize intersection tracking for each basket
for (var b = 0; b < baskets.length; b++) {
newOrb.lastIntersecting[b] = false;
}
orbs.push(newOrb);
game.addChild(newOrb);
}
// Check orb-basket collisions
for (var i = orbs.length - 1; i >= 0; i--) {
var orb = orbs[i];
var orbCaught = false;
for (var j = 0; j < baskets.length; j++) {
var basket = baskets[j];
var currentIntersecting = orb.intersects(basket);
if (!orb.lastIntersecting[j] && currentIntersecting) {
// Collision just happened
if (orb.color === basket.color) {
// Correct catch
score += 10;
LK.getSound('catch').play();
LK.setScore(score);
} else {
// Wrong color
health--;
LK.getSound('shatter').play();
LK.effects.flashObject(orb, 0xff0000, 300);
}
orb.destroy();
orbs.splice(i, 1);
orbCaught = true;
break;
}
orb.lastIntersecting[j] = currentIntersecting;
}
if (orbCaught) continue;
// Remove orbs that are off screen
if (orb.y > 2800) {
orb.destroy();
orbs.splice(i, 1);
}
}
// Update UI
scoreText.setText('Score: ' + score);
healthText.setText('Health: ' + health);
// Increase difficulty
if (score >= 100 && colors.length === 3) {
colors.push('yellow');
// Add yellow basket
var yellowBasket = new Basket('yellow');
yellowBasket.x = 400 + 3 * 400;
yellowBasket.y = 2600;
baskets.push(yellowBasket);
game.addChild(yellowBasket);
}
if (score >= 200 && colors.length === 4) {
colors.push('purple');
// Add purple basket
var purpleBasket = new Basket('purple');
purpleBasket.x = 400 + 4 * 400;
purpleBasket.y = 2600;
baskets.push(purpleBasket);
game.addChild(purpleBasket);
}
// Increase game speed every 50 points
gameSpeed = 1 + Math.floor(score / 50) * 0.2;
orbSpawnDelay = Math.max(30, 90 - Math.floor(score / 50) * 10);
}; /****
* Classes
****/
var Basket = Container.expand(function (color) {
var self = Container.call(this);
self.color = color;
self.isDragging = false;
var basketGraphics = self.attachAsset(color + 'Basket', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
self.isDragging = true;
draggedBasket = self;
};
self.up = function (x, y, obj) {
self.isDragging = false;
if (draggedBasket === self) {
draggedBasket = null;
}
};
return self;
});
// Game variables
var Orb = Container.expand(function (color) {
var self = Container.call(this);
self.color = color;
self.speed = 3 + Math.random() * 2; // Random fall speed
var orbGraphics = self.attachAsset(color + 'Orb', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.lastY === undefined) self.lastY = self.y;
self.y += self.speed;
// Check if orb hit the ground
if (self.lastY < 2650 && self.y >= 2650) {
// Missed - lose health
health--;
LK.getSound('miss').play();
self.destroy();
// Remove from orbs array
for (var i = orbs.length - 1; i >= 0; i--) {
if (orbs[i] === self) {
orbs.splice(i, 1);
break;
}
}
}
self.lastY = self.y;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x001122
});
/****
* Game Code
****/
// Sound effects
// Colored baskets
// Colored orbs
// Game variables
var score = 0;
var health = 5;
var gameSpeed = 1;
var colors = ['red', 'blue', 'green'];
var orbs = [];
var baskets = [];
var draggedBasket = null;
var orbSpawnTimer = 0;
var orbSpawnDelay = 90; // frames between orb spawns
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var healthText = new Text2('Health: 5', {
size: 60,
fill: 0xFF4444
});
healthText.anchor.set(0.5, 0);
healthText.y = 80;
LK.gui.top.addChild(healthText);
// Tutorial system
var showTutorial = true;
var tutorialStep = 0;
var tutorialTimer = 0;
var tutorialTexts = [];
// Create tutorial overlay
var tutorialOverlay = LK.getAsset('tutorialOverlay', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
tutorialOverlay.x = 1024;
tutorialOverlay.y = 1366;
// Tutorial text content
var tutorialMessages = ["Welcome to Color Cascade!", "Drag baskets to catch falling orbs", "Match orb colors with basket colors", "Correct catches = +10 points", "Wrong colors or misses = -1 health", "Reach 500 points to win!", "Tap anywhere to start playing"];
// Create tutorial text elements
for (var t = 0; t < tutorialMessages.length; t++) {
var tutorialText = new Text2(tutorialMessages[t], {
size: 80,
fill: 0xFFFFFF
});
tutorialText.anchor.set(0.5, 0.5);
tutorialText.x = 1024;
tutorialText.y = 1366 + (t - 3) * 100;
tutorialText.alpha = 0;
tutorialTexts.push(tutorialText);
}
// Add tutorial elements to game
if (showTutorial) {
game.addChild(tutorialOverlay);
for (var t = 0; t < tutorialTexts.length; t++) {
game.addChild(tutorialTexts[t]);
}
}
// Create baskets
for (var i = 0; i < colors.length; i++) {
var basket = new Basket(colors[i]);
basket.x = 400 + i * 400;
basket.y = 2600;
baskets.push(basket);
game.addChild(basket);
}
// Mouse/touch handlers
game.down = function (x, y, obj) {
// Dismiss tutorial on any touch
if (showTutorial) {
showTutorial = false;
// Remove tutorial elements
tutorialOverlay.destroy();
for (var t = 0; t < tutorialTexts.length; t++) {
tutorialTexts[t].destroy();
}
tutorialTexts = [];
return;
}
};
game.move = function (x, y, obj) {
if (draggedBasket) {
draggedBasket.x = Math.max(60, Math.min(1988, x));
}
};
game.up = function (x, y, obj) {
draggedBasket = null;
for (var i = 0; i < baskets.length; i++) {
baskets[i].isDragging = false;
}
};
// Main game update loop
game.update = function () {
// Handle tutorial display
if (showTutorial) {
tutorialTimer++;
// Show tutorial steps with timing
if (tutorialTimer < 60) {
// Fade in overlay
tutorialOverlay.alpha = Math.min(0.8, tutorialTimer / 60 * 0.8);
} else if (tutorialTimer < 420) {
// Show tutorial steps every 60 frames
var currentStep = Math.floor((tutorialTimer - 60) / 60);
if (currentStep < tutorialTexts.length) {
tutorialTexts[currentStep].alpha = 1;
tutorialStep = currentStep;
}
}
return; // Don't run game logic during tutorial
}
// Check for game over
if (health <= 0) {
LK.showGameOver();
return;
}
// Check for win condition
if (score >= 500) {
LK.showYouWin();
return;
}
// Spawn orbs
orbSpawnTimer++;
if (orbSpawnTimer >= orbSpawnDelay / gameSpeed) {
orbSpawnTimer = 0;
var randomColor = colors[Math.floor(Math.random() * colors.length)];
var newOrb = new Orb(randomColor);
newOrb.x = 100 + Math.random() * 1848;
newOrb.y = -50;
newOrb.lastIntersecting = [];
// Initialize intersection tracking for each basket
for (var b = 0; b < baskets.length; b++) {
newOrb.lastIntersecting[b] = false;
}
orbs.push(newOrb);
game.addChild(newOrb);
}
// Check orb-basket collisions
for (var i = orbs.length - 1; i >= 0; i--) {
var orb = orbs[i];
var orbCaught = false;
for (var j = 0; j < baskets.length; j++) {
var basket = baskets[j];
var currentIntersecting = orb.intersects(basket);
if (!orb.lastIntersecting[j] && currentIntersecting) {
// Collision just happened
if (orb.color === basket.color) {
// Correct catch
score += 10;
LK.getSound('catch').play();
LK.setScore(score);
} else {
// Wrong color
health--;
LK.getSound('shatter').play();
LK.effects.flashObject(orb, 0xff0000, 300);
}
orb.destroy();
orbs.splice(i, 1);
orbCaught = true;
break;
}
orb.lastIntersecting[j] = currentIntersecting;
}
if (orbCaught) continue;
// Remove orbs that are off screen
if (orb.y > 2800) {
orb.destroy();
orbs.splice(i, 1);
}
}
// Update UI
scoreText.setText('Score: ' + score);
healthText.setText('Health: ' + health);
// Increase difficulty
if (score >= 100 && colors.length === 3) {
colors.push('yellow');
// Add yellow basket
var yellowBasket = new Basket('yellow');
yellowBasket.x = 400 + 3 * 400;
yellowBasket.y = 2600;
baskets.push(yellowBasket);
game.addChild(yellowBasket);
}
if (score >= 200 && colors.length === 4) {
colors.push('purple');
// Add purple basket
var purpleBasket = new Basket('purple');
purpleBasket.x = 400 + 4 * 400;
purpleBasket.y = 2600;
baskets.push(purpleBasket);
game.addChild(purpleBasket);
}
// Increase game speed every 50 points
gameSpeed = 1 + Math.floor(score / 50) * 0.2;
orbSpawnDelay = Math.max(30, 90 - Math.floor(score / 50) * 10);
};