/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Set background
game.setBackgroundColor(0x87CEEB);
// Emoji categories and progression
var emojiCategories = {
basic: ['😊', '😀', '🙂'],
emotions: ['😄', '😮', '😢', '😱', '🤢', '😷', '😵', '🤯'],
bodily: ['🤮', '💩', '🤧', '😪'],
food: ['🍎', '🍌', '🍕', '🍔', '🍰', '🥕', '🍇', '🍊'],
animals: ['🐶', '🐱', '🐭', '🐻', '🦁', '🐸', '🐷', '🦊'],
flags: ['🇺🇸', '🇬🇧', '🇫🇷', '🇯🇵', '🇩🇪', '🇮🇹', '🇨🇦', '🇧🇷'],
colors: ['🔴', '🔵', '🟢', '🟡', '🟣', '🟠', '⚫', '⚪'],
utensils: ['🍴', '🥄', '🔪', '🍽️', '🥢', '🧂', '🍷', '☕']
};
var categoryOrder = ['basic', 'emotions', 'bodily', 'food', 'animals', 'flags', 'colors', 'utensils'];
// Game state
var clickCount = storage.clickCount || 0;
var totalScore = storage.totalScore || 0;
var currentCategory = storage.currentCategory || 'basic';
var currentEmojiIndex = storage.currentEmojiIndex || 0;
// Create main emoji display
var emojiContainer = game.addChild(new Container());
emojiContainer.x = 2048 / 2;
emojiContainer.y = 2732 / 2;
var emojiBase = emojiContainer.attachAsset('emojiBase', {
anchorX: 0.5,
anchorY: 0.5
});
var emojiText = new Text2(emojiCategories[currentCategory][currentEmojiIndex], {
size: 120,
fill: 0x000000
});
emojiText.anchor.set(0.5, 0.5);
emojiContainer.addChild(emojiText);
// Score display
var scoreText = new Text2('Clicks: ' + clickCount, {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Progress display
var progressText = new Text2('Next evolution in: ' + (30 - clickCount % 30) + ' clicks', {
size: 40,
fill: 0xFFFFFF
});
progressText.anchor.set(0.5, 0);
progressText.y = 80;
LK.gui.top.addChild(progressText);
// Category display
var categoryText = new Text2('Category: ' + currentCategory.toUpperCase(), {
size: 35,
fill: 0xFFD700
});
categoryText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(categoryText);
function updateEmoji() {
var categoryIndex = categoryOrder.indexOf(currentCategory);
var currentEmojis = emojiCategories[currentCategory];
// Get next emoji in current category
currentEmojiIndex = (currentEmojiIndex + 1) % currentEmojis.length;
// If we've cycled through all emojis in category and have more categories
if (currentEmojiIndex === 0 && categoryIndex < categoryOrder.length - 1) {
currentCategory = categoryOrder[categoryIndex + 1];
currentEmojis = emojiCategories[currentCategory];
categoryText.setText('Category: ' + currentCategory.toUpperCase());
}
emojiText.setText(currentEmojis[currentEmojiIndex]);
// Save progress
storage.currentCategory = currentCategory;
storage.currentEmojiIndex = currentEmojiIndex;
}
function handleClick() {
clickCount++;
totalScore++;
// Update displays
scoreText.setText('Clicks: ' + clickCount);
progressText.setText('Next evolution in: ' + (30 - clickCount % 30) + ' clicks');
// Click animation
tween.stop(emojiContainer, {
scaleX: true,
scaleY: true
});
tween(emojiContainer, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(emojiContainer, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeIn
});
}
});
// Check for evolution
if (clickCount % 30 === 0) {
updateEmoji();
// Evolution animation
tween(emojiContainer, {
scaleX: 1.5,
scaleY: 1.5,
rotation: Math.PI * 2
}, {
duration: 500,
easing: tween.bounceOut,
onFinish: function onFinish() {
emojiContainer.rotation = 0;
tween(emojiContainer, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.easeOut
});
}
});
// Flash effect
LK.effects.flashScreen(0xFFD700, 300);
}
// Play sound
LK.getSound('clickSound').play();
// Save progress
storage.clickCount = clickCount;
storage.totalScore = totalScore;
}
// Click handler
emojiContainer.down = function (x, y, obj) {
handleClick();
};
// Make sure the emoji is interactive
emojiContainer.interactive = true; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Set background
game.setBackgroundColor(0x87CEEB);
// Emoji categories and progression
var emojiCategories = {
basic: ['😊', '😀', '🙂'],
emotions: ['😄', '😮', '😢', '😱', '🤢', '😷', '😵', '🤯'],
bodily: ['🤮', '💩', '🤧', '😪'],
food: ['🍎', '🍌', '🍕', '🍔', '🍰', '🥕', '🍇', '🍊'],
animals: ['🐶', '🐱', '🐭', '🐻', '🦁', '🐸', '🐷', '🦊'],
flags: ['🇺🇸', '🇬🇧', '🇫🇷', '🇯🇵', '🇩🇪', '🇮🇹', '🇨🇦', '🇧🇷'],
colors: ['🔴', '🔵', '🟢', '🟡', '🟣', '🟠', '⚫', '⚪'],
utensils: ['🍴', '🥄', '🔪', '🍽️', '🥢', '🧂', '🍷', '☕']
};
var categoryOrder = ['basic', 'emotions', 'bodily', 'food', 'animals', 'flags', 'colors', 'utensils'];
// Game state
var clickCount = storage.clickCount || 0;
var totalScore = storage.totalScore || 0;
var currentCategory = storage.currentCategory || 'basic';
var currentEmojiIndex = storage.currentEmojiIndex || 0;
// Create main emoji display
var emojiContainer = game.addChild(new Container());
emojiContainer.x = 2048 / 2;
emojiContainer.y = 2732 / 2;
var emojiBase = emojiContainer.attachAsset('emojiBase', {
anchorX: 0.5,
anchorY: 0.5
});
var emojiText = new Text2(emojiCategories[currentCategory][currentEmojiIndex], {
size: 120,
fill: 0x000000
});
emojiText.anchor.set(0.5, 0.5);
emojiContainer.addChild(emojiText);
// Score display
var scoreText = new Text2('Clicks: ' + clickCount, {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Progress display
var progressText = new Text2('Next evolution in: ' + (30 - clickCount % 30) + ' clicks', {
size: 40,
fill: 0xFFFFFF
});
progressText.anchor.set(0.5, 0);
progressText.y = 80;
LK.gui.top.addChild(progressText);
// Category display
var categoryText = new Text2('Category: ' + currentCategory.toUpperCase(), {
size: 35,
fill: 0xFFD700
});
categoryText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(categoryText);
function updateEmoji() {
var categoryIndex = categoryOrder.indexOf(currentCategory);
var currentEmojis = emojiCategories[currentCategory];
// Get next emoji in current category
currentEmojiIndex = (currentEmojiIndex + 1) % currentEmojis.length;
// If we've cycled through all emojis in category and have more categories
if (currentEmojiIndex === 0 && categoryIndex < categoryOrder.length - 1) {
currentCategory = categoryOrder[categoryIndex + 1];
currentEmojis = emojiCategories[currentCategory];
categoryText.setText('Category: ' + currentCategory.toUpperCase());
}
emojiText.setText(currentEmojis[currentEmojiIndex]);
// Save progress
storage.currentCategory = currentCategory;
storage.currentEmojiIndex = currentEmojiIndex;
}
function handleClick() {
clickCount++;
totalScore++;
// Update displays
scoreText.setText('Clicks: ' + clickCount);
progressText.setText('Next evolution in: ' + (30 - clickCount % 30) + ' clicks');
// Click animation
tween.stop(emojiContainer, {
scaleX: true,
scaleY: true
});
tween(emojiContainer, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(emojiContainer, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeIn
});
}
});
// Check for evolution
if (clickCount % 30 === 0) {
updateEmoji();
// Evolution animation
tween(emojiContainer, {
scaleX: 1.5,
scaleY: 1.5,
rotation: Math.PI * 2
}, {
duration: 500,
easing: tween.bounceOut,
onFinish: function onFinish() {
emojiContainer.rotation = 0;
tween(emojiContainer, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.easeOut
});
}
});
// Flash effect
LK.effects.flashScreen(0xFFD700, 300);
}
// Play sound
LK.getSound('clickSound').play();
// Save progress
storage.clickCount = clickCount;
storage.totalScore = totalScore;
}
// Click handler
emojiContainer.down = function (x, y, obj) {
handleClick();
};
// Make sure the emoji is interactive
emojiContainer.interactive = true;