/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var SnowParticle = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('snow', { anchorX: 0.5, anchorY: 0.5 }); // Add slight animation tween(graphics, { rotation: Math.PI * 2 }, { duration: 3000 + Math.random() * 2000, easing: tween.linear }); return self; }); var Snowball = Container.expand(function () { var self = Container.call(this); self.size = 1; self.maxSpeed = 3; self.isPlayer = false; self.moveDirection = { x: 0, y: 0 }; self.targetX = 0; self.targetY = 0; var graphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1 }); self.setSize = function (newSize) { self.size = newSize; var scale = Math.sqrt(newSize); graphics.scaleX = scale; graphics.scaleY = scale; self.maxSpeed = Math.max(1, 4 - scale * 0.5); }; self.grow = function (amount) { self.setSize(self.size + amount); }; self.update = function () { if (!self.isPlayer) { // AI movement for enemy snowballs if (Math.random() < 0.02) { self.targetX = Math.random() * 2048; self.targetY = Math.random() * 2732; } var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 10) { self.moveDirection.x = dx / distance * 0.3; self.moveDirection.y = dy / distance * 0.3; } } // Apply movement self.x += self.moveDirection.x * self.maxSpeed; self.y += self.moveDirection.y * self.maxSpeed; // Keep within bounds self.x = Math.max(40, Math.min(2008, self.x)); self.y = Math.max(40, Math.min(2692, self.y)); // Gradually slow down movement self.moveDirection.x *= 0.95; self.moveDirection.y *= 0.95; }; return self; }); var PlayerSnowball = Snowball.expand(function () { var self = Snowball.call(this); self.isPlayer = true; // Override graphics for player self.removeChild(self.children[0]); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1 }); self.setSize = function (newSize) { self.size = newSize; var scale = Math.sqrt(newSize); playerGraphics.scaleX = scale; playerGraphics.scaleY = scale; self.maxSpeed = Math.max(1.5, 4 - scale * 0.5); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ var player; var enemies = []; var snowParticles = []; var dragNode = null; // UI Elements var scoreTxt = new Text2('Size: 1.0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Create player snowball player = game.addChild(new PlayerSnowball()); player.x = 1024; player.y = 1366; player.setSize(1); // Create enemy snowballs for (var i = 0; i < 8; i++) { var enemy = game.addChild(new Snowball()); enemy.x = Math.random() * 1800 + 124; enemy.y = Math.random() * 2400 + 166; enemy.setSize(0.5 + Math.random() * 2); enemy.targetX = enemy.x; enemy.targetY = enemy.y; enemies.push(enemy); } // Create initial snow particles for (var i = 0; i < 25; i++) { var snow = game.addChild(new SnowParticle()); snow.x = Math.random() * 1800 + 124; snow.y = Math.random() * 2400 + 166; snowParticles.push(snow); } // Movement handling function handleMove(x, y, obj) { if (dragNode) { var dx = x - dragNode.x; var dy = y - dragNode.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { var maxMoveForce = 0.8; var moveForce = Math.min(distance / 100, maxMoveForce); dragNode.moveDirection.x = dx / distance * moveForce; dragNode.moveDirection.y = dy / distance * moveForce; } } } game.move = handleMove; game.down = function (x, y, obj) { dragNode = player; handleMove(x, y, obj); }; game.up = function (x, y, obj) { dragNode = null; }; game.update = function () { // Check snow collection for (var i = snowParticles.length - 1; i >= 0; i--) { var snow = snowParticles[i]; var playerRadius = Math.sqrt(player.size) * 40; var dx = player.x - snow.x; var dy = player.y - snow.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < playerRadius) { player.grow(0.1); scoreTxt.setText('Size: ' + player.size.toFixed(1)); LK.getSound('collect').play(); snow.destroy(); snowParticles.splice(i, 1); } } // Check snowball collisions for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; var playerRadius = Math.sqrt(player.size) * 40; var enemyRadius = Math.sqrt(enemy.size) * 30; var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy); var collisionDistance = (playerRadius + enemyRadius) * 0.7; if (distance < collisionDistance) { if (player.size > enemy.size * 1.2) { // Player absorbs enemy player.grow(enemy.size * 0.5); scoreTxt.setText('Size: ' + player.size.toFixed(1)); LK.getSound('absorb').play(); LK.effects.flashObject(player, 0x00ff00, 300); enemy.destroy(); enemies.splice(i, 1); // Check win condition if (enemies.length === 0) { LK.setScore(Math.floor(player.size * 10)); LK.showYouWin(); } } else if (enemy.size > player.size * 1.2) { // Enemy absorbs player - game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } } } // Enemy vs enemy collisions for (var i = 0; i < enemies.length; i++) { for (var j = i + 1; j < enemies.length; j++) { var enemy1 = enemies[i]; var enemy2 = enemies[j]; var radius1 = Math.sqrt(enemy1.size) * 30; var radius2 = Math.sqrt(enemy2.size) * 30; var dx = enemy1.x - enemy2.x; var dy = enemy1.y - enemy2.y; var distance = Math.sqrt(dx * dx + dy * dy); var collisionDistance = (radius1 + radius2) * 0.7; if (distance < collisionDistance) { if (enemy1.size > enemy2.size * 1.3) { enemy1.grow(enemy2.size * 0.3); enemy2.destroy(); enemies.splice(j, 1); j--; } else if (enemy2.size > enemy1.size * 1.3) { enemy2.grow(enemy1.size * 0.3); enemy1.destroy(); enemies.splice(i, 1); i--; break; } } } } // Spawn new snow particles if (LK.ticks % 90 === 0 && snowParticles.length < 30) { var newSnow = game.addChild(new SnowParticle()); newSnow.x = Math.random() * 1800 + 124; newSnow.y = Math.random() * 2400 + 166; snowParticles.push(newSnow); } // Occasionally spawn new enemies if (LK.ticks % 600 === 0 && enemies.length < 6) { var newEnemy = game.addChild(new Snowball()); newEnemy.x = Math.random() * 1800 + 124; newEnemy.y = Math.random() * 2400 + 166; newEnemy.setSize(0.3 + Math.random() * 1.5); newEnemy.targetX = newEnemy.x; newEnemy.targetY = newEnemy.y; enemies.push(newEnemy); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,254 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var SnowParticle = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('snow', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Add slight animation
+ tween(graphics, {
+ rotation: Math.PI * 2
+ }, {
+ duration: 3000 + Math.random() * 2000,
+ easing: tween.linear
+ });
+ return self;
+});
+var Snowball = Container.expand(function () {
+ var self = Container.call(this);
+ self.size = 1;
+ self.maxSpeed = 3;
+ self.isPlayer = false;
+ self.moveDirection = {
+ x: 0,
+ y: 0
+ };
+ self.targetX = 0;
+ self.targetY = 0;
+ var graphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1,
+ scaleY: 1
+ });
+ self.setSize = function (newSize) {
+ self.size = newSize;
+ var scale = Math.sqrt(newSize);
+ graphics.scaleX = scale;
+ graphics.scaleY = scale;
+ self.maxSpeed = Math.max(1, 4 - scale * 0.5);
+ };
+ self.grow = function (amount) {
+ self.setSize(self.size + amount);
+ };
+ self.update = function () {
+ if (!self.isPlayer) {
+ // AI movement for enemy snowballs
+ if (Math.random() < 0.02) {
+ self.targetX = Math.random() * 2048;
+ self.targetY = Math.random() * 2732;
+ }
+ var dx = self.targetX - self.x;
+ var dy = self.targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 10) {
+ self.moveDirection.x = dx / distance * 0.3;
+ self.moveDirection.y = dy / distance * 0.3;
+ }
+ }
+ // Apply movement
+ self.x += self.moveDirection.x * self.maxSpeed;
+ self.y += self.moveDirection.y * self.maxSpeed;
+ // Keep within bounds
+ self.x = Math.max(40, Math.min(2008, self.x));
+ self.y = Math.max(40, Math.min(2692, self.y));
+ // Gradually slow down movement
+ self.moveDirection.x *= 0.95;
+ self.moveDirection.y *= 0.95;
+ };
+ return self;
+});
+var PlayerSnowball = Snowball.expand(function () {
+ var self = Snowball.call(this);
+ self.isPlayer = true;
+ // Override graphics for player
+ self.removeChild(self.children[0]);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1,
+ scaleY: 1
+ });
+ self.setSize = function (newSize) {
+ self.size = newSize;
+ var scale = Math.sqrt(newSize);
+ playerGraphics.scaleX = scale;
+ playerGraphics.scaleY = scale;
+ self.maxSpeed = Math.max(1.5, 4 - scale * 0.5);
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87ceeb
+});
+
+/****
+* Game Code
+****/
+var player;
+var enemies = [];
+var snowParticles = [];
+var dragNode = null;
+// UI Elements
+var scoreTxt = new Text2('Size: 1.0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Create player snowball
+player = game.addChild(new PlayerSnowball());
+player.x = 1024;
+player.y = 1366;
+player.setSize(1);
+// Create enemy snowballs
+for (var i = 0; i < 8; i++) {
+ var enemy = game.addChild(new Snowball());
+ enemy.x = Math.random() * 1800 + 124;
+ enemy.y = Math.random() * 2400 + 166;
+ enemy.setSize(0.5 + Math.random() * 2);
+ enemy.targetX = enemy.x;
+ enemy.targetY = enemy.y;
+ enemies.push(enemy);
+}
+// Create initial snow particles
+for (var i = 0; i < 25; i++) {
+ var snow = game.addChild(new SnowParticle());
+ snow.x = Math.random() * 1800 + 124;
+ snow.y = Math.random() * 2400 + 166;
+ snowParticles.push(snow);
+}
+// Movement handling
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ var dx = x - dragNode.x;
+ var dy = y - dragNode.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ var maxMoveForce = 0.8;
+ var moveForce = Math.min(distance / 100, maxMoveForce);
+ dragNode.moveDirection.x = dx / distance * moveForce;
+ dragNode.moveDirection.y = dy / distance * moveForce;
+ }
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ dragNode = player;
+ handleMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+game.update = function () {
+ // Check snow collection
+ for (var i = snowParticles.length - 1; i >= 0; i--) {
+ var snow = snowParticles[i];
+ var playerRadius = Math.sqrt(player.size) * 40;
+ var dx = player.x - snow.x;
+ var dy = player.y - snow.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < playerRadius) {
+ player.grow(0.1);
+ scoreTxt.setText('Size: ' + player.size.toFixed(1));
+ LK.getSound('collect').play();
+ snow.destroy();
+ snowParticles.splice(i, 1);
+ }
+ }
+ // Check snowball collisions
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ var playerRadius = Math.sqrt(player.size) * 40;
+ var enemyRadius = Math.sqrt(enemy.size) * 30;
+ var dx = player.x - enemy.x;
+ var dy = player.y - enemy.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ var collisionDistance = (playerRadius + enemyRadius) * 0.7;
+ if (distance < collisionDistance) {
+ if (player.size > enemy.size * 1.2) {
+ // Player absorbs enemy
+ player.grow(enemy.size * 0.5);
+ scoreTxt.setText('Size: ' + player.size.toFixed(1));
+ LK.getSound('absorb').play();
+ LK.effects.flashObject(player, 0x00ff00, 300);
+ enemy.destroy();
+ enemies.splice(i, 1);
+ // Check win condition
+ if (enemies.length === 0) {
+ LK.setScore(Math.floor(player.size * 10));
+ LK.showYouWin();
+ }
+ } else if (enemy.size > player.size * 1.2) {
+ // Enemy absorbs player - game over
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ }
+ }
+ }
+ // Enemy vs enemy collisions
+ for (var i = 0; i < enemies.length; i++) {
+ for (var j = i + 1; j < enemies.length; j++) {
+ var enemy1 = enemies[i];
+ var enemy2 = enemies[j];
+ var radius1 = Math.sqrt(enemy1.size) * 30;
+ var radius2 = Math.sqrt(enemy2.size) * 30;
+ var dx = enemy1.x - enemy2.x;
+ var dy = enemy1.y - enemy2.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ var collisionDistance = (radius1 + radius2) * 0.7;
+ if (distance < collisionDistance) {
+ if (enemy1.size > enemy2.size * 1.3) {
+ enemy1.grow(enemy2.size * 0.3);
+ enemy2.destroy();
+ enemies.splice(j, 1);
+ j--;
+ } else if (enemy2.size > enemy1.size * 1.3) {
+ enemy2.grow(enemy1.size * 0.3);
+ enemy1.destroy();
+ enemies.splice(i, 1);
+ i--;
+ break;
+ }
+ }
+ }
+ }
+ // Spawn new snow particles
+ if (LK.ticks % 90 === 0 && snowParticles.length < 30) {
+ var newSnow = game.addChild(new SnowParticle());
+ newSnow.x = Math.random() * 1800 + 124;
+ newSnow.y = Math.random() * 2400 + 166;
+ snowParticles.push(newSnow);
+ }
+ // Occasionally spawn new enemies
+ if (LK.ticks % 600 === 0 && enemies.length < 6) {
+ var newEnemy = game.addChild(new Snowball());
+ newEnemy.x = Math.random() * 1800 + 124;
+ newEnemy.y = Math.random() * 2400 + 166;
+ newEnemy.setSize(0.3 + Math.random() * 1.5);
+ newEnemy.targetX = newEnemy.x;
+ newEnemy.targetY = newEnemy.y;
+ enemies.push(newEnemy);
+ }
+};
\ No newline at end of file