User prompt
en küçük engeller 200 px olsun, daha büyük engeller de rastgele gelsin
User prompt
width 200px yap
User prompt
width 120px olsun height 70px
User prompt
120 px olsun
User prompt
70 px olsun
User prompt
20 px olsun
User prompt
engeller 5 px daha uzun ola bilir
User prompt
engeller bazen büyük bazen küçük rastgele olsun
User prompt
engelle çarptığında rokete bir çarpma animasyonu ekle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
roket engelle çarptığında hemen yanmasın, yakıtından %10 kaybetsin
User prompt
best score komple kaldır
User prompt
game over olduğunda best score ekranda yazsın
User prompt
best score hala düzgün çalışmiyor hep 0
User prompt
best score hep 0 m gösteriyor
User prompt
best score ekranda kalmasını sağla
User prompt
engeller ve yakıtlar, ekranın ortasından belirmeye başlıyorlar, ekranın en üstünden yukarısdan gözüksünler
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'height')' in or related to this line: 'bestTxt.y = distanceTxt.height + fuelTxt.height + 30;' Line Number: 114
User prompt
best scrore ekranda kalmıyor, birde oyun yazıları ingizce olacak
User prompt
yakıt %20 artsın
User prompt
yakıt %10 artsın
User prompt
NAN% çıkıyor ekranda bunu düzelt
User prompt
yakıt artışı %50 doldursun, her zaman tam doldurmasın
User prompt
şimdi her 200 metrede, roket hızlansın, ve yakıt göstergesi, metre göstergesininin altında yer alsın
User prompt
roket ilerlemesi lazım, roket şuan sabit kalıyor, arka plan sabit kalıyor, yanı roketin yukarıya ucarmış gibi bir animasyon eklenem gerekir
User prompt
arka plan aşağıya doğru kayması gerek
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { best: 0 }); /**** * Classes ****/ // Fuel class var Fuel = Container.expand(function () { var self = Container.call(this); var fuelGfx = self.attachAsset('fuel', { anchorX: 0.5, anchorY: 0.5 }); self.width = fuelGfx.width; self.height = fuelGfx.height; self.update = function () { // Movement handled in game.update }; return self; }); // Obstacle class var Obstacle = Container.expand(function () { var self = Container.call(this); var obsGfx = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.width = obsGfx.width; self.height = obsGfx.height; self.update = function () { // Movement handled in game.update }; return self; }); // Rocket class var Rocket = Container.expand(function () { var self = Container.call(this); var rocketGfx = self.attachAsset('rocket', { anchorX: 0.5, anchorY: 0.5 }); self.width = rocketGfx.width; self.height = rocketGfx.height; self.fuel = 100; // percent self.alive = true; self.update = function () { // Nothing here, movement handled in game.update }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Explosion effect (for flash) // Obstacle // Fuel // Rocket (player) // --- Global variables --- // Background var bg = LK.getAsset('explosion', { // using 'explosion' as a placeholder for a big ellipse background anchorX: 0.5, anchorY: 0.5, scaleX: 20, scaleY: 20, x: 2048 / 2, y: 2732 / 2 }); game.addChild(bg); var bgScroll = 0; var rocket; var fuels = []; var obstacles = []; var dragStartX = null; var dragRocketStartX = null; var isDragging = false; var fuelTimer = 0; var obstacleTimer = 0; var distance = 0; var best = storage.best || 0; var fuelDepleteRate = 0.18; // per tick var rocketSpeed = 8; // px per tick (vertical) var fuelSpawnInterval = 90; // ticks var obstacleSpawnInterval = 110; // ticks var minX = 100, maxX = 2048 - 100; var minY = 200, maxY = 2732 - 200; var fuelAmount = 35; // how much fuel a fuel gives var fuelMax = 100; var gameStarted = false; // --- UI --- var distanceTxt = new Text2('0 m', { size: 90, fill: 0xFFFFFF }); distanceTxt.anchor.set(0.5, 0); LK.gui.top.addChild(distanceTxt); var bestTxt = new Text2('Best: 0 m', { size: 60, fill: 0xFFFF00 }); bestTxt.anchor.set(1, 0); LK.gui.topRight.addChild(bestTxt); // Fuel bar (simple text) var fuelTxt = new Text2('Yakıt: 100%', { size: 60, fill: 0x44DDEE }); fuelTxt.anchor.set(0, 0); LK.gui.top.addChild(fuelTxt); // --- Helper functions --- function resetGame() { // Remove old objects if (rocket) rocket.destroy(); for (var i = 0; i < fuels.length; ++i) fuels[i].destroy(); for (var i = 0; i < obstacles.length; ++i) obstacles[i].destroy(); fuels = []; obstacles = []; // Reset variables distance = 0; fuelTimer = 0; obstacleTimer = 0; // Create rocket rocket = new Rocket(); rocket.x = 2048 / 2; rocket.y = 2732 - 350; game.addChild(rocket); rocket.fuel = 100; rocket.alive = true; gameStarted = true; updateUI(); } function updateUI() { distanceTxt.setText(Math.floor(distance) + ' m'); bestTxt.setText('Best: ' + Math.floor(best) + ' m'); fuelTxt.setText('Yakıt: ' + Math.max(0, Math.floor(rocket ? rocket.fuel : 0)) + '%'); } // --- Input (drag to move rocket) --- game.down = function (x, y, obj) { if (!rocket || !rocket.alive) return; isDragging = true; dragStartX = x; dragRocketStartX = rocket.x; }; game.move = function (x, y, obj) { if (!rocket || !rocket.alive) return; if (isDragging) { var dx = x - dragStartX; rocket.x = Math.max(minX, Math.min(maxX, dragRocketStartX + dx)); } }; game.up = function (x, y, obj) { isDragging = false; }; // --- Main game loop --- game.update = function () { if (!rocket || !rocket.alive) return; // Move rocket up (rocket stays at same y, background moves down) var bgMove = rocketSpeed; // Scroll background bgScroll += bgMove; bg.y += bgMove; if (bg.y > 2732 + 1000) { // reset background position if it goes too far bg.y = -1000; } for (var i = 0; i < fuels.length; ++i) { fuels[i].y += bgMove; } for (var i = 0; i < obstacles.length; ++i) { obstacles[i].y += bgMove; } distance += rocketSpeed / 6; // scale to meters updateUI(); // Deplete fuel rocket.fuel -= fuelDepleteRate; if (rocket.fuel <= 0) { rocket.fuel = 0; rocket.alive = false; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } // Move fuels and check collision for (var i = fuels.length - 1; i >= 0; --i) { var f = fuels[i]; f.y -= rocketSpeed; // move up with rocket if (f.y < -100) { f.destroy(); fuels.splice(i, 1); continue; } if (rocket.intersects(f)) { rocket.fuel = Math.min(fuelMax, rocket.fuel + fuelAmount); f.destroy(); fuels.splice(i, 1); // Small flash effect LK.effects.flashObject(rocket, 0x44ddee, 300); updateUI(); } } // Move obstacles and check collision for (var i = obstacles.length - 1; i >= 0; --i) { var o = obstacles[i]; o.y -= rocketSpeed; // move up with rocket if (o.y < -100) { o.destroy(); obstacles.splice(i, 1); continue; } if (rocket.intersects(o)) { rocket.alive = false; LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } // Spawn fuel fuelTimer++; if (fuelTimer >= fuelSpawnInterval) { fuelTimer = 0; var f = new Fuel(); f.x = Math.floor(minX + Math.random() * (maxX - minX)); f.y = rocket.y - 900 - Math.random() * 400; game.addChild(f); fuels.push(f); } // Spawn obstacle obstacleTimer++; if (obstacleTimer >= obstacleSpawnInterval) { obstacleTimer = 0; var o = new Obstacle(); o.x = Math.floor(minX + Math.random() * (maxX - minX)); o.y = rocket.y - 700 - Math.random() * 600; game.addChild(o); obstacles.push(o); } }; // --- Game over / win handling --- LK.on('gameover', function () { gameStarted = false; if (distance > best) { best = distance; storage.best = Math.floor(best); } updateUI(); LK.setTimeout(function () { resetGame(); }, 1200); }); // --- Start game --- resetGame();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
best: 0
});
/****
* Classes
****/
// Fuel class
var Fuel = Container.expand(function () {
var self = Container.call(this);
var fuelGfx = self.attachAsset('fuel', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = fuelGfx.width;
self.height = fuelGfx.height;
self.update = function () {
// Movement handled in game.update
};
return self;
});
// Obstacle class
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obsGfx = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = obsGfx.width;
self.height = obsGfx.height;
self.update = function () {
// Movement handled in game.update
};
return self;
});
// Rocket class
var Rocket = Container.expand(function () {
var self = Container.call(this);
var rocketGfx = self.attachAsset('rocket', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = rocketGfx.width;
self.height = rocketGfx.height;
self.fuel = 100; // percent
self.alive = true;
self.update = function () {
// Nothing here, movement handled in game.update
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Explosion effect (for flash)
// Obstacle
// Fuel
// Rocket (player)
// --- Global variables ---
// Background
var bg = LK.getAsset('explosion', {
// using 'explosion' as a placeholder for a big ellipse background
anchorX: 0.5,
anchorY: 0.5,
scaleX: 20,
scaleY: 20,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(bg);
var bgScroll = 0;
var rocket;
var fuels = [];
var obstacles = [];
var dragStartX = null;
var dragRocketStartX = null;
var isDragging = false;
var fuelTimer = 0;
var obstacleTimer = 0;
var distance = 0;
var best = storage.best || 0;
var fuelDepleteRate = 0.18; // per tick
var rocketSpeed = 8; // px per tick (vertical)
var fuelSpawnInterval = 90; // ticks
var obstacleSpawnInterval = 110; // ticks
var minX = 100,
maxX = 2048 - 100;
var minY = 200,
maxY = 2732 - 200;
var fuelAmount = 35; // how much fuel a fuel gives
var fuelMax = 100;
var gameStarted = false;
// --- UI ---
var distanceTxt = new Text2('0 m', {
size: 90,
fill: 0xFFFFFF
});
distanceTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(distanceTxt);
var bestTxt = new Text2('Best: 0 m', {
size: 60,
fill: 0xFFFF00
});
bestTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(bestTxt);
// Fuel bar (simple text)
var fuelTxt = new Text2('Yakıt: 100%', {
size: 60,
fill: 0x44DDEE
});
fuelTxt.anchor.set(0, 0);
LK.gui.top.addChild(fuelTxt);
// --- Helper functions ---
function resetGame() {
// Remove old objects
if (rocket) rocket.destroy();
for (var i = 0; i < fuels.length; ++i) fuels[i].destroy();
for (var i = 0; i < obstacles.length; ++i) obstacles[i].destroy();
fuels = [];
obstacles = [];
// Reset variables
distance = 0;
fuelTimer = 0;
obstacleTimer = 0;
// Create rocket
rocket = new Rocket();
rocket.x = 2048 / 2;
rocket.y = 2732 - 350;
game.addChild(rocket);
rocket.fuel = 100;
rocket.alive = true;
gameStarted = true;
updateUI();
}
function updateUI() {
distanceTxt.setText(Math.floor(distance) + ' m');
bestTxt.setText('Best: ' + Math.floor(best) + ' m');
fuelTxt.setText('Yakıt: ' + Math.max(0, Math.floor(rocket ? rocket.fuel : 0)) + '%');
}
// --- Input (drag to move rocket) ---
game.down = function (x, y, obj) {
if (!rocket || !rocket.alive) return;
isDragging = true;
dragStartX = x;
dragRocketStartX = rocket.x;
};
game.move = function (x, y, obj) {
if (!rocket || !rocket.alive) return;
if (isDragging) {
var dx = x - dragStartX;
rocket.x = Math.max(minX, Math.min(maxX, dragRocketStartX + dx));
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
// --- Main game loop ---
game.update = function () {
if (!rocket || !rocket.alive) return;
// Move rocket up (rocket stays at same y, background moves down)
var bgMove = rocketSpeed;
// Scroll background
bgScroll += bgMove;
bg.y += bgMove;
if (bg.y > 2732 + 1000) {
// reset background position if it goes too far
bg.y = -1000;
}
for (var i = 0; i < fuels.length; ++i) {
fuels[i].y += bgMove;
}
for (var i = 0; i < obstacles.length; ++i) {
obstacles[i].y += bgMove;
}
distance += rocketSpeed / 6; // scale to meters
updateUI();
// Deplete fuel
rocket.fuel -= fuelDepleteRate;
if (rocket.fuel <= 0) {
rocket.fuel = 0;
rocket.alive = false;
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Move fuels and check collision
for (var i = fuels.length - 1; i >= 0; --i) {
var f = fuels[i];
f.y -= rocketSpeed; // move up with rocket
if (f.y < -100) {
f.destroy();
fuels.splice(i, 1);
continue;
}
if (rocket.intersects(f)) {
rocket.fuel = Math.min(fuelMax, rocket.fuel + fuelAmount);
f.destroy();
fuels.splice(i, 1);
// Small flash effect
LK.effects.flashObject(rocket, 0x44ddee, 300);
updateUI();
}
}
// Move obstacles and check collision
for (var i = obstacles.length - 1; i >= 0; --i) {
var o = obstacles[i];
o.y -= rocketSpeed; // move up with rocket
if (o.y < -100) {
o.destroy();
obstacles.splice(i, 1);
continue;
}
if (rocket.intersects(o)) {
rocket.alive = false;
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Spawn fuel
fuelTimer++;
if (fuelTimer >= fuelSpawnInterval) {
fuelTimer = 0;
var f = new Fuel();
f.x = Math.floor(minX + Math.random() * (maxX - minX));
f.y = rocket.y - 900 - Math.random() * 400;
game.addChild(f);
fuels.push(f);
}
// Spawn obstacle
obstacleTimer++;
if (obstacleTimer >= obstacleSpawnInterval) {
obstacleTimer = 0;
var o = new Obstacle();
o.x = Math.floor(minX + Math.random() * (maxX - minX));
o.y = rocket.y - 700 - Math.random() * 600;
game.addChild(o);
obstacles.push(o);
}
};
// --- Game over / win handling ---
LK.on('gameover', function () {
gameStarted = false;
if (distance > best) {
best = distance;
storage.best = Math.floor(best);
}
updateUI();
LK.setTimeout(function () {
resetGame();
}, 1200);
});
// --- Start game ---
resetGame();