User prompt
So every so often red sunbeams appear that need two snowflakes to be destroyed.
User prompt
So the song Frozen Savior plays all the time in the game
User prompt
So when the ice cube is destroyed it generates ice particles βͺπ‘ Consider importing and using the following plugins: @upit/tween.v1
User prompt
Create a power up that makes you throw 10 snowflakes instead of 1 for 5 seconds βͺπ‘ Consider importing and using the following plugins: @upit/tween.v1
User prompt
So the sun rays are bigger and there is a problem that makes the canyon shake, solve it
User prompt
So the snowflakes are bigger
User prompt
Now so the cannon is bigger much bigger
User prompt
So the game gets bigger
Code edit (1 edits merged)
Please save this source code
User prompt
Arctic Guardian: Polar Bear Rescue
Initial prompt
Create a game where you have to move an ice beam from right to left that points upwards, that every 2 seconds throws a snowflake and that rays of sun fall randomly from the sky And they are destroyed by colliding with snowflakes the objective is to protect the Arctic from the sun's rays at the top a sad polar bear appears in a block of ice when you complete a level it will change Happy polar bear
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Cannon = Container.expand(function () { var self = Container.call(this); var cannonGraphics = self.attachAsset('cannon', { anchorX: 0.5, anchorY: 1.0 }); self.moveSpeed = 8; self.isMoving = false; self.targetX = self.x; self.update = function () { if (self.isMoving) { var diff = self.targetX - self.x; if (Math.abs(diff) > 2) { self.x += diff > 0 ? self.moveSpeed : -self.moveSpeed; } else { self.x = self.targetX; self.isMoving = false; } } // Keep cannon within screen bounds if (self.x < 60) self.x = 60; if (self.x > 1988) self.x = 1988; }; self.moveTo = function (targetX) { self.targetX = targetX; self.isMoving = true; }; return self; }); var PolarBearDisplay = Container.expand(function () { var self = Container.call(this); var iceBlock = self.attachAsset('iceblocksad', { anchorX: 0.5, anchorY: 0.5 }); var bearSad = self.attachAsset('polarbearsad', { anchorX: 0.5, anchorY: 0.5, y: 10 }); var bearHappy = self.attachAsset('polarbearhappy', { anchorX: 0.5, anchorY: 0.5, y: 10, alpha: 0 }); self.showHappy = function () { tween(iceBlock, { alpha: 0 }, { duration: 1000 }); tween(bearSad, { alpha: 0 }, { duration: 1000 }); tween(bearHappy, { alpha: 1 }, { duration: 1000 }); }; return self; }); var Snowflake = Container.expand(function () { var self = Container.call(this); var snowflakeGraphics = self.attachAsset('snowflake', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -12; self.update = function () { self.y += self.speed; }; return self; }); var SunRay = Container.expand(function () { var self = Container.call(this); var sunrayGraphics = self.attachAsset('sunray', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 4; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var cannon; var snowflakes = []; var sunrays = []; var polarBearDisplay; var lastShotTime = 0; var lastSunRaySpawn = 0; var sunRaySpawnInterval = 3000; // 3 seconds initially var raysDestroyed = 0; var raysNeededForLevel = 10; var currentLevel = 1; var gameWon = false; // Create score display var scoreText = new Text2('Rays Destroyed: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // Create level display var levelText = new Text2('Level: 1', { size: 50, fill: 0xFFFFFF }); levelText.anchor.set(0, 0); levelText.x = 150; levelText.y = 20; LK.gui.topRight.addChild(levelText); // Create cannon cannon = game.addChild(new Cannon()); cannon.x = 1024; cannon.y = 2680; // Create polar bear display polarBearDisplay = game.addChild(new PolarBearDisplay()); polarBearDisplay.x = 1024; polarBearDisplay.y = 200; // Touch controls game.down = function (x, y, obj) { cannon.moveTo(x); }; game.move = function (x, y, obj) { cannon.moveTo(x); }; // Main game update loop game.update = function () { var currentTime = LK.ticks * 16.67; // Convert to milliseconds // Auto-shoot snowflakes every 2 seconds if (currentTime - lastShotTime >= 2000) { var newSnowflake = new Snowflake(); newSnowflake.x = cannon.x; newSnowflake.y = cannon.y - 50; newSnowflake.lastY = newSnowflake.y; snowflakes.push(newSnowflake); game.addChild(newSnowflake); lastShotTime = currentTime; LK.getSound('shoot').play(); } // Spawn sun rays if (currentTime - lastSunRaySpawn >= sunRaySpawnInterval) { var newSunRay = new SunRay(); newSunRay.x = Math.random() * (2048 - 120) + 60; newSunRay.y = -30; newSunRay.lastY = newSunRay.y; sunrays.push(newSunRay); game.addChild(newSunRay); lastSunRaySpawn = currentTime; // Randomly vary spawn interval sunRaySpawnInterval = 2000 + Math.random() * 2000; } // Update and check snowflakes for (var i = snowflakes.length - 1; i >= 0; i--) { var snowflake = snowflakes[i]; // Check if snowflake went off screen if (snowflake.lastY >= -50 && snowflake.y < -50) { snowflake.destroy(); snowflakes.splice(i, 1); continue; } snowflake.lastY = snowflake.y; } // Update and check sun rays for (var j = sunrays.length - 1; j >= 0; j--) { var sunray = sunrays[j]; // Check if sun ray reached ground (game over condition) if (sunray.lastY <= 2750 && sunray.y > 2750) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } sunray.lastY = sunray.y; } // Check collisions between snowflakes and sun rays for (var s = snowflakes.length - 1; s >= 0; s--) { var snowflake = snowflakes[s]; for (var r = sunrays.length - 1; r >= 0; r--) { var sunray = sunrays[r]; if (snowflake.intersects(sunray)) { // Collision detected raysDestroyed++; scoreText.setText('Rays Destroyed: ' + raysDestroyed); LK.getSound('hit').play(); // Remove both objects snowflake.destroy(); snowflakes.splice(s, 1); sunray.destroy(); sunrays.splice(r, 1); // Check level completion if (raysDestroyed >= raysNeededForLevel && !gameWon) { gameWon = true; polarBearDisplay.showHappy(); LK.getSound('levelcomplete').play(); LK.setTimeout(function () { // Next level currentLevel++; levelText.setText('Level: ' + currentLevel); raysNeededForLevel += 5; sunRaySpawnInterval = Math.max(1000, sunRaySpawnInterval - 200); gameWon = false; // Reset polar bear display polarBearDisplay.destroy(); polarBearDisplay = game.addChild(new PolarBearDisplay()); polarBearDisplay.x = 1024; polarBearDisplay.y = 200; }, 3000); } break; } } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,237 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Cannon = Container.expand(function () {
+ var self = Container.call(this);
+ var cannonGraphics = self.attachAsset('cannon', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.moveSpeed = 8;
+ self.isMoving = false;
+ self.targetX = self.x;
+ self.update = function () {
+ if (self.isMoving) {
+ var diff = self.targetX - self.x;
+ if (Math.abs(diff) > 2) {
+ self.x += diff > 0 ? self.moveSpeed : -self.moveSpeed;
+ } else {
+ self.x = self.targetX;
+ self.isMoving = false;
+ }
+ }
+ // Keep cannon within screen bounds
+ if (self.x < 60) self.x = 60;
+ if (self.x > 1988) self.x = 1988;
+ };
+ self.moveTo = function (targetX) {
+ self.targetX = targetX;
+ self.isMoving = true;
+ };
+ return self;
+});
+var PolarBearDisplay = Container.expand(function () {
+ var self = Container.call(this);
+ var iceBlock = self.attachAsset('iceblocksad', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var bearSad = self.attachAsset('polarbearsad', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: 10
+ });
+ var bearHappy = self.attachAsset('polarbearhappy', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: 10,
+ alpha: 0
+ });
+ self.showHappy = function () {
+ tween(iceBlock, {
+ alpha: 0
+ }, {
+ duration: 1000
+ });
+ tween(bearSad, {
+ alpha: 0
+ }, {
+ duration: 1000
+ });
+ tween(bearHappy, {
+ alpha: 1
+ }, {
+ duration: 1000
+ });
+ };
+ return self;
+});
+var Snowflake = Container.expand(function () {
+ var self = Container.call(this);
+ var snowflakeGraphics = self.attachAsset('snowflake', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -12;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var SunRay = Container.expand(function () {
+ var self = Container.call(this);
+ var sunrayGraphics = self.attachAsset('sunray', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 4;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var cannon;
+var snowflakes = [];
+var sunrays = [];
+var polarBearDisplay;
+var lastShotTime = 0;
+var lastSunRaySpawn = 0;
+var sunRaySpawnInterval = 3000; // 3 seconds initially
+var raysDestroyed = 0;
+var raysNeededForLevel = 10;
+var currentLevel = 1;
+var gameWon = false;
+// Create score display
+var scoreText = new Text2('Rays Destroyed: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+// Create level display
+var levelText = new Text2('Level: 1', {
+ size: 50,
+ fill: 0xFFFFFF
+});
+levelText.anchor.set(0, 0);
+levelText.x = 150;
+levelText.y = 20;
+LK.gui.topRight.addChild(levelText);
+// Create cannon
+cannon = game.addChild(new Cannon());
+cannon.x = 1024;
+cannon.y = 2680;
+// Create polar bear display
+polarBearDisplay = game.addChild(new PolarBearDisplay());
+polarBearDisplay.x = 1024;
+polarBearDisplay.y = 200;
+// Touch controls
+game.down = function (x, y, obj) {
+ cannon.moveTo(x);
+};
+game.move = function (x, y, obj) {
+ cannon.moveTo(x);
+};
+// Main game update loop
+game.update = function () {
+ var currentTime = LK.ticks * 16.67; // Convert to milliseconds
+ // Auto-shoot snowflakes every 2 seconds
+ if (currentTime - lastShotTime >= 2000) {
+ var newSnowflake = new Snowflake();
+ newSnowflake.x = cannon.x;
+ newSnowflake.y = cannon.y - 50;
+ newSnowflake.lastY = newSnowflake.y;
+ snowflakes.push(newSnowflake);
+ game.addChild(newSnowflake);
+ lastShotTime = currentTime;
+ LK.getSound('shoot').play();
+ }
+ // Spawn sun rays
+ if (currentTime - lastSunRaySpawn >= sunRaySpawnInterval) {
+ var newSunRay = new SunRay();
+ newSunRay.x = Math.random() * (2048 - 120) + 60;
+ newSunRay.y = -30;
+ newSunRay.lastY = newSunRay.y;
+ sunrays.push(newSunRay);
+ game.addChild(newSunRay);
+ lastSunRaySpawn = currentTime;
+ // Randomly vary spawn interval
+ sunRaySpawnInterval = 2000 + Math.random() * 2000;
+ }
+ // Update and check snowflakes
+ for (var i = snowflakes.length - 1; i >= 0; i--) {
+ var snowflake = snowflakes[i];
+ // Check if snowflake went off screen
+ if (snowflake.lastY >= -50 && snowflake.y < -50) {
+ snowflake.destroy();
+ snowflakes.splice(i, 1);
+ continue;
+ }
+ snowflake.lastY = snowflake.y;
+ }
+ // Update and check sun rays
+ for (var j = sunrays.length - 1; j >= 0; j--) {
+ var sunray = sunrays[j];
+ // Check if sun ray reached ground (game over condition)
+ if (sunray.lastY <= 2750 && sunray.y > 2750) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ sunray.lastY = sunray.y;
+ }
+ // Check collisions between snowflakes and sun rays
+ for (var s = snowflakes.length - 1; s >= 0; s--) {
+ var snowflake = snowflakes[s];
+ for (var r = sunrays.length - 1; r >= 0; r--) {
+ var sunray = sunrays[r];
+ if (snowflake.intersects(sunray)) {
+ // Collision detected
+ raysDestroyed++;
+ scoreText.setText('Rays Destroyed: ' + raysDestroyed);
+ LK.getSound('hit').play();
+ // Remove both objects
+ snowflake.destroy();
+ snowflakes.splice(s, 1);
+ sunray.destroy();
+ sunrays.splice(r, 1);
+ // Check level completion
+ if (raysDestroyed >= raysNeededForLevel && !gameWon) {
+ gameWon = true;
+ polarBearDisplay.showHappy();
+ LK.getSound('levelcomplete').play();
+ LK.setTimeout(function () {
+ // Next level
+ currentLevel++;
+ levelText.setText('Level: ' + currentLevel);
+ raysNeededForLevel += 5;
+ sunRaySpawnInterval = Math.max(1000, sunRaySpawnInterval - 200);
+ gameWon = false;
+ // Reset polar bear display
+ polarBearDisplay.destroy();
+ polarBearDisplay = game.addChild(new PolarBearDisplay());
+ polarBearDisplay.x = 1024;
+ polarBearDisplay.y = 200;
+ }, 3000);
+ }
+ break;
+ }
+ }
+ }
+};
\ No newline at end of file
Snowflake. In-Game asset. 2d. High contrast. No shadows
Sad baby polar bear. In-Game asset. 2d. High contrast. No shadows
Happy baby polar bear. In-Game asset. 2d. High contrast. No shadows
Gigantic ice tundra. In-Game asset. 2d. High contrast. No shadows
Ice cube seen from the front. In-Game asset. 2d. High contrast. No shadows