/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.lastY = 0;
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = 60;
self.height = 60;
self.shootTimer = 0;
self.shootInterval = 60;
self.speed = 2;
self.lastY = 0;
self.lastIntersecting = false;
self.update = function () {
self.y += self.speed;
self.shootTimer++;
};
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.lastY = 0;
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.width = 80;
self.height = 80;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
var playerShip = game.addChild(new PlayerShip());
playerShip.x = 1024;
playerShip.y = 2600;
var playerBullets = [];
var enemyShips = [];
var enemyBullets = [];
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var dragNode = null;
var gameActive = true;
var shootCounter = 0;
var enemySpawnCounter = 0;
var waveLevel = 1;
function getEnemySpawnRate() {
var baseRate = 120;
var scoreBonus = Math.floor(LK.getScore() / 10);
return Math.max(40, baseRate - scoreBonus * 5);
}
function getEnemySpeed() {
var baseSpeed = 2;
var scoreBonus = Math.floor(LK.getScore() / 20);
return baseSpeed + scoreBonus * 0.2;
}
function getEnemyShootInterval() {
var baseInterval = 80;
var scoreBonus = Math.floor(LK.getScore() / 15);
return Math.max(30, baseInterval - scoreBonus * 3);
}
game.down = function (x, y, obj) {
dragNode = playerShip;
handleGameMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
function handleGameMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.x = Math.max(40, Math.min(2048 - 40, dragNode.x));
dragNode.y = Math.max(2400, Math.min(2732 - 40, dragNode.y));
}
}
game.move = handleGameMove;
game.update = function () {
if (!gameActive) return;
// Player shooting
shootCounter++;
if (shootCounter >= 15) {
var newBullet = new PlayerBullet();
newBullet.x = playerShip.x;
newBullet.y = playerShip.y;
newBullet.lastY = newBullet.y;
playerBullets.push(newBullet);
game.addChild(newBullet);
LK.getSound('shoot').play();
shootCounter = 0;
}
// Spawn enemies
enemySpawnCounter++;
var spawnRate = getEnemySpawnRate();
if (enemySpawnCounter >= spawnRate) {
var newEnemy = new EnemyShip();
newEnemy.x = Math.random() * (2048 - 120) + 60;
newEnemy.y = -30;
newEnemy.speed = getEnemySpeed();
newEnemy.shootInterval = getEnemyShootInterval();
enemyShips.push(newEnemy);
game.addChild(newEnemy);
enemySpawnCounter = 0;
}
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Off-screen check
if (bullet.lastY >= 0 && bullet.y < 0) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
bullet.lastY = bullet.y;
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var ebullet = enemyBullets[i];
if (ebullet.lastY === undefined) ebullet.lastY = ebullet.y;
// Off-screen check
if (ebullet.lastY <= 2732 && ebullet.y > 2732) {
ebullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (ebullet.intersects(playerShip)) {
LK.getSound('hit').play();
LK.effects.flashScreen(0xff0000, 500);
gameActive = false;
LK.showGameOver();
return;
}
ebullet.lastY = ebullet.y;
}
// Update enemies
for (var i = enemyShips.length - 1; i >= 0; i--) {
var enemy = enemyShips[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
if (enemy.lastIntersecting === undefined) enemy.lastIntersecting = false;
// Enemy shooting
enemy.shootTimer++;
if (enemy.shootTimer >= enemy.shootInterval) {
var newEBullet = new EnemyBullet();
newEBullet.x = enemy.x;
newEBullet.y = enemy.y;
newEBullet.lastY = newEBullet.y;
enemyBullets.push(newEBullet);
game.addChild(newEBullet);
enemy.shootTimer = 0;
}
// Off-screen check
if (enemy.lastY <= 2732 && enemy.y > 2732) {
enemy.destroy();
enemyShips.splice(i, 1);
continue;
}
// Check collision with player
var currentIntersecting = enemy.intersects(playerShip);
if (!enemy.lastIntersecting && currentIntersecting) {
LK.getSound('hit').play();
LK.effects.flashScreen(0xff0000, 500);
gameActive = false;
LK.showGameOver();
return;
}
// Check collision with player bullets
for (var j = playerBullets.length - 1; j >= 0; j--) {
var pbullet = playerBullets[j];
if (pbullet.intersects(enemy)) {
LK.getSound('explosion').play();
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
pbullet.destroy();
playerBullets.splice(j, 1);
enemy.destroy();
enemyShips.splice(i, 1);
break;
}
}
if (i >= 0 && i < enemyShips.length) {
enemy.lastY = enemy.y;
enemy.lastIntersecting = currentIntersecting;
}
}
};
LK.playMusic('bgmusic', {
loop: true
}); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,234 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var EnemyBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('enemyBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 6;
+ self.lastY = 0;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var EnemyShip = Container.expand(function () {
+ var self = Container.call(this);
+ var shipGraphics = self.attachAsset('enemyShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.width = 60;
+ self.height = 60;
+ self.shootTimer = 0;
+ self.shootInterval = 60;
+ self.speed = 2;
+ self.lastY = 0;
+ self.lastIntersecting = false;
+ self.update = function () {
+ self.y += self.speed;
+ self.shootTimer++;
+ };
+ 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.lastY = 0;
+ 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.width = 80;
+ self.height = 80;
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
+ backgroundColor: 0x000011
+});
+
+/****
+* Game Code
+****/
+var playerShip = game.addChild(new PlayerShip());
+playerShip.x = 1024;
+playerShip.y = 2600;
+var playerBullets = [];
+var enemyShips = [];
+var enemyBullets = [];
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var dragNode = null;
+var gameActive = true;
+var shootCounter = 0;
+var enemySpawnCounter = 0;
+var waveLevel = 1;
+function getEnemySpawnRate() {
+ var baseRate = 120;
+ var scoreBonus = Math.floor(LK.getScore() / 10);
+ return Math.max(40, baseRate - scoreBonus * 5);
+}
+function getEnemySpeed() {
+ var baseSpeed = 2;
+ var scoreBonus = Math.floor(LK.getScore() / 20);
+ return baseSpeed + scoreBonus * 0.2;
+}
+function getEnemyShootInterval() {
+ var baseInterval = 80;
+ var scoreBonus = Math.floor(LK.getScore() / 15);
+ return Math.max(30, baseInterval - scoreBonus * 3);
+}
+game.down = function (x, y, obj) {
+ dragNode = playerShip;
+ handleGameMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+function handleGameMove(x, y, obj) {
+ if (dragNode) {
+ dragNode.x = x;
+ dragNode.x = Math.max(40, Math.min(2048 - 40, dragNode.x));
+ dragNode.y = Math.max(2400, Math.min(2732 - 40, dragNode.y));
+ }
+}
+game.move = handleGameMove;
+game.update = function () {
+ if (!gameActive) return;
+ // Player shooting
+ shootCounter++;
+ if (shootCounter >= 15) {
+ var newBullet = new PlayerBullet();
+ newBullet.x = playerShip.x;
+ newBullet.y = playerShip.y;
+ newBullet.lastY = newBullet.y;
+ playerBullets.push(newBullet);
+ game.addChild(newBullet);
+ LK.getSound('shoot').play();
+ shootCounter = 0;
+ }
+ // Spawn enemies
+ enemySpawnCounter++;
+ var spawnRate = getEnemySpawnRate();
+ if (enemySpawnCounter >= spawnRate) {
+ var newEnemy = new EnemyShip();
+ newEnemy.x = Math.random() * (2048 - 120) + 60;
+ newEnemy.y = -30;
+ newEnemy.speed = getEnemySpeed();
+ newEnemy.shootInterval = getEnemyShootInterval();
+ enemyShips.push(newEnemy);
+ game.addChild(newEnemy);
+ enemySpawnCounter = 0;
+ }
+ // Update player bullets
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var bullet = playerBullets[i];
+ if (bullet.lastY === undefined) bullet.lastY = bullet.y;
+ // Off-screen check
+ if (bullet.lastY >= 0 && bullet.y < 0) {
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ continue;
+ }
+ bullet.lastY = bullet.y;
+ }
+ // Update enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var ebullet = enemyBullets[i];
+ if (ebullet.lastY === undefined) ebullet.lastY = ebullet.y;
+ // Off-screen check
+ if (ebullet.lastY <= 2732 && ebullet.y > 2732) {
+ ebullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (ebullet.intersects(playerShip)) {
+ LK.getSound('hit').play();
+ LK.effects.flashScreen(0xff0000, 500);
+ gameActive = false;
+ LK.showGameOver();
+ return;
+ }
+ ebullet.lastY = ebullet.y;
+ }
+ // Update enemies
+ for (var i = enemyShips.length - 1; i >= 0; i--) {
+ var enemy = enemyShips[i];
+ if (enemy.lastY === undefined) enemy.lastY = enemy.y;
+ if (enemy.lastIntersecting === undefined) enemy.lastIntersecting = false;
+ // Enemy shooting
+ enemy.shootTimer++;
+ if (enemy.shootTimer >= enemy.shootInterval) {
+ var newEBullet = new EnemyBullet();
+ newEBullet.x = enemy.x;
+ newEBullet.y = enemy.y;
+ newEBullet.lastY = newEBullet.y;
+ enemyBullets.push(newEBullet);
+ game.addChild(newEBullet);
+ enemy.shootTimer = 0;
+ }
+ // Off-screen check
+ if (enemy.lastY <= 2732 && enemy.y > 2732) {
+ enemy.destroy();
+ enemyShips.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ var currentIntersecting = enemy.intersects(playerShip);
+ if (!enemy.lastIntersecting && currentIntersecting) {
+ LK.getSound('hit').play();
+ LK.effects.flashScreen(0xff0000, 500);
+ gameActive = false;
+ LK.showGameOver();
+ return;
+ }
+ // Check collision with player bullets
+ for (var j = playerBullets.length - 1; j >= 0; j--) {
+ var pbullet = playerBullets[j];
+ if (pbullet.intersects(enemy)) {
+ LK.getSound('explosion').play();
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText(LK.getScore());
+ pbullet.destroy();
+ playerBullets.splice(j, 1);
+ enemy.destroy();
+ enemyShips.splice(i, 1);
+ break;
+ }
+ }
+ if (i >= 0 && i < enemyShips.length) {
+ enemy.lastY = enemy.y;
+ enemy.lastIntersecting = currentIntersecting;
+ }
+ }
+};
+LK.playMusic('bgmusic', {
+ loop: true
});
\ No newline at end of file