/****
* 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