/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 12;
self.damage = 1;
self.targetX = 0;
self.targetY = 0;
self.update = function () {
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 Player = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.weapon = self.addChild(new Weapon());
self.weapon.x = 0;
self.weapon.y = -10;
self.health = 3;
self.lastHealth = 3;
self.shootTimer = 0;
self.update = function () {
if (self.shootTimer > 0) {
self.shootTimer--;
}
if (self.lastHealth > self.health) {
LK.effects.flashObject(self, 0xFF0000, 500);
}
self.lastHealth = self.health;
};
self.canShoot = function () {
return self.shootTimer <= 0;
};
self.shoot = function (targetX, targetY) {
if (self.canShoot()) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
bullet.targetX = targetX;
bullet.targetY = targetY;
bullet.damage = self.weapon.damage;
bullets.push(bullet);
game.addChild(bullet);
self.shootTimer = self.weapon.fireRate;
LK.getSound('shoot').play();
}
};
return self;
});
var Thief = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('thief', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1;
self.health = 1;
self.lastX = 0;
self.lastY = 0;
self.update = function () {
self.lastX = self.x;
self.lastY = self.y;
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
};
return self;
});
var Weapon = Container.expand(function () {
var self = Container.call(this);
self.weaponType = 'pistol';
self.fireRate = 30;
self.damage = 1;
self.graphics = null;
self.setWeapon = function (type) {
if (self.graphics) {
self.removeChild(self.graphics);
}
self.weaponType = type;
if (type === 'pistol') {
self.graphics = self.attachAsset('pistol', {
anchorX: 0.5,
anchorY: 0.5
});
self.fireRate = 30;
self.damage = 1;
} else if (type === 'rifle') {
self.graphics = self.attachAsset('rifle', {
anchorX: 0.5,
anchorY: 0.5
});
self.fireRate = 15;
self.damage = 2;
} else if (type === 'shotgun') {
self.graphics = self.attachAsset('shotgun', {
anchorX: 0.5,
anchorY: 0.5
});
self.fireRate = 45;
self.damage = 3;
}
};
self.setWeapon('pistol');
return self;
});
var WeaponPickup = Container.expand(function () {
var self = Container.call(this);
self.weaponType = 'pistol';
self.graphics = null;
self.setType = function (type) {
if (self.graphics) {
self.removeChild(self.graphics);
}
self.weaponType = type;
if (type === 'pistol') {
self.graphics = self.attachAsset('pistol', {
anchorX: 0.5,
anchorY: 0.5
});
} else if (type === 'rifle') {
self.graphics = self.attachAsset('rifle', {
anchorX: 0.5,
anchorY: 0.5
});
} else if (type === 'shotgun') {
self.graphics = self.attachAsset('shotgun', {
anchorX: 0.5,
anchorY: 0.5
});
}
self.graphics.alpha = 0.8;
tween(self.graphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 1000,
easing: tween.easeInOut
});
tween(self.graphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x8B4513
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 1024;
player.y = 1366;
var thieves = [];
var bullets = [];
var weaponPickups = [];
var waveNumber = 1;
var thievesSpawned = 0;
var thievesInWave = 5;
var spawnTimer = 0;
var pickupTimer = 0;
var gameRunning = true;
var scoreText = new Text2('Score: 0', {
size: 60,
fill: '#FFFFFF'
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var healthText = new Text2('Health: 3', {
size: 60,
fill: '#FF0000'
});
healthText.anchor.set(0, 0);
healthText.x = 150;
healthText.y = 20;
LK.gui.topLeft.addChild(healthText);
var waveText = new Text2('Wave: 1', {
size: 60,
fill: '#00FF00'
});
waveText.anchor.set(1, 0);
LK.gui.topRight.addChild(waveText);
function spawnThief() {
var thief = new Thief();
var side = Math.floor(Math.random() * 4);
switch (side) {
case 0:
// Top
thief.x = Math.random() * 2048;
thief.y = -50;
break;
case 1:
// Right
thief.x = 2098;
thief.y = Math.random() * 2732;
break;
case 2:
// Bottom
thief.x = Math.random() * 2048;
thief.y = 2782;
break;
case 3:
// Left
thief.x = -50;
thief.y = Math.random() * 2732;
break;
}
thief.speed = 1 + waveNumber * 0.2;
thieves.push(thief);
game.addChild(thief);
}
function spawnWeaponPickup() {
var pickup = new WeaponPickup();
pickup.x = Math.random() * 1800 + 124;
pickup.y = Math.random() * 2400 + 166;
var weaponTypes = ['pistol', 'rifle', 'shotgun'];
var randomType = weaponTypes[Math.floor(Math.random() * weaponTypes.length)];
pickup.setType(randomType);
weaponPickups.push(pickup);
game.addChild(pickup);
}
function findClosestThief() {
var closest = null;
var closestDistance = Infinity;
for (var i = 0; i < thieves.length; i++) {
var thief = thieves[i];
var dx = thief.x - player.x;
var dy = thief.y - player.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < closestDistance) {
closest = thief;
closestDistance = distance;
}
}
return closest;
}
function nextWave() {
waveNumber++;
thievesInWave = 5 + waveNumber * 2;
thievesSpawned = 0;
waveText.setText('Wave: ' + waveNumber);
}
game.down = function (x, y, obj) {
if (!gameRunning) return;
player.x = x;
player.y = y;
var closestThief = findClosestThief();
if (closestThief) {
player.shoot(closestThief.x, closestThief.y);
}
};
game.update = function () {
if (!gameRunning) return;
scoreText.setText('Score: ' + LK.getScore());
healthText.setText('Health: ' + player.health);
spawnTimer++;
if (spawnTimer >= 60 && thievesSpawned < thievesInWave) {
spawnThief();
thievesSpawned++;
spawnTimer = 0;
}
pickupTimer++;
if (pickupTimer >= 300) {
spawnWeaponPickup();
pickupTimer = 0;
}
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
for (var j = thieves.length - 1; j >= 0; j--) {
var thief = thieves[j];
if (bullet.intersects(thief)) {
LK.setScore(LK.getScore() + 10);
LK.getSound('enemyHit').play();
LK.effects.flashObject(thief, 0xFF0000, 200);
bullet.destroy();
bullets.splice(i, 1);
thief.destroy();
thieves.splice(j, 1);
break;
}
}
}
for (var i = thieves.length - 1; i >= 0; i--) {
var thief = thieves[i];
if (thief.intersects(player)) {
player.health--;
if (player.health <= 0) {
gameRunning = false;
LK.effects.flashScreen(0xFF0000, 1000);
LK.showGameOver();
return;
}
thief.destroy();
thieves.splice(i, 1);
}
}
for (var i = weaponPickups.length - 1; i >= 0; i--) {
var pickup = weaponPickups[i];
if (pickup.intersects(player)) {
player.weapon.setWeapon(pickup.weaponType);
LK.getSound('pickup').play();
pickup.destroy();
weaponPickups.splice(i, 1);
}
}
if (thieves.length === 0 && thievesSpawned >= thievesInWave) {
nextWave();
}
var closestThief = findClosestThief();
if (closestThief && player.canShoot()) {
player.shoot(closestThief.x, closestThief.y);
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,351 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 12;
+ self.damage = 1;
+ self.targetX = 0;
+ self.targetY = 0;
+ self.update = function () {
+ 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 Player = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.weapon = self.addChild(new Weapon());
+ self.weapon.x = 0;
+ self.weapon.y = -10;
+ self.health = 3;
+ self.lastHealth = 3;
+ self.shootTimer = 0;
+ self.update = function () {
+ if (self.shootTimer > 0) {
+ self.shootTimer--;
+ }
+ if (self.lastHealth > self.health) {
+ LK.effects.flashObject(self, 0xFF0000, 500);
+ }
+ self.lastHealth = self.health;
+ };
+ self.canShoot = function () {
+ return self.shootTimer <= 0;
+ };
+ self.shoot = function (targetX, targetY) {
+ if (self.canShoot()) {
+ var bullet = new Bullet();
+ bullet.x = self.x;
+ bullet.y = self.y;
+ bullet.targetX = targetX;
+ bullet.targetY = targetY;
+ bullet.damage = self.weapon.damage;
+ bullets.push(bullet);
+ game.addChild(bullet);
+ self.shootTimer = self.weapon.fireRate;
+ LK.getSound('shoot').play();
+ }
+ };
+ return self;
+});
+var Thief = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('thief', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 1;
+ self.health = 1;
+ self.lastX = 0;
+ self.lastY = 0;
+ self.update = function () {
+ self.lastX = self.x;
+ self.lastY = self.y;
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ };
+ return self;
+});
+var Weapon = Container.expand(function () {
+ var self = Container.call(this);
+ self.weaponType = 'pistol';
+ self.fireRate = 30;
+ self.damage = 1;
+ self.graphics = null;
+ self.setWeapon = function (type) {
+ if (self.graphics) {
+ self.removeChild(self.graphics);
+ }
+ self.weaponType = type;
+ if (type === 'pistol') {
+ self.graphics = self.attachAsset('pistol', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.fireRate = 30;
+ self.damage = 1;
+ } else if (type === 'rifle') {
+ self.graphics = self.attachAsset('rifle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.fireRate = 15;
+ self.damage = 2;
+ } else if (type === 'shotgun') {
+ self.graphics = self.attachAsset('shotgun', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.fireRate = 45;
+ self.damage = 3;
+ }
+ };
+ self.setWeapon('pistol');
+ return self;
+});
+var WeaponPickup = Container.expand(function () {
+ var self = Container.call(this);
+ self.weaponType = 'pistol';
+ self.graphics = null;
+ self.setType = function (type) {
+ if (self.graphics) {
+ self.removeChild(self.graphics);
+ }
+ self.weaponType = type;
+ if (type === 'pistol') {
+ self.graphics = self.attachAsset('pistol', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ } else if (type === 'rifle') {
+ self.graphics = self.attachAsset('rifle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ } else if (type === 'shotgun') {
+ self.graphics = self.attachAsset('shotgun', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ }
+ self.graphics.alpha = 0.8;
+ tween(self.graphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut
+ });
+ tween(self.graphics, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut
+ });
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x8B4513
+});
+
+/****
+* Game Code
+****/
+var player = game.addChild(new Player());
+player.x = 1024;
+player.y = 1366;
+var thieves = [];
+var bullets = [];
+var weaponPickups = [];
+var waveNumber = 1;
+var thievesSpawned = 0;
+var thievesInWave = 5;
+var spawnTimer = 0;
+var pickupTimer = 0;
+var gameRunning = true;
+var scoreText = new Text2('Score: 0', {
+ size: 60,
+ fill: '#FFFFFF'
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var healthText = new Text2('Health: 3', {
+ size: 60,
+ fill: '#FF0000'
+});
+healthText.anchor.set(0, 0);
+healthText.x = 150;
+healthText.y = 20;
+LK.gui.topLeft.addChild(healthText);
+var waveText = new Text2('Wave: 1', {
+ size: 60,
+ fill: '#00FF00'
+});
+waveText.anchor.set(1, 0);
+LK.gui.topRight.addChild(waveText);
+function spawnThief() {
+ var thief = new Thief();
+ var side = Math.floor(Math.random() * 4);
+ switch (side) {
+ case 0:
+ // Top
+ thief.x = Math.random() * 2048;
+ thief.y = -50;
+ break;
+ case 1:
+ // Right
+ thief.x = 2098;
+ thief.y = Math.random() * 2732;
+ break;
+ case 2:
+ // Bottom
+ thief.x = Math.random() * 2048;
+ thief.y = 2782;
+ break;
+ case 3:
+ // Left
+ thief.x = -50;
+ thief.y = Math.random() * 2732;
+ break;
+ }
+ thief.speed = 1 + waveNumber * 0.2;
+ thieves.push(thief);
+ game.addChild(thief);
+}
+function spawnWeaponPickup() {
+ var pickup = new WeaponPickup();
+ pickup.x = Math.random() * 1800 + 124;
+ pickup.y = Math.random() * 2400 + 166;
+ var weaponTypes = ['pistol', 'rifle', 'shotgun'];
+ var randomType = weaponTypes[Math.floor(Math.random() * weaponTypes.length)];
+ pickup.setType(randomType);
+ weaponPickups.push(pickup);
+ game.addChild(pickup);
+}
+function findClosestThief() {
+ var closest = null;
+ var closestDistance = Infinity;
+ for (var i = 0; i < thieves.length; i++) {
+ var thief = thieves[i];
+ var dx = thief.x - player.x;
+ var dy = thief.y - player.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < closestDistance) {
+ closest = thief;
+ closestDistance = distance;
+ }
+ }
+ return closest;
+}
+function nextWave() {
+ waveNumber++;
+ thievesInWave = 5 + waveNumber * 2;
+ thievesSpawned = 0;
+ waveText.setText('Wave: ' + waveNumber);
+}
+game.down = function (x, y, obj) {
+ if (!gameRunning) return;
+ player.x = x;
+ player.y = y;
+ var closestThief = findClosestThief();
+ if (closestThief) {
+ player.shoot(closestThief.x, closestThief.y);
+ }
+};
+game.update = function () {
+ if (!gameRunning) return;
+ scoreText.setText('Score: ' + LK.getScore());
+ healthText.setText('Health: ' + player.health);
+ spawnTimer++;
+ if (spawnTimer >= 60 && thievesSpawned < thievesInWave) {
+ spawnThief();
+ thievesSpawned++;
+ spawnTimer = 0;
+ }
+ pickupTimer++;
+ if (pickupTimer >= 300) {
+ spawnWeaponPickup();
+ pickupTimer = 0;
+ }
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ for (var j = thieves.length - 1; j >= 0; j--) {
+ var thief = thieves[j];
+ if (bullet.intersects(thief)) {
+ LK.setScore(LK.getScore() + 10);
+ LK.getSound('enemyHit').play();
+ LK.effects.flashObject(thief, 0xFF0000, 200);
+ bullet.destroy();
+ bullets.splice(i, 1);
+ thief.destroy();
+ thieves.splice(j, 1);
+ break;
+ }
+ }
+ }
+ for (var i = thieves.length - 1; i >= 0; i--) {
+ var thief = thieves[i];
+ if (thief.intersects(player)) {
+ player.health--;
+ if (player.health <= 0) {
+ gameRunning = false;
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ thief.destroy();
+ thieves.splice(i, 1);
+ }
+ }
+ for (var i = weaponPickups.length - 1; i >= 0; i--) {
+ var pickup = weaponPickups[i];
+ if (pickup.intersects(player)) {
+ player.weapon.setWeapon(pickup.weaponType);
+ LK.getSound('pickup').play();
+ pickup.destroy();
+ weaponPickups.splice(i, 1);
+ }
+ }
+ if (thieves.length === 0 && thievesSpawned >= thievesInWave) {
+ nextWave();
+ }
+ var closestThief = findClosestThief();
+ if (closestThief && player.canShoot()) {
+ player.shoot(closestThief.x, closestThief.y);
+ }
+};
\ No newline at end of file