/****
* 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;