/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.health = 1;
self.targetX = 1024;
self.targetY = 1366;
self.lastX = self.x;
self.lastY = self.y;
self.takeDamage = function (amount) {
self.health -= amount;
if (self.health <= 0) {
return true;
}
return false;
};
self.update = function () {
self.lastX = self.x;
self.lastY = self.y;
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 5) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
};
return self;
});
var ShieldSegment = Container.expand(function () {
var self = Container.call(this);
var segmentGraphics = self.attachAsset('shield', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 3;
self.takeDamage = function (amount) {
self.health -= amount;
if (self.health <= 0) {
return true;
}
tween(segmentGraphics, {
tint: 0xff6600
}, {
duration: 200
});
return false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
// Game variables
var character = game.addChild(new Enemy());
character.speed = 0;
character.x = 1024;
character.y = 1366;
var characterGraphics = character.children[0];
characterGraphics.tint = 0x00ff00;
var enemies = [];
var shields = [];
var score = 0;
var waveCounter = 0;
var gameActive = true;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreTxt);
// Draw shield tracking
var isDrawing = false;
var currentShieldLine = [];
var lastShieldX = 0;
var lastShieldY = 0;
// Spawn enemy
function spawnEnemy() {
if (!gameActive) return;
var angle = Math.random() * Math.PI * 2;
var spawnDistance = 300;
var spawnX = 1024 + Math.cos(angle) * spawnDistance;
var spawnY = 1366 + Math.sin(angle) * spawnDistance;
var newEnemy = game.addChild(new Enemy());
newEnemy.x = spawnX;
newEnemy.y = spawnY;
newEnemy.lastX = spawnX;
newEnemy.lastY = spawnY;
enemies.push(newEnemy);
}
// Create shield from drawn line
function createShield(x, y) {
var newShield = game.addChild(new ShieldSegment());
newShield.x = x;
newShield.y = y;
shields.push(newShield);
}
// Enemy spawn timer
var spawnTimer = LK.setInterval(function () {
if (gameActive) {
spawnEnemy();
waveCounter++;
// Increase difficulty
if (waveCounter % 5 === 0) {
for (var i = 0; i < enemies.length; i++) {
enemies[i].speed += 0.2;
}
}
}
}, 1500);
// Game input handlers
game.down = function (x, y, obj) {
if (!gameActive) return;
isDrawing = true;
currentShieldLine = [];
lastShieldX = x;
lastShieldY = y;
};
game.move = function (x, y, obj) {
if (!gameActive || !isDrawing) return;
var dx = x - lastShieldX;
var dy = y - lastShieldY;
var distance = Math.sqrt(dx * dx + dy * dy);
// Create shield segments every 30 pixels
if (distance > 30) {
createShield(x, y);
lastShieldX = x;
lastShieldY = y;
}
};
game.up = function (x, y, obj) {
if (!gameActive) return;
isDrawing = false;
currentShieldLine = [];
};
// Main game update loop
game.update = function () {
if (!gameActive) return;
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
enemy.update();
// Check distance to character
var dx = character.x - enemy.x;
var dy = character.y - enemy.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 100) {
// Enemy reached character - game over
LK.effects.flashScreen(0xff0000, 500);
gameActive = false;
LK.showGameOver();
LK.clearInterval(spawnTimer);
return;
}
// Check collision with shields
var enemyDestroyed = false;
for (var j = shields.length - 1; j >= 0; j--) {
var shield = shields[j];
var shieldDx = shield.x - enemy.x;
var shieldDy = shield.y - enemy.y;
var shieldDistance = Math.sqrt(shieldDx * shieldDx + shieldDy * shieldDy);
if (shieldDistance < 60) {
// Enemy hits shield
if (enemy.takeDamage(1)) {
// Enemy defeated
LK.getSound('enemyDefeat').play();
enemy.destroy();
enemies.splice(i, 1);
score += 10;
scoreTxt.setText('Score: ' + score);
// Win condition
if (score >= 500) {
gameActive = false;
LK.clearInterval(spawnTimer);
LK.showYouWin();
}
enemyDestroyed = true;
} else {
// Shield takes damage
if (shield.takeDamage(1)) {
LK.getSound('hit').play();
shield.destroy();
shields.splice(j, 1);
}
}
break;
}
}
if (enemyDestroyed) break;
}
// Clean up off-screen shields
for (var k = shields.length - 1; k >= 0; k--) {
var shield = shields[k];
if (shield.x < -100 || shield.x > 2148 || shield.y < -100 || shield.y > 2832) {
shield.destroy();
shields.splice(k, 1);
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,219 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.health = 1;
+ self.targetX = 1024;
+ self.targetY = 1366;
+ self.lastX = self.x;
+ self.lastY = self.y;
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ if (self.health <= 0) {
+ return true;
+ }
+ return false;
+ };
+ self.update = function () {
+ self.lastX = self.x;
+ self.lastY = self.y;
+ var dx = self.targetX - self.x;
+ var dy = self.targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 5) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ };
+ return self;
+});
+var ShieldSegment = Container.expand(function () {
+ var self = Container.call(this);
+ var segmentGraphics = self.attachAsset('shield', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 3;
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ if (self.health <= 0) {
+ return true;
+ }
+ tween(segmentGraphics, {
+ tint: 0xff6600
+ }, {
+ duration: 200
+ });
+ return false;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var character = game.addChild(new Enemy());
+character.speed = 0;
+character.x = 1024;
+character.y = 1366;
+var characterGraphics = character.children[0];
+characterGraphics.tint = 0x00ff00;
+var enemies = [];
+var shields = [];
+var score = 0;
+var waveCounter = 0;
+var gameActive = true;
+// Create score display
+var scoreTxt = new Text2('Score: 0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0, 0);
+LK.gui.topLeft.addChild(scoreTxt);
+// Draw shield tracking
+var isDrawing = false;
+var currentShieldLine = [];
+var lastShieldX = 0;
+var lastShieldY = 0;
+// Spawn enemy
+function spawnEnemy() {
+ if (!gameActive) return;
+ var angle = Math.random() * Math.PI * 2;
+ var spawnDistance = 300;
+ var spawnX = 1024 + Math.cos(angle) * spawnDistance;
+ var spawnY = 1366 + Math.sin(angle) * spawnDistance;
+ var newEnemy = game.addChild(new Enemy());
+ newEnemy.x = spawnX;
+ newEnemy.y = spawnY;
+ newEnemy.lastX = spawnX;
+ newEnemy.lastY = spawnY;
+ enemies.push(newEnemy);
+}
+// Create shield from drawn line
+function createShield(x, y) {
+ var newShield = game.addChild(new ShieldSegment());
+ newShield.x = x;
+ newShield.y = y;
+ shields.push(newShield);
+}
+// Enemy spawn timer
+var spawnTimer = LK.setInterval(function () {
+ if (gameActive) {
+ spawnEnemy();
+ waveCounter++;
+ // Increase difficulty
+ if (waveCounter % 5 === 0) {
+ for (var i = 0; i < enemies.length; i++) {
+ enemies[i].speed += 0.2;
+ }
+ }
+ }
+}, 1500);
+// Game input handlers
+game.down = function (x, y, obj) {
+ if (!gameActive) return;
+ isDrawing = true;
+ currentShieldLine = [];
+ lastShieldX = x;
+ lastShieldY = y;
+};
+game.move = function (x, y, obj) {
+ if (!gameActive || !isDrawing) return;
+ var dx = x - lastShieldX;
+ var dy = y - lastShieldY;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ // Create shield segments every 30 pixels
+ if (distance > 30) {
+ createShield(x, y);
+ lastShieldX = x;
+ lastShieldY = y;
+ }
+};
+game.up = function (x, y, obj) {
+ if (!gameActive) return;
+ isDrawing = false;
+ currentShieldLine = [];
+};
+// Main game update loop
+game.update = function () {
+ if (!gameActive) return;
+ // Update enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ enemy.update();
+ // Check distance to character
+ var dx = character.x - enemy.x;
+ var dy = character.y - enemy.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < 100) {
+ // Enemy reached character - game over
+ LK.effects.flashScreen(0xff0000, 500);
+ gameActive = false;
+ LK.showGameOver();
+ LK.clearInterval(spawnTimer);
+ return;
+ }
+ // Check collision with shields
+ var enemyDestroyed = false;
+ for (var j = shields.length - 1; j >= 0; j--) {
+ var shield = shields[j];
+ var shieldDx = shield.x - enemy.x;
+ var shieldDy = shield.y - enemy.y;
+ var shieldDistance = Math.sqrt(shieldDx * shieldDx + shieldDy * shieldDy);
+ if (shieldDistance < 60) {
+ // Enemy hits shield
+ if (enemy.takeDamage(1)) {
+ // Enemy defeated
+ LK.getSound('enemyDefeat').play();
+ enemy.destroy();
+ enemies.splice(i, 1);
+ score += 10;
+ scoreTxt.setText('Score: ' + score);
+ // Win condition
+ if (score >= 500) {
+ gameActive = false;
+ LK.clearInterval(spawnTimer);
+ LK.showYouWin();
+ }
+ enemyDestroyed = true;
+ } else {
+ // Shield takes damage
+ if (shield.takeDamage(1)) {
+ LK.getSound('hit').play();
+ shield.destroy();
+ shields.splice(j, 1);
+ }
+ }
+ break;
+ }
+ }
+ if (enemyDestroyed) break;
+ }
+ // Clean up off-screen shields
+ for (var k = shields.length - 1; k >= 0; k--) {
+ var shield = shields[k];
+ if (shield.x < -100 || shield.x > 2148 || shield.y < -100 || shield.y > 2832) {
+ shield.destroy();
+ shields.splice(k, 1);
+ }
+ }
+};
\ No newline at end of file