Code edit (1 edits merged)
Please save this source code
User prompt
Snowman Builder
Initial prompt
Toca snow-man (2013). Use your finger to roll the small snowball into big snowball, use your finger to roll the small snowball into big snowball for the head, ginger š± says āitās too heavy.ā Use your finger to place the Big snowball head onto the big snowball body, drag on the hat š© the broom š§¹ 2 nuts š° and a carrot š„, shake your device 10 times to make the snow fall
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Accessory = Container.expand(function (type) { var self = Container.call(this); self.type = type; self.placed = false; var graphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (!self.placed) { draggedObject = self; } }; return self; }); var Snowball = Container.expand(function () { var self = Container.call(this); self.size = 80; self.minSize = 80; self.maxSize = 300; self.isRolling = false; self.lastX = 0; self.lastY = 0; self.rollDistance = 0; var graphics = self.attachAsset('snowball', { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1 }); self.down = function (x, y, obj) { self.isRolling = true; self.lastX = x; self.lastY = y; draggedObject = self; }; self.updateSize = function () { var scale = self.size / 80; graphics.scaleX = scale; graphics.scaleY = scale; }; self.grow = function (amount) { if (self.size < self.maxSize) { self.size += amount; self.updateSize(); } }; return self; }); var Snowflake = Container.expand(function () { var self = Container.call(this); self.speed = Math.random() * 3 + 1; self.drift = Math.random() * 2 - 1; var graphics = self.attachAsset('snowflake', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { self.y += self.speed; self.x += self.drift; if (self.y > 2732 + 50) { self.y = -50; self.x = Math.random() * 2048; } if (self.x < -50) { self.x = 2048 + 50; } else if (self.x > 2048 + 50) { self.x = -50; } }; return self; }); var SnowmanBody = Container.expand(function () { var self = Container.call(this); self.hasHead = false; self.accessories = []; var bodyGraphics = self.attachAsset('snowman_body', { anchorX: 0.5, anchorY: 1 }); self.addHead = function (head) { if (!self.hasHead) { head.x = 0; head.y = -200; self.addChild(head); self.hasHead = true; LK.getSound('stack').play(); } }; self.addAccessory = function (accessory) { self.accessories.push(accessory); self.addChild(accessory); LK.getSound('accessory').play(); }; return self; }); var SnowmanHead = Container.expand(function () { var self = Container.call(this); var headGraphics = self.attachAsset('snowman_head', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { draggedObject = self; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game state var gamePhase = 'rolling'; // 'rolling', 'building', 'decorating', 'completed' var draggedObject = null; var snowballs = []; var snowman = null; var accessories = []; var snowflakes = []; var shakeCount = 0; var isSnowing = false; // Ground var ground = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 1, x: 0, y: 2732 })); // Instructions var instructionText = new Text2('Drag snowballs to roll them bigger!', { size: 60, fill: 0x000000 }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); // Create initial snowballs for (var i = 0; i < 3; i++) { var snowball = new Snowball(); snowball.x = 300 + i * 400; snowball.y = 2400; snowballs.push(snowball); game.addChild(snowball); } // Create accessories (initially hidden) var accessoryTypes = ['hat', 'broom', 'button', 'carrot']; for (var j = 0; j < accessoryTypes.length; j++) { var accessory = new Accessory(accessoryTypes[j]); accessory.x = 200 + j * 400; accessory.y = 2600; accessory.alpha = 0; accessories.push(accessory); game.addChild(accessory); } function checkSnowballSizes() { var largeBalls = 0; var mediumBalls = 0; for (var i = 0; i < snowballs.length; i++) { if (snowballs[i].size >= 250) { largeBalls++; } else if (snowballs[i].size >= 150) { mediumBalls++; } } if (largeBalls >= 1 && mediumBalls >= 1 && gamePhase === 'rolling') { gamePhase = 'building'; instructionText.setText('Stack a smaller snowball on top of a larger one!'); } } function createSnowman(bodyBall, headBall) { snowman = new SnowmanBody(); snowman.x = bodyBall.x; snowman.y = bodyBall.y; game.addChild(snowman); // Remove original snowballs bodyBall.destroy(); headBall.destroy(); // Remove from arrays var bodyIndex = snowballs.indexOf(bodyBall); var headIndex = snowballs.indexOf(headBall); if (bodyIndex > -1) snowballs.splice(bodyIndex, 1); if (headIndex > -1) snowballs.splice(headIndex, 1); // Add head to snowman var head = new SnowmanHead(); snowman.addHead(head); gamePhase = 'decorating'; instructionText.setText('Drag accessories to decorate your snowman!'); // Show accessories for (var i = 0; i < accessories.length; i++) { tween(accessories[i], { alpha: 1 }, { duration: 500 }); } } function checkAccessoryPlacement(accessory) { if (!snowman) return; var distance = Math.sqrt(Math.pow(accessory.x - snowman.x, 2) + Math.pow(accessory.y - snowman.y, 2)); if (distance < 200) { // Place accessory on snowman var localPos = snowman.toLocal({ x: accessory.x, y: accessory.y }); accessory.x = localPos.x; accessory.y = localPos.y; accessory.placed = true; snowman.addAccessory(accessory); // Position specific accessories if (accessory.type === 'hat') { accessory.x = 0; accessory.y = -250; } else if (accessory.type === 'carrot') { accessory.x = 0; accessory.y = -200; } else if (accessory.type === 'button') { accessory.x = 0; accessory.y = -100; } else if (accessory.type === 'broom') { accessory.x = 120; accessory.y = -100; } // Check if all accessories are placed var placedCount = 0; for (var i = 0; i < accessories.length; i++) { if (accessories[i].placed) placedCount++; } if (placedCount === accessories.length) { gamePhase = 'completed'; instructionText.setText('Shake your device 10 times to make it snow!'); LK.getSound('complete').play(); } } } function startSnowfall() { if (isSnowing) return; isSnowing = true; instructionText.setText('Beautiful! Your snowman is complete!'); // Create snowflakes for (var i = 0; i < 50; i++) { var snowflake = new Snowflake(); snowflake.x = Math.random() * 2048; snowflake.y = Math.random() * -500; snowflakes.push(snowflake); game.addChild(snowflake); } } // Game event handlers game.move = function (x, y, obj) { if (draggedObject) { draggedObject.x = x; draggedObject.y = y; // Handle snowball rolling if (draggedObject instanceof Snowball && draggedObject.isRolling) { var distance = Math.sqrt(Math.pow(x - draggedObject.lastX, 2) + Math.pow(y - draggedObject.lastY, 2)); if (distance > 10) { draggedObject.rollDistance += distance; if (draggedObject.rollDistance > 50) { draggedObject.grow(2); draggedObject.rollDistance = 0; } } draggedObject.lastX = x; draggedObject.lastY = y; } } }; game.up = function (x, y, obj) { if (draggedObject) { if (draggedObject instanceof Snowball) { draggedObject.isRolling = false; // Check for stacking if (gamePhase === 'building') { for (var i = 0; i < snowballs.length; i++) { var otherBall = snowballs[i]; if (otherBall !== draggedObject) { var distance = Math.sqrt(Math.pow(draggedObject.x - otherBall.x, 2) + Math.pow(draggedObject.y - otherBall.y, 2)); if (distance < 150) { // Determine which is larger if (draggedObject.size < otherBall.size) { createSnowman(otherBall, draggedObject); } else { createSnowman(draggedObject, otherBall); } break; } } } } } else if (draggedObject instanceof Accessory) { checkAccessoryPlacement(draggedObject); } draggedObject = null; } }; // Shake detection (simulated with rapid mouse movements) var lastShakeTime = 0; var shakeThreshold = 100; game.update = function () { // Check snowball sizes if (gamePhase === 'rolling') { checkSnowballSizes(); } // Simple shake detection simulation if (gamePhase === 'completed' && !isSnowing) { // Simulate shake with rapid movements or random trigger if (LK.ticks % 180 === 0) { // Every 3 seconds for demo shakeCount++; if (shakeCount >= 10) { startSnowfall(); } else { instructionText.setText('Shake ' + (10 - shakeCount) + ' more times to make it snow!'); } } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,331 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Accessory = Container.expand(function (type) {
+ var self = Container.call(this);
+ self.type = type;
+ self.placed = false;
+ var graphics = self.attachAsset(type, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.down = function (x, y, obj) {
+ if (!self.placed) {
+ draggedObject = self;
+ }
+ };
+ return self;
+});
+var Snowball = Container.expand(function () {
+ var self = Container.call(this);
+ self.size = 80;
+ self.minSize = 80;
+ self.maxSize = 300;
+ self.isRolling = false;
+ self.lastX = 0;
+ self.lastY = 0;
+ self.rollDistance = 0;
+ var graphics = self.attachAsset('snowball', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1,
+ scaleY: 1
+ });
+ self.down = function (x, y, obj) {
+ self.isRolling = true;
+ self.lastX = x;
+ self.lastY = y;
+ draggedObject = self;
+ };
+ self.updateSize = function () {
+ var scale = self.size / 80;
+ graphics.scaleX = scale;
+ graphics.scaleY = scale;
+ };
+ self.grow = function (amount) {
+ if (self.size < self.maxSize) {
+ self.size += amount;
+ self.updateSize();
+ }
+ };
+ return self;
+});
+var Snowflake = Container.expand(function () {
+ var self = Container.call(this);
+ self.speed = Math.random() * 3 + 1;
+ self.drift = Math.random() * 2 - 1;
+ var graphics = self.attachAsset('snowflake', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.update = function () {
+ self.y += self.speed;
+ self.x += self.drift;
+ if (self.y > 2732 + 50) {
+ self.y = -50;
+ self.x = Math.random() * 2048;
+ }
+ if (self.x < -50) {
+ self.x = 2048 + 50;
+ } else if (self.x > 2048 + 50) {
+ self.x = -50;
+ }
+ };
+ return self;
+});
+var SnowmanBody = Container.expand(function () {
+ var self = Container.call(this);
+ self.hasHead = false;
+ self.accessories = [];
+ var bodyGraphics = self.attachAsset('snowman_body', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.addHead = function (head) {
+ if (!self.hasHead) {
+ head.x = 0;
+ head.y = -200;
+ self.addChild(head);
+ self.hasHead = true;
+ LK.getSound('stack').play();
+ }
+ };
+ self.addAccessory = function (accessory) {
+ self.accessories.push(accessory);
+ self.addChild(accessory);
+ LK.getSound('accessory').play();
+ };
+ return self;
+});
+var SnowmanHead = Container.expand(function () {
+ var self = Container.call(this);
+ var headGraphics = self.attachAsset('snowman_head', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.down = function (x, y, obj) {
+ draggedObject = self;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game state
+var gamePhase = 'rolling'; // 'rolling', 'building', 'decorating', 'completed'
+var draggedObject = null;
+var snowballs = [];
+var snowman = null;
+var accessories = [];
+var snowflakes = [];
+var shakeCount = 0;
+var isSnowing = false;
+// Ground
+var ground = game.addChild(LK.getAsset('ground', {
+ anchorX: 0,
+ anchorY: 1,
+ x: 0,
+ y: 2732
+}));
+// Instructions
+var instructionText = new Text2('Drag snowballs to roll them bigger!', {
+ size: 60,
+ fill: 0x000000
+});
+instructionText.anchor.set(0.5, 0);
+LK.gui.top.addChild(instructionText);
+// Create initial snowballs
+for (var i = 0; i < 3; i++) {
+ var snowball = new Snowball();
+ snowball.x = 300 + i * 400;
+ snowball.y = 2400;
+ snowballs.push(snowball);
+ game.addChild(snowball);
+}
+// Create accessories (initially hidden)
+var accessoryTypes = ['hat', 'broom', 'button', 'carrot'];
+for (var j = 0; j < accessoryTypes.length; j++) {
+ var accessory = new Accessory(accessoryTypes[j]);
+ accessory.x = 200 + j * 400;
+ accessory.y = 2600;
+ accessory.alpha = 0;
+ accessories.push(accessory);
+ game.addChild(accessory);
+}
+function checkSnowballSizes() {
+ var largeBalls = 0;
+ var mediumBalls = 0;
+ for (var i = 0; i < snowballs.length; i++) {
+ if (snowballs[i].size >= 250) {
+ largeBalls++;
+ } else if (snowballs[i].size >= 150) {
+ mediumBalls++;
+ }
+ }
+ if (largeBalls >= 1 && mediumBalls >= 1 && gamePhase === 'rolling') {
+ gamePhase = 'building';
+ instructionText.setText('Stack a smaller snowball on top of a larger one!');
+ }
+}
+function createSnowman(bodyBall, headBall) {
+ snowman = new SnowmanBody();
+ snowman.x = bodyBall.x;
+ snowman.y = bodyBall.y;
+ game.addChild(snowman);
+ // Remove original snowballs
+ bodyBall.destroy();
+ headBall.destroy();
+ // Remove from arrays
+ var bodyIndex = snowballs.indexOf(bodyBall);
+ var headIndex = snowballs.indexOf(headBall);
+ if (bodyIndex > -1) snowballs.splice(bodyIndex, 1);
+ if (headIndex > -1) snowballs.splice(headIndex, 1);
+ // Add head to snowman
+ var head = new SnowmanHead();
+ snowman.addHead(head);
+ gamePhase = 'decorating';
+ instructionText.setText('Drag accessories to decorate your snowman!');
+ // Show accessories
+ for (var i = 0; i < accessories.length; i++) {
+ tween(accessories[i], {
+ alpha: 1
+ }, {
+ duration: 500
+ });
+ }
+}
+function checkAccessoryPlacement(accessory) {
+ if (!snowman) return;
+ var distance = Math.sqrt(Math.pow(accessory.x - snowman.x, 2) + Math.pow(accessory.y - snowman.y, 2));
+ if (distance < 200) {
+ // Place accessory on snowman
+ var localPos = snowman.toLocal({
+ x: accessory.x,
+ y: accessory.y
+ });
+ accessory.x = localPos.x;
+ accessory.y = localPos.y;
+ accessory.placed = true;
+ snowman.addAccessory(accessory);
+ // Position specific accessories
+ if (accessory.type === 'hat') {
+ accessory.x = 0;
+ accessory.y = -250;
+ } else if (accessory.type === 'carrot') {
+ accessory.x = 0;
+ accessory.y = -200;
+ } else if (accessory.type === 'button') {
+ accessory.x = 0;
+ accessory.y = -100;
+ } else if (accessory.type === 'broom') {
+ accessory.x = 120;
+ accessory.y = -100;
+ }
+ // Check if all accessories are placed
+ var placedCount = 0;
+ for (var i = 0; i < accessories.length; i++) {
+ if (accessories[i].placed) placedCount++;
+ }
+ if (placedCount === accessories.length) {
+ gamePhase = 'completed';
+ instructionText.setText('Shake your device 10 times to make it snow!');
+ LK.getSound('complete').play();
+ }
+ }
+}
+function startSnowfall() {
+ if (isSnowing) return;
+ isSnowing = true;
+ instructionText.setText('Beautiful! Your snowman is complete!');
+ // Create snowflakes
+ for (var i = 0; i < 50; i++) {
+ var snowflake = new Snowflake();
+ snowflake.x = Math.random() * 2048;
+ snowflake.y = Math.random() * -500;
+ snowflakes.push(snowflake);
+ game.addChild(snowflake);
+ }
+}
+// Game event handlers
+game.move = function (x, y, obj) {
+ if (draggedObject) {
+ draggedObject.x = x;
+ draggedObject.y = y;
+ // Handle snowball rolling
+ if (draggedObject instanceof Snowball && draggedObject.isRolling) {
+ var distance = Math.sqrt(Math.pow(x - draggedObject.lastX, 2) + Math.pow(y - draggedObject.lastY, 2));
+ if (distance > 10) {
+ draggedObject.rollDistance += distance;
+ if (draggedObject.rollDistance > 50) {
+ draggedObject.grow(2);
+ draggedObject.rollDistance = 0;
+ }
+ }
+ draggedObject.lastX = x;
+ draggedObject.lastY = y;
+ }
+ }
+};
+game.up = function (x, y, obj) {
+ if (draggedObject) {
+ if (draggedObject instanceof Snowball) {
+ draggedObject.isRolling = false;
+ // Check for stacking
+ if (gamePhase === 'building') {
+ for (var i = 0; i < snowballs.length; i++) {
+ var otherBall = snowballs[i];
+ if (otherBall !== draggedObject) {
+ var distance = Math.sqrt(Math.pow(draggedObject.x - otherBall.x, 2) + Math.pow(draggedObject.y - otherBall.y, 2));
+ if (distance < 150) {
+ // Determine which is larger
+ if (draggedObject.size < otherBall.size) {
+ createSnowman(otherBall, draggedObject);
+ } else {
+ createSnowman(draggedObject, otherBall);
+ }
+ break;
+ }
+ }
+ }
+ }
+ } else if (draggedObject instanceof Accessory) {
+ checkAccessoryPlacement(draggedObject);
+ }
+ draggedObject = null;
+ }
+};
+// Shake detection (simulated with rapid mouse movements)
+var lastShakeTime = 0;
+var shakeThreshold = 100;
+game.update = function () {
+ // Check snowball sizes
+ if (gamePhase === 'rolling') {
+ checkSnowballSizes();
+ }
+ // Simple shake detection simulation
+ if (gamePhase === 'completed' && !isSnowing) {
+ // Simulate shake with rapid movements or random trigger
+ if (LK.ticks % 180 === 0) {
+ // Every 3 seconds for demo
+ shakeCount++;
+ if (shakeCount >= 10) {
+ startSnowfall();
+ } else {
+ instructionText.setText('Shake ' + (10 - shakeCount) + ' more times to make it snow!');
+ }
+ }
+ }
+};
\ No newline at end of file