/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Fruit = Container.expand(function () {
var self = Container.call(this);
// Randomly select a fruit type
var fruitTypes = ['Apple', 'Banana', 'pineapple', 'sleeve'];
var randomFruit = fruitTypes[Math.floor(Math.random() * fruitTypes.length)];
// Attach the selected fruit image asset to the container
var fruitGraphics = self.attachAsset(randomFruit, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 5,
// Scale fruit 5x horizontally
scaleY: 5 // Scale fruit 5x vertically
});
// Set initial position of the fruit in the middle of the screen
self.x = 1024; // Center horizontally
self.y = 1366; // Center vertically
// Add update method to move the fruit left and right
self.update = function () {
// Move fruit left and right
if (self.x <= 0 || self.x >= 2048) {
self.speed = -self.speed; // Reverse direction when hitting screen edges
}
self.x += self.speed;
};
// Randomly set initial direction of the fruit
self.speed = Math.random() < 0.5 ? 20 : -20; // Initial speed of the fruit, faster than the pencil
});
var Pencil = Container.expand(function () {
var self = Container.call(this);
// Attach the pencil image asset to the container
var pencilGraphics = self.attachAsset('Pencil', {
anchorX: 0.5,
anchorY: 0.5
});
// Set initial position of the pencil
self.x = 1024; // Center horizontally
self.y = 0; // Position at the top of the screen
// Add update method to move the pencil left and right
self.update = function () {
// Move pencil left and right
if (self.x <= 0 || self.x >= 2048) {
self.speed = -self.speed; // Reverse direction when hitting screen edges
}
self.x += self.speed;
};
self.speed = 15; // Initial speed of the pencil
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var bg = LK.getAsset('Bg', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2048 / 100,
// Scale to fit the screen width
scaleY: 2732 / 100,
// Scale to fit the screen height
// Scale to fit 720p height
x: 2048 / 2,
// Center horizontally
y: 2732 / 2 // Center vertically
});
game.addChild(bg);
var pencil = game.addChild(new Pencil());
var fruit = game.addChild(new Fruit());
// Initialize score display
var scoreTxt = new Text2('0', {
size: 150,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
fruit.lastWasIntersecting = false;
// Add event listener for screen touch to throw the pencil down
game.down = function (x, y, obj) {
pencil.speed = 20; // Set a downward speed for the pencil
pencil.update = function () {
// Move pencil down
pencil.y += pencil.speed;
};
};
// Ensure the game updates the pencil's position every tick
game.update = function () {
pencil.update();
fruit.update();
// Check if the pencil has missed the target (e.g., gone off-screen)
if (pencil.y > 2732) {
// Trigger game over if the pencil misses the target
LK.showGameOver();
} else if (fruit.lastWasIntersecting === false && pencil.intersects(fruit)) {
// Destroy the pencil after it touches a fruit
pencil.destroy();
// Double the pencil speed with each fruit destroyed
pencil.speed *= 2;
// Play hit sound
LK.getSound('Hit').play();
// Darken the screen
var darkOverlay = LK.getAsset('Bg', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2048 / 100,
scaleY: 2732 / 100,
x: 2048 / 2,
y: 2732 / 2,
tint: 0x000000,
alpha: 0.5
});
game.addChild(darkOverlay);
// Remove dark overlay after a short duration
LK.setTimeout(function () {
darkOverlay.destroy();
}, 1000);
// Update score
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
// Check if 10 fruits have been destroyed
if (LK.getScore() % 10 === 0) {
// Increase fruit speed for a dash effect
fruit.speed *= 2;
// Reset fruit speed after a short duration
LK.setTimeout(function () {
fruit.speed /= 2;
}, 1000);
// Darken the screen
var darkOverlay = LK.getAsset('Bg', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2048 / 100,
scaleY: 2732 / 100,
x: 2048 / 2,
y: 2732 / 2,
tint: 0x000000,
alpha: 0.8
});
game.addChild(darkOverlay);
// Add light effect to the fruit
var light = LK.getAsset('Light', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 10,
scaleY: 10,
x: fruit.x,
y: fruit.y
});
game.addChild(light);
// Animate light effect
tween(light, {
alpha: 0
}, {
duration: 1000,
onFinish: function onFinish() {
light.destroy();
}
});
// Remove dark overlay after a short duration
LK.setTimeout(function () {
darkOverlay.destroy();
}, 1000);
}
// Create a new pencil
pencil = game.addChild(new Pencil());
// Bounce animation on fruit hit
tween(fruit, {
scaleX: 6,
scaleY: 6
}, {
duration: 300,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(fruit, {
scaleX: 5,
scaleY: 5
}, {
duration: 300,
easing: tween.bounceIn,
onFinish: function onFinish() {
// Create a new fruit after the animation finishes
fruit.destroy();
fruit = game.addChild(new Fruit());
// Add light effect to the fruit
var light = LK.getAsset('Light', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 10,
scaleY: 10,
x: fruit.x,
y: fruit.y
});
game.addChild(light);
// Animate light effect
tween(light, {
alpha: 0
}, {
duration: 1000,
onFinish: function onFinish() {
light.destroy();
}
});
}
});
}
});
}
fruit.lastWasIntersecting = pencil.intersects(fruit);
};
Pencil. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
picnic bg. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
heart icon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
mango fruit with eye and mouth animation.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Banana with eye and mouth animation.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
picnic bg in a night sky. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows