/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var SoundCharacter = Container.expand(function (characterType) { var self = Container.call(this); self.characterType = characterType || 1; self.points = self.characterType === 'special' ? 50 : self.characterType * 5; self.lifetime = 0; self.maxLifetime = self.characterType === 'special' ? 5000 : 8000; self.isClicked = false; var assetId = self.characterType === 'special' ? 'specialCharacter' : 'character' + self.characterType; var characterGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.spawn = function () { var margin = 100; self.x = margin + Math.random() * (2048 - margin * 2); self.y = margin + Math.random() * (2732 - margin * 2); self.alpha = 0; tween(self, { alpha: 1, scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); }; self.playSound = function () { var soundId = self.characterType === 'special' ? 'Specialsound' : 'Characters1to5sound'; LK.getSound(soundId).play(); }; self.update = function () { self.lifetime += 16; if (self.lifetime >= self.maxLifetime && !self.isClicked) { self.fadeOut(); } }; self.fadeOut = function () { if (self.isClicked) return; tween(self, { alpha: 0, scaleX: 0.5, scaleY: 0.5 }, { duration: 300, onFinish: function onFinish() { self.removeFromGame(); } }); }; self.removeFromGame = function () { for (var i = characters.length - 1; i >= 0; i--) { if (characters[i] === self) { characters.splice(i, 1); break; } } self.destroy(); }; self.down = function (x, y, obj) { if (self.isClicked) return; self.isClicked = true; self.playSound(); LK.setScore(LK.getScore() + self.points); scoreTxt.setText(LK.getScore()); LK.effects.flashObject(self, 0xffffff, 200); tween(self, { scaleX: 1.5, scaleY: 1.5 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { alpha: 0, scaleX: 0.3, scaleY: 0.3 }, { duration: 200, onFinish: function onFinish() { self.removeFromGame(); } }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ var characters = []; var spawnTimer = 0; var spawnInterval = 2000; var minSpawnInterval = 800; var speedIncreaseRate = 0.98; var lastSpeedIncrease = 0; var scoreTxt = new Text2('0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); function spawnCharacter() { var characterType; var random = Math.random(); if (random < 0.05) { characterType = 'special'; } else if (random < 0.25) { characterType = 5; } else if (random < 0.45) { characterType = 4; } else if (random < 0.65) { characterType = 3; } else if (random < 0.85) { characterType = 2; } else { characterType = 1; } var character = new SoundCharacter(characterType); characters.push(character); game.addChild(character); character.spawn(); } function updateDifficulty() { var currentTime = LK.ticks * 16; if (currentTime - lastSpeedIncrease > 10000) { spawnInterval = Math.max(minSpawnInterval, spawnInterval * speedIncreaseRate); lastSpeedIncrease = currentTime; } } game.update = function () { spawnTimer += 16; if (spawnTimer >= spawnInterval) { spawnCharacter(); spawnTimer = 0; } updateDifficulty(); for (var i = characters.length - 1; i >= 0; i--) { var character = characters[i]; if (character && character.update) { character.update(); } } }; spawnCharacter();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var SoundCharacter = Container.expand(function (characterType) {
var self = Container.call(this);
self.characterType = characterType || 1;
self.points = self.characterType === 'special' ? 50 : self.characterType * 5;
self.lifetime = 0;
self.maxLifetime = self.characterType === 'special' ? 5000 : 8000;
self.isClicked = false;
var assetId = self.characterType === 'special' ? 'specialCharacter' : 'character' + self.characterType;
var characterGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.spawn = function () {
var margin = 100;
self.x = margin + Math.random() * (2048 - margin * 2);
self.y = margin + Math.random() * (2732 - margin * 2);
self.alpha = 0;
tween(self, {
alpha: 1,
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 200
});
}
});
};
self.playSound = function () {
var soundId = self.characterType === 'special' ? 'Specialsound' : 'Characters1to5sound';
LK.getSound(soundId).play();
};
self.update = function () {
self.lifetime += 16;
if (self.lifetime >= self.maxLifetime && !self.isClicked) {
self.fadeOut();
}
};
self.fadeOut = function () {
if (self.isClicked) return;
tween(self, {
alpha: 0,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 300,
onFinish: function onFinish() {
self.removeFromGame();
}
});
};
self.removeFromGame = function () {
for (var i = characters.length - 1; i >= 0; i--) {
if (characters[i] === self) {
characters.splice(i, 1);
break;
}
}
self.destroy();
};
self.down = function (x, y, obj) {
if (self.isClicked) return;
self.isClicked = true;
self.playSound();
LK.setScore(LK.getScore() + self.points);
scoreTxt.setText(LK.getScore());
LK.effects.flashObject(self, 0xffffff, 200);
tween(self, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
alpha: 0,
scaleX: 0.3,
scaleY: 0.3
}, {
duration: 200,
onFinish: function onFinish() {
self.removeFromGame();
}
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c3e50
});
/****
* Game Code
****/
var characters = [];
var spawnTimer = 0;
var spawnInterval = 2000;
var minSpawnInterval = 800;
var speedIncreaseRate = 0.98;
var lastSpeedIncrease = 0;
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
function spawnCharacter() {
var characterType;
var random = Math.random();
if (random < 0.05) {
characterType = 'special';
} else if (random < 0.25) {
characterType = 5;
} else if (random < 0.45) {
characterType = 4;
} else if (random < 0.65) {
characterType = 3;
} else if (random < 0.85) {
characterType = 2;
} else {
characterType = 1;
}
var character = new SoundCharacter(characterType);
characters.push(character);
game.addChild(character);
character.spawn();
}
function updateDifficulty() {
var currentTime = LK.ticks * 16;
if (currentTime - lastSpeedIncrease > 10000) {
spawnInterval = Math.max(minSpawnInterval, spawnInterval * speedIncreaseRate);
lastSpeedIncrease = currentTime;
}
}
game.update = function () {
spawnTimer += 16;
if (spawnTimer >= spawnInterval) {
spawnCharacter();
spawnTimer = 0;
}
updateDifficulty();
for (var i = characters.length - 1; i >= 0; i--) {
var character = characters[i];
if (character && character.update) {
character.update();
}
}
};
spawnCharacter();