User prompt
the fruits want to be faster ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Fruit Slash Frenzy
Initial prompt
I want a game where you want to cut the fruits that game is infinite. When you lose you want to restart the game. When your score is 30 you have a double score when your score is 10000 you win
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Fruit = Container.expand(function (fruitType) { var self = Container.call(this); var fruitGraphics = self.attachAsset(fruitType, { anchorX: 0.5, anchorY: 0.5 }); self.fruitType = fruitType; self.fallSpeed = Math.random() * 3 + 2; // Random speed between 2-5 self.rotationSpeed = (Math.random() - 0.5) * 0.1; // Random rotation self.isSliced = false; self.lastY = undefined; self.update = function () { if (!self.isSliced) { self.y += self.fallSpeed; self.rotation += self.rotationSpeed; } }; self.slice = function () { if (self.isSliced) return; self.isSliced = true; // Create slice effect LK.effects.flashObject(self, 0xffffff, 300); // Animate fruit disappearing tween(self, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 300, onFinish: function onFinish() { if (self.parent) { self.destroy(); } } }); // Play slice sound LK.getSound('slice').play(); // Award points var points = doubleScore ? 2 : 1; LK.setScore(LK.getScore() + points); // Check for milestones if (LK.getScore() >= 30 && !doubleScore) { doubleScore = true; LK.effects.flashScreen(0x00ff00, 500); } if (LK.getScore() >= 10000) { LK.showYouWin(); } }; return self; }); var SlashEffect = Container.expand(function () { var self = Container.call(this); var slashGraphics = self.attachAsset('slashEffect', { anchorX: 0.5, anchorY: 0.5 }); slashGraphics.alpha = 0.8; // Animate slash effect tween(self, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 200, onFinish: function onFinish() { if (self.parent) { self.destroy(); } } }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game variables var fruits = []; var fruitTypes = ['apple', 'orange', 'banana', 'grape']; var spawnTimer = 0; var spawnRate = 90; // Start spawning every 90 ticks (1.5 seconds) var doubleScore = false; var isSlashing = false; var slashStartX = 0; var slashStartY = 0; // UI Elements var scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); scoreTxt.x = 120; scoreTxt.y = 50; game.addChild(scoreTxt); var multiplierTxt = new Text2('', { size: 60, fill: 0xFFFF00 }); multiplierTxt.anchor.set(0.5, 0); multiplierTxt.x = 1024; multiplierTxt.y = 50; game.addChild(multiplierTxt); // Spawn fruit function function spawnFruit() { var fruitType = fruitTypes[Math.floor(Math.random() * fruitTypes.length)]; var fruit = new Fruit(fruitType); fruit.x = Math.random() * (2048 - 200) + 100; // Keep fruits within screen bounds fruit.y = -100; fruit.lastY = fruit.y; fruits.push(fruit); game.addChild(fruit); } // Check if point is on fruit function checkFruitHit(x, y) { for (var i = 0; i < fruits.length; i++) { var fruit = fruits[i]; if (!fruit.isSliced) { var dx = x - fruit.x; var dy = y - fruit.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 80) { // Hit radius fruit.slice(); // Create slash effect var slash = new SlashEffect(); slash.x = x; slash.y = y; slash.rotation = Math.random() * Math.PI * 2; game.addChild(slash); return true; } } } return false; } // Game input handlers game.down = function (x, y, obj) { isSlashing = true; slashStartX = x; slashStartY = y; checkFruitHit(x, y); }; game.move = function (x, y, obj) { if (isSlashing) { checkFruitHit(x, y); } }; game.up = function (x, y, obj) { isSlashing = false; }; // Main game update loop game.update = function () { // Update score display scoreTxt.setText('Score: ' + LK.getScore()); // Update multiplier display if (doubleScore) { multiplierTxt.setText('2X SCORE!'); } else { multiplierTxt.setText(''); } // Spawn fruits spawnTimer++; if (spawnTimer >= spawnRate) { spawnFruit(); spawnTimer = 0; // Gradually increase difficulty if (spawnRate > 30) { spawnRate -= 0.5; } } // Update fruits and check for missed fruits for (var i = fruits.length - 1; i >= 0; i--) { var fruit = fruits[i]; if (fruit.lastY === undefined) fruit.lastY = fruit.y; // Check if fruit went off screen (missed) if (fruit.lastY <= 2732 && fruit.y > 2732 && !fruit.isSliced) { // Game over - missed a fruit LK.effects.flashScreen(0xff0000, 1000); LK.getSound('miss').play(); LK.showGameOver(); return; } // Remove fruits that are off screen and already sliced or way below screen if (fruit.y > 2832 || fruit.isSliced && fruit.alpha <= 0) { if (fruit.parent) { fruit.destroy(); } fruits.splice(i, 1); continue; } fruit.lastY = fruit.y; } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,209 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Fruit = Container.expand(function (fruitType) {
+ var self = Container.call(this);
+ var fruitGraphics = self.attachAsset(fruitType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.fruitType = fruitType;
+ self.fallSpeed = Math.random() * 3 + 2; // Random speed between 2-5
+ self.rotationSpeed = (Math.random() - 0.5) * 0.1; // Random rotation
+ self.isSliced = false;
+ self.lastY = undefined;
+ self.update = function () {
+ if (!self.isSliced) {
+ self.y += self.fallSpeed;
+ self.rotation += self.rotationSpeed;
+ }
+ };
+ self.slice = function () {
+ if (self.isSliced) return;
+ self.isSliced = true;
+ // Create slice effect
+ LK.effects.flashObject(self, 0xffffff, 300);
+ // Animate fruit disappearing
+ tween(self, {
+ alpha: 0,
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ if (self.parent) {
+ self.destroy();
+ }
+ }
+ });
+ // Play slice sound
+ LK.getSound('slice').play();
+ // Award points
+ var points = doubleScore ? 2 : 1;
+ LK.setScore(LK.getScore() + points);
+ // Check for milestones
+ if (LK.getScore() >= 30 && !doubleScore) {
+ doubleScore = true;
+ LK.effects.flashScreen(0x00ff00, 500);
+ }
+ if (LK.getScore() >= 10000) {
+ LK.showYouWin();
+ }
+ };
+ return self;
+});
+var SlashEffect = Container.expand(function () {
+ var self = Container.call(this);
+ var slashGraphics = self.attachAsset('slashEffect', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ slashGraphics.alpha = 0.8;
+ // Animate slash effect
+ tween(self, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ if (self.parent) {
+ self.destroy();
+ }
+ }
+ });
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var fruits = [];
+var fruitTypes = ['apple', 'orange', 'banana', 'grape'];
+var spawnTimer = 0;
+var spawnRate = 90; // Start spawning every 90 ticks (1.5 seconds)
+var doubleScore = false;
+var isSlashing = false;
+var slashStartX = 0;
+var slashStartY = 0;
+// UI Elements
+var scoreTxt = new Text2('Score: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0, 0);
+scoreTxt.x = 120;
+scoreTxt.y = 50;
+game.addChild(scoreTxt);
+var multiplierTxt = new Text2('', {
+ size: 60,
+ fill: 0xFFFF00
+});
+multiplierTxt.anchor.set(0.5, 0);
+multiplierTxt.x = 1024;
+multiplierTxt.y = 50;
+game.addChild(multiplierTxt);
+// Spawn fruit function
+function spawnFruit() {
+ var fruitType = fruitTypes[Math.floor(Math.random() * fruitTypes.length)];
+ var fruit = new Fruit(fruitType);
+ fruit.x = Math.random() * (2048 - 200) + 100; // Keep fruits within screen bounds
+ fruit.y = -100;
+ fruit.lastY = fruit.y;
+ fruits.push(fruit);
+ game.addChild(fruit);
+}
+// Check if point is on fruit
+function checkFruitHit(x, y) {
+ for (var i = 0; i < fruits.length; i++) {
+ var fruit = fruits[i];
+ if (!fruit.isSliced) {
+ var dx = x - fruit.x;
+ var dy = y - fruit.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < 80) {
+ // Hit radius
+ fruit.slice();
+ // Create slash effect
+ var slash = new SlashEffect();
+ slash.x = x;
+ slash.y = y;
+ slash.rotation = Math.random() * Math.PI * 2;
+ game.addChild(slash);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+// Game input handlers
+game.down = function (x, y, obj) {
+ isSlashing = true;
+ slashStartX = x;
+ slashStartY = y;
+ checkFruitHit(x, y);
+};
+game.move = function (x, y, obj) {
+ if (isSlashing) {
+ checkFruitHit(x, y);
+ }
+};
+game.up = function (x, y, obj) {
+ isSlashing = false;
+};
+// Main game update loop
+game.update = function () {
+ // Update score display
+ scoreTxt.setText('Score: ' + LK.getScore());
+ // Update multiplier display
+ if (doubleScore) {
+ multiplierTxt.setText('2X SCORE!');
+ } else {
+ multiplierTxt.setText('');
+ }
+ // Spawn fruits
+ spawnTimer++;
+ if (spawnTimer >= spawnRate) {
+ spawnFruit();
+ spawnTimer = 0;
+ // Gradually increase difficulty
+ if (spawnRate > 30) {
+ spawnRate -= 0.5;
+ }
+ }
+ // Update fruits and check for missed fruits
+ for (var i = fruits.length - 1; i >= 0; i--) {
+ var fruit = fruits[i];
+ if (fruit.lastY === undefined) fruit.lastY = fruit.y;
+ // Check if fruit went off screen (missed)
+ if (fruit.lastY <= 2732 && fruit.y > 2732 && !fruit.isSliced) {
+ // Game over - missed a fruit
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.getSound('miss').play();
+ LK.showGameOver();
+ return;
+ }
+ // Remove fruits that are off screen and already sliced or way below screen
+ if (fruit.y > 2832 || fruit.isSliced && fruit.alpha <= 0) {
+ if (fruit.parent) {
+ fruit.destroy();
+ }
+ fruits.splice(i, 1);
+ continue;
+ }
+ fruit.lastY = fruit.y;
+ }
+};
\ No newline at end of file