/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Background = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.health = 1;
self.canShoot = false;
self.shootTimer = 0;
self.shootInterval = 120; // 2 seconds at 60fps
self.update = function () {
self.y += self.speed;
if (self.canShoot) {
self.shootTimer++;
if (self.shootTimer >= self.shootInterval) {
self.shootTimer = 0;
// Create enemy bullet
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
// Calculate direction to player
var dx = player.x - bullet.x;
var dy = player.y - bullet.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// Normalize direction and set velocity
bullet.velocityX = dx / distance * bullet.speed;
bullet.velocityY = dy / distance * bullet.speed;
enemyBullets.push(bullet);
game.addChild(bullet);
}
}
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.velocityX = 0;
self.velocityY = 8; // Default downward movement
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.shootCooldown = 0;
self.shootRate = 20; // Can shoot every 20 frames (50% reduction in firing rate)
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.shoot = function () {
if (self.shootCooldown <= 0) {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
// Apply upgrades if score is 50 or higher
if (LK.getScore() >= 50) {
bullet.speed = bullet.speed * 1.1; // 10% speed increase
bullet.scaleX = 1.025; // 2.5% size increase
bullet.scaleY = 1.025; // 2.5% size increase
}
playerBullets.push(bullet);
game.addChild(bullet);
self.shootCooldown = self.shootRate;
LK.getSound('shoot').play();
}
};
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 = -17;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
// Game variables
var player;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var enemySpawnTimer = 0;
var enemySpawnRate = 90; // Start spawning every 1.5 seconds
var dragNode = null;
var gameSpeed = 1;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 120; // Avoid top-left menu area
scoreTxt.y = 50;
LK.gui.addChild(scoreTxt);
// Create background
var background = new Background();
background.x = 0;
background.y = 0;
game.addChild(background);
// Create player
player = new Player();
player.x = 1024; // Center horizontally
player.y = 2400; // Near bottom of screen
game.addChild(player);
// Start background music
LK.playMusic('bgmusic');
// Game event handlers
game.move = function (x, y, obj) {
if (dragNode) {
dragNode.x = Math.max(40, Math.min(2008, x)); // Keep within screen bounds
dragNode.y = Math.max(40, Math.min(2692, y));
}
};
game.down = function (x, y, obj) {
dragNode = player;
game.move(x, y, obj);
// Auto-shoot when touching
player.shoot();
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update loop
game.update = function () {
// Update enemy spawn rate based on score
var score = LK.getScore();
if (score > 20) {
enemySpawnRate = 45; // Spawn every 0.75 seconds
}
if (score > 50) {
enemySpawnRate = 30; // Spawn every 0.5 seconds
}
// Spawn enemies
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnRate) {
enemySpawnTimer = 0;
var enemy = new Enemy();
enemy.x = Math.random() * 1800 + 124; // Random x position within screen
enemy.y = -50; // Start above screen
// Advanced enemies can shoot back
if (score > 10) {
enemy.canShoot = true;
enemy.shootInterval = 90 + Math.random() * 60; // Vary shoot timing
}
if (score > 30) {
enemy.speed = 4; // Faster enemies
}
enemies.push(enemy);
game.addChild(enemy);
}
// Auto-shoot for player when dragging
if (dragNode === player) {
player.shoot();
}
// Upgrade player bullets when score reaches 50
if (score >= 50 && !player.bulletsUpgraded) {
player.bulletsUpgraded = true;
// Apply upgrades to existing bullets
for (var upgrade_i = 0; upgrade_i < playerBullets.length; upgrade_i++) {
var upgradeBullet = playerBullets[upgrade_i];
upgradeBullet.speed = upgradeBullet.speed * 1.1; // 10% speed increase
upgradeBullet.scaleX = 1.025; // 2.5% size increase
upgradeBullet.scaleY = 1.025; // 2.5% size increase
}
}
// Check player bullet collisions with enemies
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
// Remove bullets that go off screen
if (bullet.y < -50) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Enemy hit
LK.getSound('enemyHit').play();
LK.effects.flashObject(enemy, 0xffffff, 200);
enemy.health--;
if (enemy.health <= 0) {
// Enemy destroyed
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('Score: ' + LK.getScore());
enemy.destroy();
enemies.splice(j, 1);
}
bullet.destroy();
playerBullets.splice(i, 1);
break;
}
}
}
// Check enemy bullet collisions with player
for (var k = enemyBullets.length - 1; k >= 0; k--) {
var enemyBullet = enemyBullets[k];
// Remove bullets that go off screen
if (enemyBullet.y > 2782) {
enemyBullet.destroy();
enemyBullets.splice(k, 1);
continue;
}
// Check collision with player
if (enemyBullet.intersects(player)) {
// Player hit - game over
LK.getSound('explosion').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Check enemy collisions with player
for (var m = enemies.length - 1; m >= 0; m--) {
var enemy = enemies[m];
// Remove enemies that go off screen
if (enemy.y > 2782) {
enemy.destroy();
enemies.splice(m, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
// Player hit by enemy ship - game over
LK.getSound('explosion').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Background = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.health = 1;
self.canShoot = false;
self.shootTimer = 0;
self.shootInterval = 120; // 2 seconds at 60fps
self.update = function () {
self.y += self.speed;
if (self.canShoot) {
self.shootTimer++;
if (self.shootTimer >= self.shootInterval) {
self.shootTimer = 0;
// Create enemy bullet
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
// Calculate direction to player
var dx = player.x - bullet.x;
var dy = player.y - bullet.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// Normalize direction and set velocity
bullet.velocityX = dx / distance * bullet.speed;
bullet.velocityY = dy / distance * bullet.speed;
enemyBullets.push(bullet);
game.addChild(bullet);
}
}
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.velocityX = 0;
self.velocityY = 8; // Default downward movement
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.shootCooldown = 0;
self.shootRate = 20; // Can shoot every 20 frames (50% reduction in firing rate)
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.shoot = function () {
if (self.shootCooldown <= 0) {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
// Apply upgrades if score is 50 or higher
if (LK.getScore() >= 50) {
bullet.speed = bullet.speed * 1.1; // 10% speed increase
bullet.scaleX = 1.025; // 2.5% size increase
bullet.scaleY = 1.025; // 2.5% size increase
}
playerBullets.push(bullet);
game.addChild(bullet);
self.shootCooldown = self.shootRate;
LK.getSound('shoot').play();
}
};
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 = -17;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
// Game variables
var player;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var enemySpawnTimer = 0;
var enemySpawnRate = 90; // Start spawning every 1.5 seconds
var dragNode = null;
var gameSpeed = 1;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 120; // Avoid top-left menu area
scoreTxt.y = 50;
LK.gui.addChild(scoreTxt);
// Create background
var background = new Background();
background.x = 0;
background.y = 0;
game.addChild(background);
// Create player
player = new Player();
player.x = 1024; // Center horizontally
player.y = 2400; // Near bottom of screen
game.addChild(player);
// Start background music
LK.playMusic('bgmusic');
// Game event handlers
game.move = function (x, y, obj) {
if (dragNode) {
dragNode.x = Math.max(40, Math.min(2008, x)); // Keep within screen bounds
dragNode.y = Math.max(40, Math.min(2692, y));
}
};
game.down = function (x, y, obj) {
dragNode = player;
game.move(x, y, obj);
// Auto-shoot when touching
player.shoot();
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update loop
game.update = function () {
// Update enemy spawn rate based on score
var score = LK.getScore();
if (score > 20) {
enemySpawnRate = 45; // Spawn every 0.75 seconds
}
if (score > 50) {
enemySpawnRate = 30; // Spawn every 0.5 seconds
}
// Spawn enemies
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnRate) {
enemySpawnTimer = 0;
var enemy = new Enemy();
enemy.x = Math.random() * 1800 + 124; // Random x position within screen
enemy.y = -50; // Start above screen
// Advanced enemies can shoot back
if (score > 10) {
enemy.canShoot = true;
enemy.shootInterval = 90 + Math.random() * 60; // Vary shoot timing
}
if (score > 30) {
enemy.speed = 4; // Faster enemies
}
enemies.push(enemy);
game.addChild(enemy);
}
// Auto-shoot for player when dragging
if (dragNode === player) {
player.shoot();
}
// Upgrade player bullets when score reaches 50
if (score >= 50 && !player.bulletsUpgraded) {
player.bulletsUpgraded = true;
// Apply upgrades to existing bullets
for (var upgrade_i = 0; upgrade_i < playerBullets.length; upgrade_i++) {
var upgradeBullet = playerBullets[upgrade_i];
upgradeBullet.speed = upgradeBullet.speed * 1.1; // 10% speed increase
upgradeBullet.scaleX = 1.025; // 2.5% size increase
upgradeBullet.scaleY = 1.025; // 2.5% size increase
}
}
// Check player bullet collisions with enemies
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
// Remove bullets that go off screen
if (bullet.y < -50) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Enemy hit
LK.getSound('enemyHit').play();
LK.effects.flashObject(enemy, 0xffffff, 200);
enemy.health--;
if (enemy.health <= 0) {
// Enemy destroyed
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('Score: ' + LK.getScore());
enemy.destroy();
enemies.splice(j, 1);
}
bullet.destroy();
playerBullets.splice(i, 1);
break;
}
}
}
// Check enemy bullet collisions with player
for (var k = enemyBullets.length - 1; k >= 0; k--) {
var enemyBullet = enemyBullets[k];
// Remove bullets that go off screen
if (enemyBullet.y > 2782) {
enemyBullet.destroy();
enemyBullets.splice(k, 1);
continue;
}
// Check collision with player
if (enemyBullet.intersects(player)) {
// Player hit - game over
LK.getSound('explosion').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Check enemy collisions with player
for (var m = enemies.length - 1; m >= 0; m--) {
var enemy = enemies[m];
// Remove enemies that go off screen
if (enemy.y > 2782) {
enemy.destroy();
enemies.splice(m, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
// Player hit by enemy ship - game over
LK.getSound('explosion').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
};
Üstten görünen 2D bir ejder sırt kısmı görünsün ve kuyruğu düz kanatları 75% açık olsun. In-Game asset. 2d. High contrast. No shadows
Üstten görünen bulutlu bir hava va aşağıda dağlar ve orta çağ kasabası. In-Game asset. 2d. High contrast. No shadows
Üstten görünümlü sırt kısmı tarafı ve kafası aşağı doğru oyuncuya bakan bir yaratık. In-Game asset. 2d. High contrast. No shadows
Alev topu alevi aşağı doru olan. In-Game asset. 2d. High contrast. No shadows
Karanlık morumsu ateşi yukarı doğru olan alev topu. In-Game asset. 2d. High contrast. No shadows