/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var RippleEffect = Container.expand(function () { var self = Container.call(this); var rippleGraphics = self.attachAsset('ripple', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8, scaleX: 0.1, scaleY: 0.1 }); self.animate = function () { // Animate the ripple expanding and fading out tween(rippleGraphics, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 800, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // Game variables var clickCount = 0; var startTime = Date.now(); var currentCPS = 0; var lastSecondClicks = []; var ripples = []; var coins = 0; // Create CPS display text var cpsText = new Text2('CPS: 0.00', { size: 120, fill: 0xFFFFFF }); cpsText.anchor.set(0.5, 0); LK.gui.top.addChild(cpsText); cpsText.y = 150; // Position below the top menu area // Create coin display text var coinText = new Text2('Coins: 0.00', { size: 100, fill: 0xFFD700 }); coinText.anchor.set(0.5, 0); LK.gui.top.addChild(coinText); coinText.y = 50; // Position above CPS text // Create instruction text var instructionText = new Text2('Tap anywhere to test your clicking speed!', { size: 80, fill: 0xCCCCCC }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 2048 / 2; instructionText.y = 2732 / 2; game.addChild(instructionText); // Function to calculate CPS based on clicks in the last second function calculateCPS() { var now = Date.now(); var oneSecondAgo = now - 1000; // Remove clicks older than 1 second lastSecondClicks = lastSecondClicks.filter(function (clickTime) { return clickTime > oneSecondAgo; }); // Return the count of clicks in the last second return lastSecondClicks.length; } // Function to update CPS display function updateCPSDisplay() { currentCPS = calculateCPS(); cpsText.setText('CPS: ' + currentCPS.toFixed(2)); // Update the score to reflect current CPS LK.setScore(Math.floor(currentCPS * 100)); // Multiply by 100 for better scoring } // Function to create ripple effect at tap location function createRipple(x, y) { var ripple = new RippleEffect(); ripple.x = x; ripple.y = y; game.addChild(ripple); ripples.push(ripple); ripple.animate(); } // Handle screen taps game.down = function (x, y, obj) { clickCount++; var now = Date.now(); lastSecondClicks.push(now); // Increment coins by 0.01 for each click coins += 0.01; coinText.setText('Coins: ' + coins.toFixed(2)); // Create ripple effect at tap location createRipple(x, y); // Hide instruction text after first click if (clickCount === 1 && instructionText.parent) { instructionText.parent.removeChild(instructionText); } // Update CPS immediately updateCPSDisplay(); }; // Update game state game.update = function () { // Update CPS display every few frames for smooth updates if (LK.ticks % 10 === 0) { updateCPSDisplay(); } // Clean up destroyed ripples from array for (var i = ripples.length - 1; i >= 0; i--) { if (!ripples[i].parent) { ripples.splice(i, 1); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var RippleEffect = Container.expand(function () {
var self = Container.call(this);
var rippleGraphics = self.attachAsset('ripple', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.8,
scaleX: 0.1,
scaleY: 0.1
});
self.animate = function () {
// Animate the ripple expanding and fading out
tween(rippleGraphics, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game variables
var clickCount = 0;
var startTime = Date.now();
var currentCPS = 0;
var lastSecondClicks = [];
var ripples = [];
var coins = 0;
// Create CPS display text
var cpsText = new Text2('CPS: 0.00', {
size: 120,
fill: 0xFFFFFF
});
cpsText.anchor.set(0.5, 0);
LK.gui.top.addChild(cpsText);
cpsText.y = 150; // Position below the top menu area
// Create coin display text
var coinText = new Text2('Coins: 0.00', {
size: 100,
fill: 0xFFD700
});
coinText.anchor.set(0.5, 0);
LK.gui.top.addChild(coinText);
coinText.y = 50; // Position above CPS text
// Create instruction text
var instructionText = new Text2('Tap anywhere to test your clicking speed!', {
size: 80,
fill: 0xCCCCCC
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 2048 / 2;
instructionText.y = 2732 / 2;
game.addChild(instructionText);
// Function to calculate CPS based on clicks in the last second
function calculateCPS() {
var now = Date.now();
var oneSecondAgo = now - 1000;
// Remove clicks older than 1 second
lastSecondClicks = lastSecondClicks.filter(function (clickTime) {
return clickTime > oneSecondAgo;
});
// Return the count of clicks in the last second
return lastSecondClicks.length;
}
// Function to update CPS display
function updateCPSDisplay() {
currentCPS = calculateCPS();
cpsText.setText('CPS: ' + currentCPS.toFixed(2));
// Update the score to reflect current CPS
LK.setScore(Math.floor(currentCPS * 100)); // Multiply by 100 for better scoring
}
// Function to create ripple effect at tap location
function createRipple(x, y) {
var ripple = new RippleEffect();
ripple.x = x;
ripple.y = y;
game.addChild(ripple);
ripples.push(ripple);
ripple.animate();
}
// Handle screen taps
game.down = function (x, y, obj) {
clickCount++;
var now = Date.now();
lastSecondClicks.push(now);
// Increment coins by 0.01 for each click
coins += 0.01;
coinText.setText('Coins: ' + coins.toFixed(2));
// Create ripple effect at tap location
createRipple(x, y);
// Hide instruction text after first click
if (clickCount === 1 && instructionText.parent) {
instructionText.parent.removeChild(instructionText);
}
// Update CPS immediately
updateCPSDisplay();
};
// Update game state
game.update = function () {
// Update CPS display every few frames for smooth updates
if (LK.ticks % 10 === 0) {
updateCPSDisplay();
}
// Clean up destroyed ripples from array
for (var i = ripples.length - 1; i >= 0; i--) {
if (!ripples[i].parent) {
ripples.splice(i, 1);
}
}
};