/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Asteroid = Container.expand(function () { var self = Container.call(this); var asteroidGraphics = self.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3 + Math.random() * 2; self.rotationSpeed = (Math.random() - 0.5) * 0.1; self.update = function () { self.y += self.speed; asteroidGraphics.rotation += self.rotationSpeed; }; return self; }); var EnemyShip = Container.expand(function () { var self = Container.call(this); var shipGraphics = self.attachAsset('enemyShip', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 4 + Math.random() * 3; self.update = function () { self.y += self.speed; }; return self; }); var PlayerBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('playerBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -12; self.update = function () { self.y += self.speed; }; return self; }); var PlayerShip = Container.expand(function () { var self = Container.call(this); var shipGraphics = self.attachAsset('playerShip', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.lastShotTime = 0; self.shotInterval = 300; // milliseconds self.powerUpActive = false; self.powerUpEndTime = 0; self.update = function () { // Handle power-up expiration if (self.powerUpActive && LK.ticks * 16.67 > self.powerUpEndTime) { self.powerUpActive = false; shipGraphics.tint = 0xFFFFFF; } // Auto-fire bullets var currentTime = LK.ticks * 16.67; var interval = self.powerUpActive ? self.shotInterval / 2 : self.shotInterval; if (currentTime - self.lastShotTime > interval) { self.fireBullet(); self.lastShotTime = currentTime; } }; self.fireBullet = function () { var bullet = new PlayerBullet(); bullet.x = self.x; bullet.y = self.y - 40; playerBullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); }; self.activatePowerUp = function () { self.powerUpActive = true; self.powerUpEndTime = LK.ticks * 16.67 + 5000; // 5 seconds shipGraphics.tint = 0x00FFFF; }; return self; }); var PowerUp = Container.expand(function () { var self = Container.call(this); var powerUpGraphics = self.attachAsset('powerUp', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.pulseTime = 0; self.update = function () { self.y += self.speed; self.pulseTime += 0.1; powerUpGraphics.alpha = 0.7 + Math.sin(self.pulseTime) * 0.3; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000011 }); /**** * Game Code ****/ // Game variables var player; var playerBullets = []; var enemies = []; var powerUps = []; var dragNode = null; var lastEnemySpawn = 0; var lastPowerUpSpawn = 0; var enemySpawnInterval = 1500; var powerUpSpawnInterval = 15000; var difficultyMultiplier = 1; // UI Elements var scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Initialize player ship player = game.addChild(new PlayerShip()); player.x = 1024; player.y = 2400; // Game event handlers function handleMove(x, y, obj) { if (dragNode) { dragNode.x = Math.max(40, Math.min(2008, x)); dragNode.y = Math.max(100, Math.min(2632, y)); } } game.move = handleMove; game.down = function (x, y, obj) { dragNode = player; handleMove(x, y, obj); }; game.up = function (x, y, obj) { dragNode = null; }; // Main game update loop game.update = function () { var currentTime = LK.ticks * 16.67; // Increase difficulty over time difficultyMultiplier = 1 + LK.getScore() * 0.02; enemySpawnInterval = Math.max(500, 1500 - LK.getScore() * 10); // Spawn enemies if (currentTime - lastEnemySpawn > enemySpawnInterval) { spawnEnemy(); lastEnemySpawn = currentTime; } // Spawn power-ups if (currentTime - lastPowerUpSpawn > powerUpSpawnInterval) { spawnPowerUp(); lastPowerUpSpawn = currentTime; } // Update and check player bullets for (var i = playerBullets.length - 1; i >= 0; i--) { var bullet = playerBullets[i]; if (bullet.lastY === undefined) bullet.lastY = bullet.y; // Remove bullets that go off screen if (bullet.lastY >= -50 && bullet.y < -50) { bullet.destroy(); playerBullets.splice(i, 1); continue; } // Check bullet-enemy collisions var hitEnemy = false; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { // Destroy enemy and bullet LK.setScore(LK.getScore() + 10); scoreTxt.setText('Score: ' + LK.getScore()); LK.effects.flashObject(enemy, 0xFF6600, 200); LK.getSound('explosion').play(); enemy.destroy(); enemies.splice(j, 1); bullet.destroy(); playerBullets.splice(i, 1); hitEnemy = true; break; } } if (!hitEnemy) { bullet.lastY = bullet.y; } } // Update and check enemies for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; if (enemy.lastY === undefined) enemy.lastY = enemy.y; if (enemy.lastIntersecting === undefined) enemy.lastIntersecting = false; // Remove enemies that go off screen if (enemy.lastY <= 2800 && enemy.y > 2800) { enemy.destroy(); enemies.splice(i, 1); continue; } // Check player-enemy collision var currentIntersecting = enemy.intersects(player); if (!enemy.lastIntersecting && currentIntersecting) { LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); return; } enemy.lastY = enemy.y; enemy.lastIntersecting = currentIntersecting; } // Update and check power-ups for (var i = powerUps.length - 1; i >= 0; i--) { var powerUp = powerUps[i]; if (powerUp.lastY === undefined) powerUp.lastY = powerUp.y; if (powerUp.lastIntersecting === undefined) powerUp.lastIntersecting = false; // Remove power-ups that go off screen if (powerUp.lastY <= 2800 && powerUp.y > 2800) { powerUp.destroy(); powerUps.splice(i, 1); continue; } // Check player-powerup collision var currentIntersecting = powerUp.intersects(player); if (!powerUp.lastIntersecting && currentIntersecting) { player.activatePowerUp(); LK.getSound('powerup').play(); LK.effects.flashObject(player, 0x00FFFF, 500); powerUp.destroy(); powerUps.splice(i, 1); continue; } powerUp.lastY = powerUp.y; powerUp.lastIntersecting = currentIntersecting; } }; // Helper functions function spawnEnemy() { var enemy; var enemyType = Math.random(); if (enemyType < 0.6) { enemy = new Asteroid(); } else { enemy = new EnemyShip(); } enemy.x = Math.random() * 1800 + 124; // Random x position with margins enemy.y = -100; enemy.speed *= difficultyMultiplier; enemies.push(enemy); game.addChild(enemy); } function spawnPowerUp() { var powerUp = new PowerUp(); powerUp.x = Math.random() * 1800 + 124; powerUp.y = -100; powerUps.push(powerUp); game.addChild(powerUp); }
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,265 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Asteroid = Container.expand(function () {
+ var self = Container.call(this);
+ var asteroidGraphics = self.attachAsset('asteroid', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3 + Math.random() * 2;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.1;
+ self.update = function () {
+ self.y += self.speed;
+ asteroidGraphics.rotation += self.rotationSpeed;
+ };
+ return self;
+});
+var EnemyShip = Container.expand(function () {
+ var self = Container.call(this);
+ var shipGraphics = self.attachAsset('enemyShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 4 + Math.random() * 3;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var PlayerBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('playerBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -12;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var PlayerShip = Container.expand(function () {
+ var self = Container.call(this);
+ var shipGraphics = self.attachAsset('playerShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ self.lastShotTime = 0;
+ self.shotInterval = 300; // milliseconds
+ self.powerUpActive = false;
+ self.powerUpEndTime = 0;
+ self.update = function () {
+ // Handle power-up expiration
+ if (self.powerUpActive && LK.ticks * 16.67 > self.powerUpEndTime) {
+ self.powerUpActive = false;
+ shipGraphics.tint = 0xFFFFFF;
+ }
+ // Auto-fire bullets
+ var currentTime = LK.ticks * 16.67;
+ var interval = self.powerUpActive ? self.shotInterval / 2 : self.shotInterval;
+ if (currentTime - self.lastShotTime > interval) {
+ self.fireBullet();
+ self.lastShotTime = currentTime;
+ }
+ };
+ self.fireBullet = function () {
+ var bullet = new PlayerBullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 40;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
+ };
+ self.activatePowerUp = function () {
+ self.powerUpActive = true;
+ self.powerUpEndTime = LK.ticks * 16.67 + 5000; // 5 seconds
+ shipGraphics.tint = 0x00FFFF;
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerUpGraphics = self.attachAsset('powerUp', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.pulseTime = 0;
+ self.update = function () {
+ self.y += self.speed;
+ self.pulseTime += 0.1;
+ powerUpGraphics.alpha = 0.7 + Math.sin(self.pulseTime) * 0.3;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000011
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var playerBullets = [];
+var enemies = [];
+var powerUps = [];
+var dragNode = null;
+var lastEnemySpawn = 0;
+var lastPowerUpSpawn = 0;
+var enemySpawnInterval = 1500;
+var powerUpSpawnInterval = 15000;
+var difficultyMultiplier = 1;
+// UI Elements
+var scoreTxt = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Initialize player ship
+player = game.addChild(new PlayerShip());
+player.x = 1024;
+player.y = 2400;
+// Game event handlers
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ dragNode.x = Math.max(40, Math.min(2008, x));
+ dragNode.y = Math.max(100, Math.min(2632, y));
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ dragNode = player;
+ handleMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Main game update loop
+game.update = function () {
+ var currentTime = LK.ticks * 16.67;
+ // Increase difficulty over time
+ difficultyMultiplier = 1 + LK.getScore() * 0.02;
+ enemySpawnInterval = Math.max(500, 1500 - LK.getScore() * 10);
+ // Spawn enemies
+ if (currentTime - lastEnemySpawn > enemySpawnInterval) {
+ spawnEnemy();
+ lastEnemySpawn = currentTime;
+ }
+ // Spawn power-ups
+ if (currentTime - lastPowerUpSpawn > powerUpSpawnInterval) {
+ spawnPowerUp();
+ lastPowerUpSpawn = currentTime;
+ }
+ // Update and check player bullets
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var bullet = playerBullets[i];
+ if (bullet.lastY === undefined) bullet.lastY = bullet.y;
+ // Remove bullets that go off screen
+ if (bullet.lastY >= -50 && bullet.y < -50) {
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ continue;
+ }
+ // Check bullet-enemy collisions
+ var hitEnemy = false;
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var enemy = enemies[j];
+ if (bullet.intersects(enemy)) {
+ // Destroy enemy and bullet
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText('Score: ' + LK.getScore());
+ LK.effects.flashObject(enemy, 0xFF6600, 200);
+ LK.getSound('explosion').play();
+ enemy.destroy();
+ enemies.splice(j, 1);
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ hitEnemy = true;
+ break;
+ }
+ }
+ if (!hitEnemy) {
+ bullet.lastY = bullet.y;
+ }
+ }
+ // Update and check enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ if (enemy.lastY === undefined) enemy.lastY = enemy.y;
+ if (enemy.lastIntersecting === undefined) enemy.lastIntersecting = false;
+ // Remove enemies that go off screen
+ if (enemy.lastY <= 2800 && enemy.y > 2800) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ continue;
+ }
+ // Check player-enemy collision
+ var currentIntersecting = enemy.intersects(player);
+ if (!enemy.lastIntersecting && currentIntersecting) {
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ enemy.lastY = enemy.y;
+ enemy.lastIntersecting = currentIntersecting;
+ }
+ // Update and check power-ups
+ for (var i = powerUps.length - 1; i >= 0; i--) {
+ var powerUp = powerUps[i];
+ if (powerUp.lastY === undefined) powerUp.lastY = powerUp.y;
+ if (powerUp.lastIntersecting === undefined) powerUp.lastIntersecting = false;
+ // Remove power-ups that go off screen
+ if (powerUp.lastY <= 2800 && powerUp.y > 2800) {
+ powerUp.destroy();
+ powerUps.splice(i, 1);
+ continue;
+ }
+ // Check player-powerup collision
+ var currentIntersecting = powerUp.intersects(player);
+ if (!powerUp.lastIntersecting && currentIntersecting) {
+ player.activatePowerUp();
+ LK.getSound('powerup').play();
+ LK.effects.flashObject(player, 0x00FFFF, 500);
+ powerUp.destroy();
+ powerUps.splice(i, 1);
+ continue;
+ }
+ powerUp.lastY = powerUp.y;
+ powerUp.lastIntersecting = currentIntersecting;
+ }
+};
+// Helper functions
+function spawnEnemy() {
+ var enemy;
+ var enemyType = Math.random();
+ if (enemyType < 0.6) {
+ enemy = new Asteroid();
+ } else {
+ enemy = new EnemyShip();
+ }
+ enemy.x = Math.random() * 1800 + 124; // Random x position with margins
+ enemy.y = -100;
+ enemy.speed *= difficultyMultiplier;
+ enemies.push(enemy);
+ game.addChild(enemy);
+}
+function spawnPowerUp() {
+ var powerUp = new PowerUp();
+ powerUp.x = Math.random() * 1800 + 124;
+ powerUp.y = -100;
+ powerUps.push(powerUp);
+ game.addChild(powerUp);
+}
\ No newline at end of file