User prompt
Süper meteor yap. Bu meteor %1 şansla oluşsun ve hızlı meteor ile aynı hızda olsun
User prompt
score 25’i geçince hızlı meteor oluşsun
User prompt
score arttıkça zorluk artmasını kaldır
User prompt
uydunun assetini satellite yap
User prompt
hızlı meteoru azıcık yavaşlat
User prompt
hızlı meteorun assetini FastMeteorite Yap
User prompt
%5 şansla doğan çok hızlı bir meteor yap
User prompt
uyduyu çok az yukarı taşı
User prompt
uydunun mermisi meteoyu yok etsin
User prompt
uyduyu parmak veya mouse ile sürükleyerek belli bir yatayda hareket ettirelim
User prompt
Uydu ateş etsin
User prompt
1- uydu sabit dursun
User prompt
bir uydu ekle ondan meteor yok edelim
User prompt
meteorlar tıklanınca yok olsun
User prompt
1- meteorları yavaşlat. 2- meteora bir hitbox ekle
User prompt
mermiyi kaldır
User prompt
turreti kaldır tıklayarak meteorları yok edelim
User prompt
turreti yönlendirmek için ok yönlü butonlar yap
User prompt
turreti döndürürken ekranın soluna tıklayınca sola dönsün sağa tıklanınca sağa dönsün
User prompt
butonları turretin altına getir
User prompt
butonları ekranın altının ortaına getir
User prompt
Butonları ortala ve üzerine yönünü yaz
User prompt
meteorları azalt
User prompt
dünya ve turret assetlerini yukarı doğru taşı ve yön butonlarını belirgin yap
User prompt
turreti yönlendirmek için butonlar ekle
/****
* Classes
****/
// Meteor class: Falling enemy
var Meteor = Container.expand(function () {
var self = Container.call(this);
var meteor = self.attachAsset('meteor', {
anchorX: 0.5,
anchorY: 0.5
});
// Add a hitbox property (circle for simplicity)
self.hitbox = {
x: 0,
y: 0,
radius: meteor.width * 0.38 // slightly smaller than graphic for fairness
};
// Randomize speed and rotation
self.speed = 12 + Math.random() * meteorSpeedBoost;
self.rotationSpeed = (Math.random() - 0.5) * 0.08;
// For intersection tracking
self.lastIntersecting = false;
self.update = function () {
self.y += self.speed * 0.4; // slowed down to 40% of original speed
self.rotation += self.rotationSpeed;
// Update hitbox position
self.hitbox.x = self.x;
self.hitbox.y = self.y;
};
return self;
});
// Projectile class: Fired by satellite
var Projectile = Container.expand(function () {
var self = Container.call(this);
var proj = self.attachAsset('projectile', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -38; // Fast upward
self.lastY = undefined;
self.update = function () {
if (self.lastY === undefined) self.lastY = self.y;
self.y += self.speed;
};
return self;
});
// Satellite class: Orbits above earth, destroys meteors on tap
var Satellite = Container.expand(function () {
var self = Container.call(this);
// Use the 'satellite' asset for the satellite
var sat = self.attachAsset('satellite', {
anchorX: 0.5,
anchorY: 0.5
});
// Satellite hitbox (circle)
self.hitbox = {
x: 0,
y: 0,
radius: sat.width * 0.35
};
// Orbit parameters
self.orbitRadius = 600;
self.orbitCenterX = 2048 / 2;
self.orbitCenterY = 2732 - 200;
self.orbitAngle = Math.random() * Math.PI * 2;
self.orbitSpeed = 0.012 + Math.random() * 0.01;
self.update = function () {
self.x = self.orbitCenterX;
self.y = self.orbitCenterY;
self.hitbox.x = self.x;
self.hitbox.y = self.y;
};
return self;
});
// SuperMeteorite class: Rare, fast meteor
var SuperMeteorite = Container.expand(function () {
var self = Container.call(this);
var superMeteor = self.attachAsset('FastMeteorite', {
anchorX: 0.5,
anchorY: 0.5
});
// Hitbox similar to fast meteor
self.hitbox = {
x: 0,
y: 0,
radius: superMeteor.width * 0.38
};
// Same speed as fast meteor
self.speed = 48 + Math.random() * 8;
self.rotationSpeed = (Math.random() - 0.5) * 0.08;
self.lastIntersecting = false;
self.update = function () {
self.y += self.speed * 0.4;
self.rotation += self.rotationSpeed;
self.hitbox.x = self.x;
self.hitbox.y = self.y;
};
return self;
});
/****
* Initialize Game
****/
// Turret class: Player's cannon at the bottom
var game = new LK.Game({
backgroundColor: 0x0a2233
});
/****
* Game Code
****/
// Game variables
// Turret: Defense cannon at the bottom
// Projectile: Player's bullet
// Meteor: Falling enemy
// Earth: Ground at the bottom
// Explosion effect (for future use)
// Sound effects
var meteors = [];
var projectiles = [];
var satelliteFireTimer = 0;
var satelliteFireInterval = 30; // frames between shots
var earth;
var satellite;
var scoreTxt;
var livesTxt;
var lives = 5;
var score = 0;
var meteorSpawnInterval = 60; // frames
var meteorSpeedBoost = 0; // increases as game progresses
var meteorTimer = 0;
earth = LK.getAsset('earth', {
anchorX: 0.5,
anchorY: 1,
x: 2048 / 2,
y: 2732
});
game.addChild(earth);
// Add satellite
satellite = new Satellite();
satellite.orbitCenterX = 2048 / 2;
satellite.orbitCenterY = 2732 - 350; // moved satellite higher above earth
satellite.orbitRadius = 600;
game.addChild(satellite);
// Score text (top center)
scoreTxt = new Text2('Score: 0', {
size: 100,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Lives text (top right, avoid top left 100x100)
livesTxt = new Text2('Lives: 5', {
size: 80,
fill: 0xFFB300
});
livesTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(livesTxt);
// Dragging logic for satellite
var draggingSatellite = false;
var dragOffsetX = 0;
game.move = function (x, y, obj) {
// If currently dragging satellite, update its X position only
if (draggingSatellite) {
// Clamp satellite X to stay within game bounds (avoid going off screen)
var minX = 120;
var maxX = 2048 - 120;
var newX = x - dragOffsetX;
if (newX < minX) newX = minX;
if (newX > maxX) newX = maxX;
satellite.x = newX;
satellite.orbitCenterX = newX; // keep its logical center in sync
return;
}
// First, check if satellite is tapped to start dragging
var dxSat = x - satellite.x;
var dySat = y - satellite.y;
var distSat = Math.sqrt(dxSat * dxSat + dySat * dySat);
if (distSat <= satellite.hitbox.radius) {
// Start dragging
draggingSatellite = true;
dragOffsetX = x - satellite.x;
return;
}
// Check if a meteor is tapped
for (var i = meteors.length - 1; i >= 0; i--) {
var mtr = meteors[i];
// Calculate distance from tap to meteor center
var dx = x - mtr.x;
var dy = y - mtr.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist <= mtr.hitbox.radius) {
// Destroy meteor
mtr.destroy();
meteors.splice(i, 1);
score += 1;
scoreTxt.setText('Score: ' + score);
// Optional: add explosion effect here if desired
break; // Only destroy one meteor per tap
}
;
// Update projectiles and remove if off screen
for (var p = projectiles.length - 1; p >= 0; p--) {
var proj = projectiles[p];
proj.update();
if (proj.y < -100) {
proj.destroy();
projectiles.splice(p, 1);
}
}
}
;
};
// Release drag on up
game.up = function (x, y, obj) {
draggingSatellite = false;
};
game.up = function (x, y, obj) {};
// Main update loop
game.update = function () {
// Spawn meteors
meteorTimer++;
var spawnRate = meteorSpawnInterval;
if (meteorTimer >= spawnRate) {
meteorTimer = 0;
// 1% chance for super meteor, only if score > 25
if (score > 25 && Math.random() < 0.01) {
var m = new SuperMeteorite();
m.x = 120 + Math.random() * (2048 - 240);
m.y = -80;
meteors.push(m);
game.addChild(m);
} else {
var m = new Meteor();
// 5% chance for a very fast meteor, but only if score > 25
if (score > 25 && Math.random() < 0.05) {
m.speed = 48 + Math.random() * 8; // slightly slower than before
// Replace meteor asset with FastMeteorite
if (m.children && m.children.length > 0) {
var oldMeteor = m.children[0];
m.removeChild(oldMeteor);
}
var fastMeteor = m.attachAsset('FastMeteorite', {
anchorX: 0.5,
anchorY: 0.5
});
// Update hitbox to match new asset size
m.hitbox.radius = fastMeteor.width * 0.38;
}
m.x = 120 + Math.random() * (2048 - 240);
m.y = -80;
meteors.push(m);
game.addChild(m);
}
}
// Remove difficulty scaling
meteorSpeedBoost = 0;
// Update meteors
for (var k = meteors.length - 1; k >= 0; k--) {
var mtr = meteors[k];
mtr.update();
// If meteor hits earth
if (mtr.y + 60 >= earth.y - earth.height / 2) {
LK.getSound('lose').play();
mtr.destroy();
meteors.splice(k, 1);
lives -= 1;
livesTxt.setText('Lives: ' + lives);
// Flash screen
LK.effects.flashScreen(0xff0000, 400);
if (lives <= 0) {
LK.showGameOver();
return;
}
continue;
}
// Check collision with projectiles
for (var j = projectiles.length - 1; j >= 0; j--) {
var proj = projectiles[j];
// Simple circle-rectangle collision: check distance from projectile center to meteor center
var dx = proj.x - mtr.x;
var dy = proj.y - mtr.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist <= mtr.hitbox.radius + 40) {
// 40 is half projectile height, rough
// Destroy both
mtr.destroy();
meteors.splice(k, 1);
proj.destroy();
projectiles.splice(j, 1);
score += 1;
scoreTxt.setText('Score: ' + score);
break; // Only one projectile can hit a meteor at a time
}
}
}
// Update satellite
if (satellite && satellite.update) {
satellite.update();
// Satellite fires projectiles at interval
satelliteFireTimer++;
if (satelliteFireTimer >= satelliteFireInterval) {
satelliteFireTimer = 0;
var proj = new Projectile();
proj.x = satellite.x;
proj.y = satellite.y - 60; // fire from above satellite
projectiles.push(proj);
game.addChild(proj);
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -70,8 +70,33 @@
self.hitbox.y = self.y;
};
return self;
});
+// SuperMeteorite class: Rare, fast meteor
+var SuperMeteorite = Container.expand(function () {
+ var self = Container.call(this);
+ var superMeteor = self.attachAsset('FastMeteorite', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Hitbox similar to fast meteor
+ self.hitbox = {
+ x: 0,
+ y: 0,
+ radius: superMeteor.width * 0.38
+ };
+ // Same speed as fast meteor
+ self.speed = 48 + Math.random() * 8;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.08;
+ self.lastIntersecting = false;
+ self.update = function () {
+ self.y += self.speed * 0.4;
+ self.rotation += self.rotationSpeed;
+ self.hitbox.x = self.x;
+ self.hitbox.y = self.y;
+ };
+ return self;
+});
/****
* Initialize Game
****/
@@ -196,28 +221,37 @@
meteorTimer++;
var spawnRate = meteorSpawnInterval;
if (meteorTimer >= spawnRate) {
meteorTimer = 0;
- var m = new Meteor();
- // 5% chance for a very fast meteor, but only if score > 25
- if (score > 25 && Math.random() < 0.05) {
- m.speed = 48 + Math.random() * 8; // slightly slower than before
- // Replace meteor asset with FastMeteorite
- if (m.children && m.children.length > 0) {
- var oldMeteor = m.children[0];
- m.removeChild(oldMeteor);
+ // 1% chance for super meteor, only if score > 25
+ if (score > 25 && Math.random() < 0.01) {
+ var m = new SuperMeteorite();
+ m.x = 120 + Math.random() * (2048 - 240);
+ m.y = -80;
+ meteors.push(m);
+ game.addChild(m);
+ } else {
+ var m = new Meteor();
+ // 5% chance for a very fast meteor, but only if score > 25
+ if (score > 25 && Math.random() < 0.05) {
+ m.speed = 48 + Math.random() * 8; // slightly slower than before
+ // Replace meteor asset with FastMeteorite
+ if (m.children && m.children.length > 0) {
+ var oldMeteor = m.children[0];
+ m.removeChild(oldMeteor);
+ }
+ var fastMeteor = m.attachAsset('FastMeteorite', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Update hitbox to match new asset size
+ m.hitbox.radius = fastMeteor.width * 0.38;
}
- var fastMeteor = m.attachAsset('FastMeteorite', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- // Update hitbox to match new asset size
- m.hitbox.radius = fastMeteor.width * 0.38;
+ m.x = 120 + Math.random() * (2048 - 240);
+ m.y = -80;
+ meteors.push(m);
+ game.addChild(m);
}
- m.x = 120 + Math.random() * (2048 - 240);
- m.y = -80;
- meteors.push(m);
- game.addChild(m);
}
// Remove difficulty scaling
meteorSpeedBoost = 0;
// Update meteors
meteor . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
dünya yüzeyi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
blue meteor. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
green meteorite. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
spaceship. In-Game asset. 2d. High contrast. No shadows
spaceship debris. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
laser projectile. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
space with only stars. In-Game asset. real. High contrast. with shadows. high resolution
dünyanın bir bölümünün yüzeyi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
alien. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
golden dolar symbol. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
yellow meteor. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
game heart. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
shield. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
red meteor with x2 write. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat