User prompt
geliştiriciler her 100’lük score aralığında rasgele bir scoreda birer tane gelsin
User prompt
geliştiriciler her 200de bir rasgele bir puanda bir tane gelsin
User prompt
geliştiriciler 0 ile 50 arasında 0 tane gelsin 50 ile 100 arasında 1 tane 100 ile 200 arasında 1 tane 200 ile 300 arasında 1 tane 300 ile 400 arasında 1 tane 400 ile 500 arasında 1 tane gelsin. rasgele konumlarda gelsin
User prompt
geliştiriciler 0 ile 50 arasında 0 tane gelsin
User prompt
geliştirici ilk 50’de gelmesin ondan sonrakilerde gelsin.
User prompt
geliştiriciler her 50’de bir tane gelsin ama 50’lik periodlarda rasgele bir aralıkta gelsin
User prompt
50 ile 100 arasında 1 tane 100 ile 150 arasında 2 tane 150 ile 200 arasında 2 tane 200den sonrada her 100de bir tane geliştirici gelsin
User prompt
Her 50 scoreda düşenlerin sayısı %10 artsın
User prompt
Süper meteorları %25 yavaşlat
User prompt
Hızlı meteorları %50 yavaşlat
User prompt
Please fix the bug: 'ReferenceError: Can't find variable: Alien' in or related to this line: 'var alien = new Alien();' Line Number: 376
User prompt
uzaylılar %30 ihtimalle oluşsun
User prompt
uzaylı ekle oluşmasın ama
User prompt
daha da
User prompt
Dünya assetini aşağı indir
User prompt
dünya assetinin yarısı görünsün
User prompt
oval yap
User prompt
dünyayı önceki gibi oval yap
User prompt
1 arka plan 50 x 50 boyutunda olsun
User prompt
Yukarıdan ve yandan 5e böl
User prompt
2ye böl
User prompt
50’ye böl
User prompt
5’e böl
User prompt
arka planı 10’a böl ve onlara background assetini koy
User prompt
make background asset background
/****
* Classes
****/
// Alien class: 30% chance to spawn, acts as a meteor
var Alien = Container.expand(function () {
var self = Container.call(this);
// Use the 'Alien' asset for alien
var alienAsset = self.attachAsset('Alien', {
anchorX: 0.5,
anchorY: 0.5
});
// Hitbox (circle)
self.hitbox = {
x: 0,
y: 0,
radius: alienAsset.width * 0.38
};
// Movement: falls straight down, similar to meteor
self.speed = 12 + 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;
});
// Developer class: Rare, shootable, grants fire rate boost
var Developer = Container.expand(function () {
var self = Container.call(this);
// Use the 'Gelistirici' asset for developer
var dev = self.attachAsset('Gelistirici', {
anchorX: 0.5,
anchorY: 0.5
});
// Hitbox (circle)
self.hitbox = {
x: 0,
y: 0,
radius: dev.width * 0.45
};
// Movement: falls straight down, similar to meteor
self.speed = 32 + 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;
});
// 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;
});
// SpaceDebris class: Space junk that acts as a meteor
var SpaceDebris = Container.expand(function () {
var self = Container.call(this);
// Use the 'debris' asset for space debris
var debris = self.attachAsset('debris', {
anchorX: 0.5,
anchorY: 0.5
});
// Hitbox (circle)
self.hitbox = {
x: 0,
y: 0,
radius: debris.width * 0.32
};
// Movement: falls straight down, similar to meteor
self.speed = 10 + Math.random() * 10;
self.rotationSpeed = (Math.random() - 0.5) * 0.1;
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;
});
// SuperMeteorite class: Rare, fast meteor
var SuperMeteorite = Container.expand(function () {
var self = Container.call(this);
var superMeteor = self.attachAsset('SuperMeteor', {
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;
// Track last score milestone for spawn rate increase
var lastScoreMilestone = 0;
// Add 25 background tiles (5 vertical x 5 horizontal) to fill the game area and behind all other elements
var backgroundTiles = [];
var bgTileRows = 5;
var bgTileCols = 5;
var bgTileWidth = Math.ceil(2048 / bgTileCols);
var bgTileHeight = Math.ceil(2732 / bgTileRows);
for (var row = 0; row < bgTileRows; row++) {
for (var col = 0; col < bgTileCols; col++) {
var bgTile = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: col * bgTileWidth,
y: row * bgTileHeight,
scaleX: bgTileWidth / 100,
scaleY: bgTileHeight / 100
});
game.addChild(bgTile);
backgroundTiles.push(bgTile);
}
}
earth = LK.getAsset('centerCircle', {
anchorX: 0.5,
anchorY: 1,
// anchor at bottom center
x: 2048 / 2,
y: 2732 + 200,
// move earth further down
scaleX: 7,
scaleY: 2.5
});
// Move earth down so more of it is below the screen, only a smaller top part is visible
earth.y = 2732 + 700; // move earth even further down, only a thin top slice is visible
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 () {
// Every 50 score, increase spawn rate by 10% (decrease interval by 10%)
if (score >= lastScoreMilestone + 50) {
lastScoreMilestone += 50;
meteorSpawnInterval = Math.max(8, Math.floor(meteorSpawnInterval * 0.9));
}
// Spawn meteors
meteorTimer++;
var spawnRate = meteorSpawnInterval;
if (meteorTimer >= spawnRate) {
meteorTimer = 0;
// Super meteor, fast meteor, and developer spawn logic with new probabilities after score > 100
var superMeteorChance = 0;
var fastMeteorChance = 0;
var developerChance = 0.005; // default 0.5%
// Track developer spawn for score intervals
if (typeof lastDeveloperScore === "undefined") {
lastDeveloperScore = 0;
}
if (typeof developerSpawned50_100 === "undefined") {
developerSpawned50_100 = false;
}
if (typeof developerSpawned100_150 === "undefined") {
developerSpawned100_150 = 0;
}
if (typeof developerSpawned150_200 === "undefined") {
developerSpawned150_200 = 0;
}
if (typeof lastDeveloperHundred === "undefined") {
lastDeveloperHundred = 200;
}
// Set spawn chances for other objects
if (score > 200) {
superMeteorChance = 0.075; // 7.5%
fastMeteorChance = 0.15; // 15%
developerChance = 0; // Developer does not spawn randomly, only by interval
} else if (score > 100) {
superMeteorChance = 0.05; // 5%
fastMeteorChance = 0.10; // 10%
developerChance = 0.035; // 3.5%
} else if (score > 50) {
superMeteorChance = 0.03; // 3%
fastMeteorChance = 0.05; // 5%
developerChance = 0.005; // 0.5%
} else if (score > 25) {
superMeteorChance = 0.01; // 1%
fastMeteorChance = 0.05; // 5%
developerChance = 0.005; // 0.5%
} else {
superMeteorChance = 0;
fastMeteorChance = 0;
developerChance = 0.005;
}
// Developer spawn logic: every 100-score interval, spawn one developer at a random score in that interval
if (typeof developerSpawned100 === "undefined") {
developerSpawned100 = {};
}
if (typeof developerSpawnTick100 === "undefined") {
developerSpawnTick100 = {};
}
var currentDevInterval100 = Math.floor(score / 100);
// Only spawn in intervals after the first 100
if (score >= 100) {
if (typeof developerSpawnTick100[currentDevInterval100] === "undefined") {
// Pick a random score in this 100-score interval
var minScore100 = currentDevInterval100 * 100;
var maxScore100 = minScore100 + 100;
developerSpawnTick100[currentDevInterval100] = minScore100 + Math.floor(Math.random() * 100);
developerSpawned100[currentDevInterval100] = false;
}
// If not yet spawned and at the tick, spawn developer
if (!developerSpawned100[currentDevInterval100] && score === developerSpawnTick100[currentDevInterval100]) {
var dev = new Developer();
dev.x = 120 + Math.random() * (2048 - 240);
dev.y = -80;
meteors.push(dev);
game.addChild(dev);
developerSpawned100[currentDevInterval100] = true;
}
}
// After 2000, no more developer spawns (optional, can be removed for infinite)
if (score >= 2000) {
// Do nothing, no more developer spawns
} else if (superMeteorChance > 0 && Math.random() < superMeteorChance) {
var m = new SuperMeteorite();
// Süper meteorları %25 yavaşlat
m.speed = m.speed * 0.75;
m.x = 120 + Math.random() * (2048 - 240);
m.y = -80;
meteors.push(m);
game.addChild(m);
} else {
// 10% chance to spawn space debris instead of meteor, but only if score <= 50 and score <= 100
if (score <= 50 && score <= 100 && Math.random() < 0.10) {
var debris = new SpaceDebris();
debris.x = 120 + Math.random() * (2048 - 240);
debris.y = -80;
meteors.push(debris);
game.addChild(debris);
} else if (Math.random() < 0.3) {
// 30% chance to spawn Alien
var alien = new Alien();
alien.x = 120 + Math.random() * (2048 - 240);
alien.y = -80;
meteors.push(alien);
game.addChild(alien);
} else {
var m = new Meteor();
// Fast meteor spawn
if (fastMeteorChance > 0 && Math.random() < fastMeteorChance) {
m.speed = 48 + Math.random() * 8;
// Hızlı meteorları %50 yavaşlat
m.speed = m.speed * 0.5;
// 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) {
// If it's a Developer, do nothing (just remove it)
if (mtr instanceof Developer) {
mtr.destroy();
meteors.splice(k, 1);
continue;
}
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
// If hit is on Developer, boost fire rate
if (mtr instanceof Developer) {
// Fire rate boost: halve the interval, but not less than 6 frames (10 shots/sec)
satelliteFireInterval = Math.max(6, Math.floor(satelliteFireInterval / 2));
} else if (mtr instanceof SpaceDebris) {
// If hit is on SpaceDebris, increase projectile size slightly
// Only increase if not already too large
if (proj.children && proj.children.length > 0) {
var projAsset = proj.children[0];
// Limit max scale to avoid infinite growth
if (projAsset.scaleX < 2.0 && projAsset.scaleY < 2.0) {
projAsset.scaleX += 0.15;
projAsset.scaleY += 0.15;
}
}
score += 1;
scoreTxt.setText('Score: ' + score);
} else {
score += 1;
scoreTxt.setText('Score: ' + score);
}
// Destroy both
mtr.destroy();
meteors.splice(k, 1);
proj.destroy();
projectiles.splice(j, 1);
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
@@ -374,33 +374,33 @@
superMeteorChance = 0;
fastMeteorChance = 0;
developerChance = 0.005;
}
- // Developer spawn logic: every 200-score interval, spawn one developer at a random score in that interval
- if (typeof developerSpawned200 === "undefined") {
- developerSpawned200 = {};
+ // Developer spawn logic: every 100-score interval, spawn one developer at a random score in that interval
+ if (typeof developerSpawned100 === "undefined") {
+ developerSpawned100 = {};
}
- if (typeof developerSpawnTick200 === "undefined") {
- developerSpawnTick200 = {};
+ if (typeof developerSpawnTick100 === "undefined") {
+ developerSpawnTick100 = {};
}
- var currentDevInterval = Math.floor(score / 200);
- if (score >= 200) {
- // Only spawn in intervals after the first 200
- if (typeof developerSpawnTick200[currentDevInterval] === "undefined") {
- // Pick a random score in this 200-score interval
- var minScore = currentDevInterval * 200;
- var maxScore = minScore + 200;
- developerSpawnTick200[currentDevInterval] = minScore + Math.floor(Math.random() * 200);
- developerSpawned200[currentDevInterval] = false;
+ var currentDevInterval100 = Math.floor(score / 100);
+ // Only spawn in intervals after the first 100
+ if (score >= 100) {
+ if (typeof developerSpawnTick100[currentDevInterval100] === "undefined") {
+ // Pick a random score in this 100-score interval
+ var minScore100 = currentDevInterval100 * 100;
+ var maxScore100 = minScore100 + 100;
+ developerSpawnTick100[currentDevInterval100] = minScore100 + Math.floor(Math.random() * 100);
+ developerSpawned100[currentDevInterval100] = false;
}
// If not yet spawned and at the tick, spawn developer
- if (!developerSpawned200[currentDevInterval] && score === developerSpawnTick200[currentDevInterval]) {
+ if (!developerSpawned100[currentDevInterval100] && score === developerSpawnTick100[currentDevInterval100]) {
var dev = new Developer();
dev.x = 120 + Math.random() * (2048 - 240);
dev.y = -80;
meteors.push(dev);
game.addChild(dev);
- developerSpawned200[currentDevInterval] = true;
+ developerSpawned100[currentDevInterval100] = true;
}
}
// After 2000, no more developer spawns (optional, can be removed for infinite)
if (score >= 2000) {
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