User prompt
Oyunu dahada iyileştir ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
Tekrar dene ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Galaxy Defender: Space Shooter
Initial prompt
Kanka bana space shoter Galaxy attack gibi bir oyun yap
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
};
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.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
});
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.type = 'speed'; // speed, fireRate, or coins
self.update = function () {
self.y += self.speed;
self.rotation += 0.1;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
var player = game.addChild(new PlayerShip());
player.x = 1024;
player.y = 2600;
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(player, {
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.easeInOut
});
}
});
var playerBullets = [];
var enemies = [];
var bulletTimer = 0;
var enemySpawnTimer = 0;
var enemySpawnRate = 120;
var dragNode = null;
var upgradeLevel = storage.upgradeLevel || 1;
var coins = storage.coins || 0;
var powerUpTimer = 0;
var powerUps = [];
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 50;
var highScore = storage.highScore || 0;
var highScoreTxt = new Text2('High: ' + highScore, {
size: 80,
fill: 0xFFFF00
});
highScoreTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(highScoreTxt);
highScoreTxt.x = -20;
highScoreTxt.y = 50;
function handleMove(x, y, obj) {
if (dragNode) {
var targetX = x;
if (targetX < 60) targetX = 60;
if (targetX > 1988) targetX = 1988;
tween.stop(dragNode, {
x: true
});
tween(dragNode, {
x: targetX
}, {
duration: 150,
easing: tween.easeOut
});
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = player;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
bulletTimer++;
enemySpawnTimer++;
powerUpTimer++;
// Spawn player bullets with upgrade-based fire rate
var fireRate = Math.max(8, 15 - upgradeLevel * 2);
if (bulletTimer >= fireRate) {
var newBullet = new PlayerBullet();
newBullet.x = player.x;
newBullet.y = player.y - 40;
newBullet.lastY = newBullet.y;
playerBullets.push(newBullet);
game.addChild(newBullet);
LK.getSound('shoot').play();
bulletTimer = 0;
}
// Spawn power-ups occasionally
if (powerUpTimer >= 600) {
var newPowerUp = new PowerUp();
newPowerUp.x = Math.random() * 1800 + 124;
newPowerUp.y = -30;
newPowerUp.lastY = newPowerUp.y;
var powerUpTypes = ['speed', 'fireRate', 'coins'];
newPowerUp.type = powerUpTypes[Math.floor(Math.random() * powerUpTypes.length)];
if (newPowerUp.type === 'coins') {
tween(newPowerUp, {
tint: 0xffd700
}, {
duration: 0
});
} else if (newPowerUp.type === 'fireRate') {
tween(newPowerUp, {
tint: 0xff6600
}, {
duration: 0
});
}
powerUps.push(newPowerUp);
game.addChild(newPowerUp);
powerUpTimer = 0;
}
// Spawn enemies
if (enemySpawnTimer >= enemySpawnRate) {
var newEnemy = new EnemyShip();
newEnemy.x = Math.random() * 1800 + 124;
newEnemy.y = -30;
newEnemy.lastY = newEnemy.y;
newEnemy.lastIntersectingPlayer = false;
newEnemy.scaleX = 0.5;
newEnemy.scaleY = 0.5;
newEnemy.alpha = 0.7;
tween(newEnemy, {
scaleX: 1,
scaleY: 1,
alpha: 1
}, {
duration: 400,
easing: tween.easeOut
});
enemies.push(newEnemy);
game.addChild(newEnemy);
enemySpawnTimer = 0;
if (enemySpawnRate > 30) {
enemySpawnRate -= 1;
}
}
// Update and check power-ups
for (var p = powerUps.length - 1; p >= 0; p--) {
var powerUp = powerUps[p];
if (powerUp.lastY === undefined) powerUp.lastY = powerUp.y;
// Remove power-ups that go off screen
if (powerUp.lastY <= 2800 && powerUp.y > 2800) {
powerUp.destroy();
powerUps.splice(p, 1);
continue;
}
// Check power-up collection
if (powerUp.intersects(player)) {
LK.getSound('powerup').play();
if (powerUp.type === 'coins') {
coins += 5;
storage.coins = coins;
} else if (powerUp.type === 'fireRate' && upgradeLevel < 5) {
upgradeLevel++;
storage.upgradeLevel = upgradeLevel;
} else if (powerUp.type === 'speed') {
tween(player, {
tint: 0x00ffff
}, {
duration: 200,
onFinish: function onFinish() {
tween(player, {
tint: 0xffffff
}, {
duration: 200
});
}
});
}
tween(powerUp, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
powerUp.destroy();
}
});
powerUps.splice(p, 1);
continue;
}
powerUp.lastY = powerUp.y;
}
// Update and check player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY >= -10 && bullet.y < -10) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check bullet-enemy collisions
var hitEnemy = false;
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
var points = 10 + upgradeLevel * 5;
LK.setScore(LK.getScore() + points);
scoreTxt.setText(LK.getScore());
// Update high score
if (LK.getScore() > highScore) {
highScore = LK.getScore();
storage.highScore = highScore;
highScoreTxt.setText('High: ' + highScore);
tween(highScoreTxt, {
tint: 0x00ff00
}, {
duration: 300,
onFinish: function onFinish() {
tween(highScoreTxt, {
tint: 0xffff00
}, {
duration: 300
});
}
});
}
LK.getSound('explosion').play();
LK.effects.flashObject(enemy, 0xffffff, 200);
tween(enemy, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
enemy.destroy();
}
});
bullet.destroy();
playerBullets.splice(i, 1);
enemies.splice(j, 1);
hitEnemy = true;
break;
}
}
if (hitEnemy) continue;
bullet.lastY = bullet.y;
}
// Update and check enemies
for (var k = enemies.length - 1; k >= 0; k--) {
var enemy = enemies[k];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
if (enemy.lastIntersectingPlayer === undefined) enemy.lastIntersectingPlayer = false;
// Remove enemies that go off screen
if (enemy.lastY <= 2800 && enemy.y > 2800) {
enemy.destroy();
enemies.splice(k, 1);
continue;
}
// Check enemy-player collision
var currentIntersecting = enemy.intersects(player);
if (!enemy.lastIntersectingPlayer && currentIntersecting) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
enemy.lastY = enemy.y;
enemy.lastIntersectingPlayer = currentIntersecting;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,8 +1,9 @@
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
@@ -37,8 +38,22 @@
anchorY: 0.5
});
return self;
});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerUpGraphics = self.attachAsset('powerUp', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.type = 'speed'; // speed, fireRate, or coins
+ self.update = function () {
+ self.y += self.speed;
+ self.rotation += 0.1;
+ };
+ return self;
+});
/****
* Initialize Game
****/
@@ -73,15 +88,28 @@
var bulletTimer = 0;
var enemySpawnTimer = 0;
var enemySpawnRate = 120;
var dragNode = null;
+var upgradeLevel = storage.upgradeLevel || 1;
+var coins = storage.coins || 0;
+var powerUpTimer = 0;
+var powerUps = [];
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 50;
+var highScore = storage.highScore || 0;
+var highScoreTxt = new Text2('High: ' + highScore, {
+ size: 80,
+ fill: 0xFFFF00
+});
+highScoreTxt.anchor.set(1, 0);
+LK.gui.topRight.addChild(highScoreTxt);
+highScoreTxt.x = -20;
+highScoreTxt.y = 50;
function handleMove(x, y, obj) {
if (dragNode) {
var targetX = x;
if (targetX < 60) targetX = 60;
@@ -107,10 +135,12 @@
};
game.update = function () {
bulletTimer++;
enemySpawnTimer++;
- // Spawn player bullets
- if (bulletTimer >= 15) {
+ powerUpTimer++;
+ // Spawn player bullets with upgrade-based fire rate
+ var fireRate = Math.max(8, 15 - upgradeLevel * 2);
+ if (bulletTimer >= fireRate) {
var newBullet = new PlayerBullet();
newBullet.x = player.x;
newBullet.y = player.y - 40;
newBullet.lastY = newBullet.y;
@@ -118,8 +148,33 @@
game.addChild(newBullet);
LK.getSound('shoot').play();
bulletTimer = 0;
}
+ // Spawn power-ups occasionally
+ if (powerUpTimer >= 600) {
+ var newPowerUp = new PowerUp();
+ newPowerUp.x = Math.random() * 1800 + 124;
+ newPowerUp.y = -30;
+ newPowerUp.lastY = newPowerUp.y;
+ var powerUpTypes = ['speed', 'fireRate', 'coins'];
+ newPowerUp.type = powerUpTypes[Math.floor(Math.random() * powerUpTypes.length)];
+ if (newPowerUp.type === 'coins') {
+ tween(newPowerUp, {
+ tint: 0xffd700
+ }, {
+ duration: 0
+ });
+ } else if (newPowerUp.type === 'fireRate') {
+ tween(newPowerUp, {
+ tint: 0xff6600
+ }, {
+ duration: 0
+ });
+ }
+ powerUps.push(newPowerUp);
+ game.addChild(newPowerUp);
+ powerUpTimer = 0;
+ }
// Spawn enemies
if (enemySpawnTimer >= enemySpawnRate) {
var newEnemy = new EnemyShip();
newEnemy.x = Math.random() * 1800 + 124;
@@ -143,8 +198,57 @@
if (enemySpawnRate > 30) {
enemySpawnRate -= 1;
}
}
+ // Update and check power-ups
+ for (var p = powerUps.length - 1; p >= 0; p--) {
+ var powerUp = powerUps[p];
+ if (powerUp.lastY === undefined) powerUp.lastY = powerUp.y;
+ // Remove power-ups that go off screen
+ if (powerUp.lastY <= 2800 && powerUp.y > 2800) {
+ powerUp.destroy();
+ powerUps.splice(p, 1);
+ continue;
+ }
+ // Check power-up collection
+ if (powerUp.intersects(player)) {
+ LK.getSound('powerup').play();
+ if (powerUp.type === 'coins') {
+ coins += 5;
+ storage.coins = coins;
+ } else if (powerUp.type === 'fireRate' && upgradeLevel < 5) {
+ upgradeLevel++;
+ storage.upgradeLevel = upgradeLevel;
+ } else if (powerUp.type === 'speed') {
+ tween(player, {
+ tint: 0x00ffff
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ tween(player, {
+ tint: 0xffffff
+ }, {
+ duration: 200
+ });
+ }
+ });
+ }
+ tween(powerUp, {
+ scaleX: 2,
+ scaleY: 2,
+ alpha: 0
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ powerUp.destroy();
+ }
+ });
+ powerUps.splice(p, 1);
+ continue;
+ }
+ powerUp.lastY = powerUp.y;
+ }
// Update and check player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
@@ -158,10 +262,29 @@
var hitEnemy = false;
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
- LK.setScore(LK.getScore() + 10);
+ var points = 10 + upgradeLevel * 5;
+ LK.setScore(LK.getScore() + points);
scoreTxt.setText(LK.getScore());
+ // Update high score
+ if (LK.getScore() > highScore) {
+ highScore = LK.getScore();
+ storage.highScore = highScore;
+ highScoreTxt.setText('High: ' + highScore);
+ tween(highScoreTxt, {
+ tint: 0x00ff00
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ tween(highScoreTxt, {
+ tint: 0xffff00
+ }, {
+ duration: 300
+ });
+ }
+ });
+ }
LK.getSound('explosion').play();
LK.effects.flashObject(enemy, 0xffffff, 200);
tween(enemy, {
scaleX: 2,
Modern App Store icon, high definition, square with rounded corners, for a game titled "Galaxy Defender: Space Shooter" and with the description "Classic space shooter where you defend against enemy waves by moving your ship and firing bullets upward.". No text on icon!
Uzay gemisi. In-Game asset. 2d. High contrast. No shadows
Daha gerçekçi bir güç olsun. In-Game asset. 2d. High contrast. No shadows