/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.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 = self.y;
self.lastIntersectingPlayer = false;
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
};
return self;
});
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.shootTimer = 0;
self.shootInterval = 60;
self.waveNumber = 1;
self.lastY = self.y;
self.lastIntersectingPlayer = false;
self.update = function () {
self.lastY = self.y;
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 = self.y;
self.update = function () {
self.lastY = self.y;
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 = 15;
self.x = 1024;
self.y = 2500;
self.moveLeft = function () {
if (self.x > 50) {
self.x -= self.speed;
}
};
self.moveRight = function () {
if (self.x < 1998) {
self.x += self.speed;
}
};
self.moveUp = function () {
if (self.y > 100) {
self.y -= self.speed;
}
};
self.moveDown = function () {
if (self.y < 2650) {
self.y += self.speed;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000814
});
/****
* Game Code
****/
var player = game.addChild(new PlayerShip());
var playerBullets = [];
var enemies = [];
var enemyBullets = [];
var waveCount = 1;
var waveTimer = 0;
var shootCooldown = 0;
var gameActive = true;
var touchStartX = 0;
var touchStartY = 0;
var currentTouchX = 1024;
var currentTouchY = 2500;
var scoreText = new Text2('Score: 0', {
size: 100,
fill: '#ffffff'
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var waveText = new Text2('Wave: 1', {
size: 80,
fill: '#ffff00'
});
waveText.anchor.set(0.5, 0);
waveText.x = 500;
LK.gui.top.addChild(waveText);
function spawnEnemyWave() {
var enemyCount = 3 + Math.floor(waveCount / 2);
var spacing = 1800 / enemyCount;
for (var i = 0; i < enemyCount; i++) {
var newEnemy = new EnemyShip();
newEnemy.x = 150 + i * spacing + Math.random() * 100;
newEnemy.y = -100;
newEnemy.speed = 1 + waveCount * 0.5;
newEnemy.shootInterval = Math.max(40, 80 - waveCount * 5);
newEnemy.waveNumber = waveCount;
enemies.push(newEnemy);
game.addChild(newEnemy);
}
}
function handleTouchMove(x, y, obj) {
currentTouchX = x;
currentTouchY = y;
}
game.move = handleTouchMove;
game.down = function (x, y, obj) {
touchStartX = x;
touchStartY = y;
};
game.up = function (x, y, obj) {
touchStartX = 0;
touchStartY = 0;
};
spawnEnemyWave();
LK.playMusic('bgmusic');
game.update = function () {
if (!gameActive) return;
shootCooldown--;
waveTimer++;
var distX = currentTouchX - player.x;
var distY = currentTouchY - player.y;
var distance = Math.sqrt(distX * distX + distY * distY);
if (distance > 20) {
var moveSpeed = 8;
player.x += distX / distance * moveSpeed;
player.y += distY / distance * moveSpeed;
}
player.x = Math.max(50, Math.min(1998, player.x));
player.y = Math.max(100, Math.min(2650, player.y));
if (shootCooldown <= 0) {
var newBullet = new PlayerBullet();
newBullet.x = player.x;
newBullet.y = player.y - 50;
newBullet.lastY = newBullet.y;
playerBullets.push(newBullet);
game.addChild(newBullet);
LK.getSound('shoot').play();
shootCooldown = 15;
}
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
bullet.update();
if (bullet.y < -50) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
LK.setScore(LK.getScore() + 10);
scoreText.setText('Score: ' + LK.getScore());
LK.effects.flashObject(enemy, 0xffff00, 200);
LK.getSound('explosion').play();
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
break;
}
}
}
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
enemy.update();
var currentIntersectingPlayer = enemy.intersects(player);
if (!enemy.lastIntersectingPlayer && currentIntersectingPlayer) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
gameActive = false;
return;
}
enemy.lastIntersectingPlayer = currentIntersectingPlayer;
if (enemy.y > 2732) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
if (enemy.shootTimer >= enemy.shootInterval) {
var newEnemyBullet = new EnemyBullet();
newEnemyBullet.x = enemy.x;
newEnemyBullet.y = enemy.y + 30;
newEnemyBullet.lastY = newEnemyBullet.y;
newEnemyBullet.lastIntersectingPlayer = false;
enemyBullets.push(newEnemyBullet);
game.addChild(newEnemyBullet);
enemy.shootTimer = 0;
}
}
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
bullet.update();
if (bullet.y > 2732) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
var currentIntersectingPlayer = bullet.intersects(player);
if (!bullet.lastIntersectingPlayer && currentIntersectingPlayer) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
gameActive = false;
return;
}
bullet.lastIntersectingPlayer = currentIntersectingPlayer;
}
if (enemies.length === 0 && waveTimer > 120) {
waveCount++;
waveTimer = 0;
waveText.setText('Wave: ' + waveCount);
spawnEnemyWave();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,251 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.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 = self.y;
+ self.lastIntersectingPlayer = false;
+ self.update = function () {
+ self.lastY = self.y;
+ self.y += self.speed;
+ };
+ return self;
+});
+var EnemyShip = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemyShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.shootTimer = 0;
+ self.shootInterval = 60;
+ self.waveNumber = 1;
+ self.lastY = self.y;
+ self.lastIntersectingPlayer = false;
+ self.update = function () {
+ self.lastY = self.y;
+ 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 = self.y;
+ self.update = function () {
+ self.lastY = self.y;
+ 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 = 15;
+ self.x = 1024;
+ self.y = 2500;
+ self.moveLeft = function () {
+ if (self.x > 50) {
+ self.x -= self.speed;
+ }
+ };
+ self.moveRight = function () {
+ if (self.x < 1998) {
+ self.x += self.speed;
+ }
+ };
+ self.moveUp = function () {
+ if (self.y > 100) {
+ self.y -= self.speed;
+ }
+ };
+ self.moveDown = function () {
+ if (self.y < 2650) {
+ self.y += self.speed;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000814
+});
+
+/****
+* Game Code
+****/
+var player = game.addChild(new PlayerShip());
+var playerBullets = [];
+var enemies = [];
+var enemyBullets = [];
+var waveCount = 1;
+var waveTimer = 0;
+var shootCooldown = 0;
+var gameActive = true;
+var touchStartX = 0;
+var touchStartY = 0;
+var currentTouchX = 1024;
+var currentTouchY = 2500;
+var scoreText = new Text2('Score: 0', {
+ size: 100,
+ fill: '#ffffff'
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var waveText = new Text2('Wave: 1', {
+ size: 80,
+ fill: '#ffff00'
+});
+waveText.anchor.set(0.5, 0);
+waveText.x = 500;
+LK.gui.top.addChild(waveText);
+function spawnEnemyWave() {
+ var enemyCount = 3 + Math.floor(waveCount / 2);
+ var spacing = 1800 / enemyCount;
+ for (var i = 0; i < enemyCount; i++) {
+ var newEnemy = new EnemyShip();
+ newEnemy.x = 150 + i * spacing + Math.random() * 100;
+ newEnemy.y = -100;
+ newEnemy.speed = 1 + waveCount * 0.5;
+ newEnemy.shootInterval = Math.max(40, 80 - waveCount * 5);
+ newEnemy.waveNumber = waveCount;
+ enemies.push(newEnemy);
+ game.addChild(newEnemy);
+ }
+}
+function handleTouchMove(x, y, obj) {
+ currentTouchX = x;
+ currentTouchY = y;
+}
+game.move = handleTouchMove;
+game.down = function (x, y, obj) {
+ touchStartX = x;
+ touchStartY = y;
+};
+game.up = function (x, y, obj) {
+ touchStartX = 0;
+ touchStartY = 0;
+};
+spawnEnemyWave();
+LK.playMusic('bgmusic');
+game.update = function () {
+ if (!gameActive) return;
+ shootCooldown--;
+ waveTimer++;
+ var distX = currentTouchX - player.x;
+ var distY = currentTouchY - player.y;
+ var distance = Math.sqrt(distX * distX + distY * distY);
+ if (distance > 20) {
+ var moveSpeed = 8;
+ player.x += distX / distance * moveSpeed;
+ player.y += distY / distance * moveSpeed;
+ }
+ player.x = Math.max(50, Math.min(1998, player.x));
+ player.y = Math.max(100, Math.min(2650, player.y));
+ if (shootCooldown <= 0) {
+ var newBullet = new PlayerBullet();
+ newBullet.x = player.x;
+ newBullet.y = player.y - 50;
+ newBullet.lastY = newBullet.y;
+ playerBullets.push(newBullet);
+ game.addChild(newBullet);
+ LK.getSound('shoot').play();
+ shootCooldown = 15;
+ }
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var bullet = playerBullets[i];
+ bullet.update();
+ if (bullet.y < -50) {
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ continue;
+ }
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var enemy = enemies[j];
+ if (bullet.intersects(enemy)) {
+ LK.setScore(LK.getScore() + 10);
+ scoreText.setText('Score: ' + LK.getScore());
+ LK.effects.flashObject(enemy, 0xffff00, 200);
+ LK.getSound('explosion').play();
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ enemy.destroy();
+ enemies.splice(j, 1);
+ break;
+ }
+ }
+ }
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ enemy.update();
+ var currentIntersectingPlayer = enemy.intersects(player);
+ if (!enemy.lastIntersectingPlayer && currentIntersectingPlayer) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ gameActive = false;
+ return;
+ }
+ enemy.lastIntersectingPlayer = currentIntersectingPlayer;
+ if (enemy.y > 2732) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ continue;
+ }
+ if (enemy.shootTimer >= enemy.shootInterval) {
+ var newEnemyBullet = new EnemyBullet();
+ newEnemyBullet.x = enemy.x;
+ newEnemyBullet.y = enemy.y + 30;
+ newEnemyBullet.lastY = newEnemyBullet.y;
+ newEnemyBullet.lastIntersectingPlayer = false;
+ enemyBullets.push(newEnemyBullet);
+ game.addChild(newEnemyBullet);
+ enemy.shootTimer = 0;
+ }
+ }
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var bullet = enemyBullets[i];
+ bullet.update();
+ if (bullet.y > 2732) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ var currentIntersectingPlayer = bullet.intersects(player);
+ if (!bullet.lastIntersectingPlayer && currentIntersectingPlayer) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ gameActive = false;
+ return;
+ }
+ bullet.lastIntersectingPlayer = currentIntersectingPlayer;
+ }
+ if (enemies.length === 0 && waveTimer > 120) {
+ waveCount++;
+ waveTimer = 0;
+ waveText.setText('Wave: ' + waveCount);
+ spawnEnemyWave();
+ }
+};
\ No newline at end of file