User prompt
Please fix the bug: 'TypeError: LK.effects.showMessage is not a function' in or related to this line: 'LK.effects.showMessage("Oyun bitti! Skor: " + score + " | Paralar: " + bonusCount + " | Level: " + (level === MAX_LEVEL ? "Sonsuz" : level), {' Line Number: 307
User prompt
Paralar ve puanları kaybettiğimizde de söylesin ve levelimizi
User prompt
Please fix the bug: 'ReferenceError: showMenu is not defined' in or related to this line: 'LK.setTimeout(showMenu, 1200);' Line Number: 308
User prompt
Please fix the bug: 'Timeout.tick error: menuTitle is not defined' in or related to this line: 'menuTitle.visible = false;' Line Number: 174
User prompt
Please fix the bug: 'setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 100
User prompt
Direk oyuna girelim
User prompt
Basla tuşuna basında oyuna girelim
User prompt
Oyunda basla tuşunu yazını azdık altına ekle
User prompt
Basla tuşu görünsün ekranda
User prompt
Okadar değil yazını altı şanti metre altı
User prompt
Başlama tuşunu alt a al
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'levelBtns[i].style.fill = "#ffeb3b";' Line Number: 128
User prompt
Ana menü ve level ekle son level sonsuz olsun
User prompt
Oyuna ekstra leveller ekle ve alanlar olsun oyun sonsuz ama hala
User prompt
Paraları ne kadar aldığımız yazzın
Code edit (1 edits merged)
Please save this source code
User prompt
Drift Racer: Sonsuz Yol
Initial prompt
Bana araba oyunu yap
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0
});
/****
* Classes
****/
// Bonus
var Bonus = Container.expand(function () {
var self = Container.call(this);
var bonusGfx = self.attachAsset('bonus', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = bonusGfx.width;
self.height = bonusGfx.height;
self.speed = 0;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Oyuncu arabası
var Car = Container.expand(function () {
var self = Container.call(this);
var carGfx = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
// Arabayı merkeze hizala
self.width = carGfx.width;
self.height = carGfx.height;
// Arabaya çarpma efekti
self.flash = function () {
tween(self, {
tint: 0xffe082
}, {
duration: 120,
onFinish: function onFinish() {
tween(self, {
tint: 0xffffff
}, {
duration: 120
});
}
});
};
return self;
});
// Engel
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.speed = 0; // Her engel için hız atanacak
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// Bonus için yeşil elips
// Engel için kırmızı kutu
// Yol için uzun gri kutu
// Araba (oyuncu) için kutu şeklinde bir asset
// Oyun alanı boyutları
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
// Yolun genişliği
var ROAD_WIDTH = 700;
// Arabayı ve yolun merkezini hesapla
var roadX = (GAME_WIDTH - ROAD_WIDTH) / 2;
// Yol grafiği
var road = LK.getAsset('road', {
anchorX: 0,
anchorY: 0,
x: roadX,
y: 0
});
game.addChild(road);
// Skor ve yüksek skor
var score = 0;
var highScore = storage.highScore || 0;
var bonusCount = 0; // Toplanan para sayısı
// Skor metni
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Bonus (para) sayısı metni
var bonusTxt = new Text2('Paralar: 0', {
size: 60,
fill: 0xFFE082
});
bonusTxt.anchor.set(0, 0);
LK.gui.top.addChild(bonusTxt);
// Yüksek skor metni
var highScoreTxt = new Text2('En Yüksek: ' + highScore, {
size: 60,
fill: "#fff"
});
highScoreTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(highScoreTxt);
// Araba oluştur
var car = new Car();
car.x = GAME_WIDTH / 2;
car.y = GAME_HEIGHT - 400;
game.addChild(car);
// Oyun objeleri
var obstacles = [];
var bonuses = [];
// Oyun hızı ve zorluk
var baseSpeed = 16;
var speed = baseSpeed;
var spawnInterval = 80; // Engel üretme aralığı (tick cinsinden)
var bonusInterval = 180; // Bonus üretme aralığı (tick cinsinden)
var ticksSinceLastObstacle = 0;
var ticksSinceLastBonus = 0;
// Sürükleme
var dragNode = null;
var dragOffsetX = 0;
// Oyun durumu
var isGameOver = false;
// Skoru güncelle
function updateScore(val) {
score = val;
scoreTxt.setText(score);
if (score > highScore) {
highScore = score;
storage.highScore = highScore;
highScoreTxt.setText('En Yüksek: ' + highScore);
}
}
// Arabayı sürükleme
function handleMove(x, y, obj) {
if (dragNode) {
// Arabayı sadece yolun içinde hareket ettir
var minX = roadX + dragNode.width / 2;
var maxX = roadX + ROAD_WIDTH - dragNode.width / 2;
var newX = x - dragOffsetX;
if (newX < minX) newX = minX;
if (newX > maxX) newX = maxX;
dragNode.x = newX;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Arabaya dokunulduysa sürüklemeye başla
if (x >= car.x - car.width / 2 && x <= car.x + car.width / 2 && y >= car.y - car.height / 2 && y <= car.y + car.height / 2) {
dragNode = car;
dragOffsetX = x - car.x;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Oyun güncelleme döngüsü
game.update = function () {
if (isGameOver) return;
// Zorluk: Skor arttıkça hız ve engel sıklığı artar
speed = baseSpeed + Math.floor(score / 10) * 2;
spawnInterval = Math.max(32, 80 - Math.floor(score / 10) * 6);
// Engelleri güncelle
for (var i = obstacles.length - 1; i >= 0; i--) {
var obs = obstacles[i];
obs.update();
// Ekran dışına çıktıysa sil
if (obs.y - obs.height / 2 > GAME_HEIGHT + 100) {
obs.destroy();
obstacles.splice(i, 1);
continue;
}
// Çarpışma kontrolü
if (car.intersects(obs)) {
car.flash();
LK.effects.flashScreen(0xff0000, 600);
isGameOver = true;
LK.showGameOver();
return;
}
}
// Bonusları güncelle
for (var j = bonuses.length - 1; j >= 0; j--) {
var bon = bonuses[j];
bon.update();
// Ekran dışına çıktıysa sil
if (bon.y - bon.height / 2 > GAME_HEIGHT + 100) {
bon.destroy();
bonuses.splice(j, 1);
continue;
}
// Toplama kontrolü
if (car.intersects(bon)) {
updateScore(score + 5);
bonusCount += 1;
bonusTxt.setText('Paralar: ' + bonusCount);
bon.destroy();
bonuses.splice(j, 1);
// Bonus efekti
LK.effects.flashObject(car, 0x43a047, 300);
continue;
}
}
// Engel üret
ticksSinceLastObstacle++;
if (ticksSinceLastObstacle >= spawnInterval) {
ticksSinceLastObstacle = 0;
var obs = new Obstacle();
// Yolun rastgele bir noktasına yerleştir
var minX = roadX + obs.width / 2;
var maxX = roadX + ROAD_WIDTH - obs.width / 2;
obs.x = minX + Math.floor(Math.random() * (maxX - minX));
obs.y = -obs.height / 2;
obs.speed = speed;
obstacles.push(obs);
game.addChild(obs);
}
// Bonus üret
ticksSinceLastBonus++;
if (ticksSinceLastBonus >= bonusInterval) {
ticksSinceLastBonus = 0;
var bon = new Bonus();
var minXb = roadX + bon.width / 2;
var maxXb = roadX + ROAD_WIDTH - bon.width / 2;
bon.x = minXb + Math.floor(Math.random() * (maxXb - minXb));
bon.y = -bon.height / 2;
bon.speed = speed;
bonuses.push(bon);
game.addChild(bon);
}
// Skoru artır (her tick başına az bir miktar)
if (LK.ticks % 6 === 0) {
updateScore(score + 1);
}
};
// Oyun yeniden başlatıldığında sıfırla
game.on('reset', function () {
// Tüm engelleri ve bonusları sil
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
for (var j = 0; j < bonuses.length; j++) {
bonuses[j].destroy();
}
obstacles = [];
bonuses = [];
score = 0;
bonusCount = 0;
bonusTxt.setText('Paralar: 0');
isGameOver = false;
car.x = GAME_WIDTH / 2;
car.y = GAME_HEIGHT - 400;
updateScore(0);
}); ===================================================================
--- original.js
+++ change.js
@@ -98,15 +98,23 @@
game.addChild(road);
// Skor ve yüksek skor
var score = 0;
var highScore = storage.highScore || 0;
+var bonusCount = 0; // Toplanan para sayısı
// Skor metni
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
+// Bonus (para) sayısı metni
+var bonusTxt = new Text2('Paralar: 0', {
+ size: 60,
+ fill: 0xFFE082
+});
+bonusTxt.anchor.set(0, 0);
+LK.gui.top.addChild(bonusTxt);
// Yüksek skor metni
var highScoreTxt = new Text2('En Yüksek: ' + highScore, {
size: 60,
fill: "#fff"
@@ -203,8 +211,10 @@
}
// Toplama kontrolü
if (car.intersects(bon)) {
updateScore(score + 5);
+ bonusCount += 1;
+ bonusTxt.setText('Paralar: ' + bonusCount);
bon.destroy();
bonuses.splice(j, 1);
// Bonus efekti
LK.effects.flashObject(car, 0x43a047, 300);
@@ -254,8 +264,10 @@
}
obstacles = [];
bonuses = [];
score = 0;
+ bonusCount = 0;
+ bonusTxt.setText('Paralar: 0');
isGameOver = false;
car.x = GAME_WIDTH / 2;
car.y = GAME_HEIGHT - 400;
updateScore(0);