/**** * Classes ****/ var ColorSquare = Container.expand(function () { var self = Container.call(this); var square = self.attachAsset('colorSquare', { anchorX: 0.5, anchorY: 0.5 }); var colorText = new Text2('#FFFFFF', { size: 40, fill: 0xffffff }); colorText.anchor.set(0.5, 0.5); colorText.y = 200; self.addChild(colorText); self.setColor = function (color) { square.tint = color; colorText.setText('#' + color.toString(16).padStart(6, '0').toUpperCase()); }; return self; }); var KeyboardKey = Container.expand(function (letter) { var self = Container.call(this); var keyBg = self.attachAsset('keyboardKey', { anchorX: 0.5, anchorY: 0.5 }); var keyText = new Text2(letter, { size: 70, fill: 0xffffff }); keyText.anchor.set(0.5, 0.5); self.addChild(keyText); self.letter = letter; self.down = function (x, y, obj) { keyBg.tint = 0xcccccc; if (letter === 'DEL') { if (currentName.length > 0) { currentName = currentName.slice(0, -1); updateDisplay(); } } else { if (currentName.length < 15) { currentName += letter; updateDisplay(); } } }; self.up = function (x, y, obj) { keyBg.tint = 0xe0e0e0; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2d3748 }); /**** * Game Code ****/ // Background var background = game.attachAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); var currentName = ''; var colorSquares = []; var keyboardKeys = []; // Logo var gameLogo = game.attachAsset('gameLogo', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 200 }); // Instructions var instructionText = new Text2('Type your name to discover your colors', { size: 50, fill: 0xffffff }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 300; game.addChild(instructionText); // Input display var inputBg = game.attachAsset('inputBackground', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 450 }); var inputText = new Text2('', { size: 60, fill: 0xffffff }); inputText.anchor.set(0.5, 0.5); inputText.x = 1024; inputText.y = 450; game.addChild(inputText); // Color squares for (var i = 0; i < 4; i++) { var square = new ColorSquare(); square.x = 300 + i * 400; square.y = 700; colorSquares.push(square); game.addChild(square); } // Keyboard layout var keyboardLayout = [['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'], ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'], ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'], ['Z', 'X', 'C', 'V', 'B', 'N', 'M', 'DEL'], ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')'], ['😀', '😂', '❤️', '🔥', '⭐', '🌟', '💫', '🎉', '🎊', '✨']]; var startY = 1000; for (var row = 0; row < keyboardLayout.length; row++) { var rowKeys = keyboardLayout[row]; var startX = 1024 - (rowKeys.length - 1) * 70; for (var col = 0; col < rowKeys.length; col++) { var key = new KeyboardKey(rowKeys[col]); key.x = startX + col * 140; key.y = startY + row * 220; keyboardKeys.push(key); game.addChild(key); } } // Clear button var clearButton = game.attachAsset('clearButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2400, scaleX: 1.5, scaleY: 1.5 }); var clearText = new Text2('CLEAR', { size: 60, fill: 0xFFFFFF }); clearText.anchor.set(0.5, 0.5); clearText.x = 1024; clearText.y = 2400; game.addChild(clearText); // Hash function to generate colors from name function hashCode(str) { var hash = 0; for (var i = 0; i < str.length; i++) { var _char = str.charCodeAt(i); hash = (hash << 5) - hash + _char; hash = hash & hash; // Convert to 32-bit integer } return hash; } function generateColors(name) { if (name.length === 0) return [0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc]; // Check if input is a hex color (with or without #) var hexInput = name.toLowerCase(); if (hexInput.charAt(0) === '#') { hexInput = hexInput.substring(1); } var isHex = /^[0-9a-f]{6}$/i.test(hexInput); if (isHex) { var baseColor = parseInt(hexInput, 16); // Generate 4 variations of the hex color var colors = []; colors.push(baseColor); // Original color // Create lighter version var r = baseColor >> 16 & 0xFF; var g = baseColor >> 8 & 0xFF; var b = baseColor & 0xFF; var lighter = Math.min(255, r + 50) << 16 | Math.min(255, g + 50) << 8 | Math.min(255, b + 50); colors.push(lighter); // Create darker version var darker = Math.max(0, r - 50) << 16 | Math.max(0, g - 50) << 8 | Math.max(0, b - 50); colors.push(darker); // Create complementary color var comp = 255 - r << 16 | 255 - g << 8 | 255 - b; colors.push(comp); return colors; } // Special case for "ronan" - return purple, blue, pink, void purple if (name.toLowerCase() === 'ronan') { return [0x8b5cf6, 0x3b82f6, 0xf472b6, 0x4c1d95]; // purple, blue, pink, void purple } // Special case for "daniel" - return green colors if (name.toLowerCase() === 'daniel') { return [0x22c55e, 0x16a34a, 0x15803d, 0x166534]; // different shades of green } var hash = hashCode(name); var colors = []; for (var i = 0; i < 4; i++) { var seed = hash + i * 123456; var r = Math.abs(seed % 256); var g = Math.abs((seed >> 8) % 256); var b = Math.abs((seed >> 16) % 256); // Ensure colors are vibrant enough if (r < 50) r += 50; if (g < 50) g += 50; if (b < 50) b += 50; var color = r << 16 | g << 8 | b; colors.push(color); } return colors; } function updateDisplay() { inputText.setText(currentName || 'Enter your name...'); var colors = generateColors(currentName); for (var i = 0; i < 4; i++) { colorSquares[i].setColor(colors[i]); } } // Clear button functionality clearButton.interactive = true; game.down = function (x, y, obj) { // Check if click is within clear button bounds using direct coordinate comparison var buttonLeft = clearButton.x - 225; var buttonRight = clearButton.x + 225; var buttonTop = clearButton.y - 90; var buttonBottom = clearButton.y + 90; if (x >= buttonLeft && x <= buttonRight && y >= buttonTop && y <= buttonBottom) { clearButton.tint = 0xcc5555; currentName = ''; updateDisplay(); } }; game.up = function (x, y, obj) { clearButton.tint = 0xff6b6b; }; // Initialize display updateDisplay(); // Play background music LK.playMusic('8-bit');
/****
* Classes
****/
var ColorSquare = Container.expand(function () {
var self = Container.call(this);
var square = self.attachAsset('colorSquare', {
anchorX: 0.5,
anchorY: 0.5
});
var colorText = new Text2('#FFFFFF', {
size: 40,
fill: 0xffffff
});
colorText.anchor.set(0.5, 0.5);
colorText.y = 200;
self.addChild(colorText);
self.setColor = function (color) {
square.tint = color;
colorText.setText('#' + color.toString(16).padStart(6, '0').toUpperCase());
};
return self;
});
var KeyboardKey = Container.expand(function (letter) {
var self = Container.call(this);
var keyBg = self.attachAsset('keyboardKey', {
anchorX: 0.5,
anchorY: 0.5
});
var keyText = new Text2(letter, {
size: 70,
fill: 0xffffff
});
keyText.anchor.set(0.5, 0.5);
self.addChild(keyText);
self.letter = letter;
self.down = function (x, y, obj) {
keyBg.tint = 0xcccccc;
if (letter === 'DEL') {
if (currentName.length > 0) {
currentName = currentName.slice(0, -1);
updateDisplay();
}
} else {
if (currentName.length < 15) {
currentName += letter;
updateDisplay();
}
}
};
self.up = function (x, y, obj) {
keyBg.tint = 0xe0e0e0;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2d3748
});
/****
* Game Code
****/
// Background
var background = game.attachAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
var currentName = '';
var colorSquares = [];
var keyboardKeys = [];
// Logo
var gameLogo = game.attachAsset('gameLogo', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 200
});
// Instructions
var instructionText = new Text2('Type your name to discover your colors', {
size: 50,
fill: 0xffffff
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 300;
game.addChild(instructionText);
// Input display
var inputBg = game.attachAsset('inputBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 450
});
var inputText = new Text2('', {
size: 60,
fill: 0xffffff
});
inputText.anchor.set(0.5, 0.5);
inputText.x = 1024;
inputText.y = 450;
game.addChild(inputText);
// Color squares
for (var i = 0; i < 4; i++) {
var square = new ColorSquare();
square.x = 300 + i * 400;
square.y = 700;
colorSquares.push(square);
game.addChild(square);
}
// Keyboard layout
var keyboardLayout = [['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'], ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'], ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'], ['Z', 'X', 'C', 'V', 'B', 'N', 'M', 'DEL'], ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')'], ['😀', '😂', '❤️', '🔥', '⭐', '🌟', '💫', '🎉', '🎊', '✨']];
var startY = 1000;
for (var row = 0; row < keyboardLayout.length; row++) {
var rowKeys = keyboardLayout[row];
var startX = 1024 - (rowKeys.length - 1) * 70;
for (var col = 0; col < rowKeys.length; col++) {
var key = new KeyboardKey(rowKeys[col]);
key.x = startX + col * 140;
key.y = startY + row * 220;
keyboardKeys.push(key);
game.addChild(key);
}
}
// Clear button
var clearButton = game.attachAsset('clearButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2400,
scaleX: 1.5,
scaleY: 1.5
});
var clearText = new Text2('CLEAR', {
size: 60,
fill: 0xFFFFFF
});
clearText.anchor.set(0.5, 0.5);
clearText.x = 1024;
clearText.y = 2400;
game.addChild(clearText);
// Hash function to generate colors from name
function hashCode(str) {
var hash = 0;
for (var i = 0; i < str.length; i++) {
var _char = str.charCodeAt(i);
hash = (hash << 5) - hash + _char;
hash = hash & hash; // Convert to 32-bit integer
}
return hash;
}
function generateColors(name) {
if (name.length === 0) return [0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc];
// Check if input is a hex color (with or without #)
var hexInput = name.toLowerCase();
if (hexInput.charAt(0) === '#') {
hexInput = hexInput.substring(1);
}
var isHex = /^[0-9a-f]{6}$/i.test(hexInput);
if (isHex) {
var baseColor = parseInt(hexInput, 16);
// Generate 4 variations of the hex color
var colors = [];
colors.push(baseColor); // Original color
// Create lighter version
var r = baseColor >> 16 & 0xFF;
var g = baseColor >> 8 & 0xFF;
var b = baseColor & 0xFF;
var lighter = Math.min(255, r + 50) << 16 | Math.min(255, g + 50) << 8 | Math.min(255, b + 50);
colors.push(lighter);
// Create darker version
var darker = Math.max(0, r - 50) << 16 | Math.max(0, g - 50) << 8 | Math.max(0, b - 50);
colors.push(darker);
// Create complementary color
var comp = 255 - r << 16 | 255 - g << 8 | 255 - b;
colors.push(comp);
return colors;
}
// Special case for "ronan" - return purple, blue, pink, void purple
if (name.toLowerCase() === 'ronan') {
return [0x8b5cf6, 0x3b82f6, 0xf472b6, 0x4c1d95]; // purple, blue, pink, void purple
}
// Special case for "daniel" - return green colors
if (name.toLowerCase() === 'daniel') {
return [0x22c55e, 0x16a34a, 0x15803d, 0x166534]; // different shades of green
}
var hash = hashCode(name);
var colors = [];
for (var i = 0; i < 4; i++) {
var seed = hash + i * 123456;
var r = Math.abs(seed % 256);
var g = Math.abs((seed >> 8) % 256);
var b = Math.abs((seed >> 16) % 256);
// Ensure colors are vibrant enough
if (r < 50) r += 50;
if (g < 50) g += 50;
if (b < 50) b += 50;
var color = r << 16 | g << 8 | b;
colors.push(color);
}
return colors;
}
function updateDisplay() {
inputText.setText(currentName || 'Enter your name...');
var colors = generateColors(currentName);
for (var i = 0; i < 4; i++) {
colorSquares[i].setColor(colors[i]);
}
}
// Clear button functionality
clearButton.interactive = true;
game.down = function (x, y, obj) {
// Check if click is within clear button bounds using direct coordinate comparison
var buttonLeft = clearButton.x - 225;
var buttonRight = clearButton.x + 225;
var buttonTop = clearButton.y - 90;
var buttonBottom = clearButton.y + 90;
if (x >= buttonLeft && x <= buttonRight && y >= buttonTop && y <= buttonBottom) {
clearButton.tint = 0xcc5555;
currentName = '';
updateDisplay();
}
};
game.up = function (x, y, obj) {
clearButton.tint = 0xff6b6b;
};
// Initialize display
updateDisplay();
// Play background music
LK.playMusic('8-bit');
Modern App Store icon, high definition, square with rounded corners, for a game titled "Color Name Generator" and with the description "Type your name and discover your personalized four-color palette generated uniquely from your input.". No text on icon!
Keyboard button (black). No background. Transparent background. Blank background. Shadows. 3d. In-Game asset. Top angle.
Red button. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Cool purple and red galaxy background. In-Game asset. 2d. High contrast. No shadows
Pure White Planet. In-Game asset. 2d. High contrast. No shadows