User prompt
Araba sesini ekle
User prompt
Araba yarış sesi ekle
User prompt
Yol çizgilerini kaldır
User prompt
Bonusları kaldır
User prompt
Bonuslar Arabanın üstünde olmasın
Code edit (1 edits merged)
Please save this source code
User prompt
Turbo Yarış: Sonsuz Yol
Initial prompt
Bana mobil araba yarışı oyunu yap
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Oyuncu arabası
var Car = Container.expand(function () {
var self = Container.call(this);
var carGfx = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
// Arabayı biraz yukarıdan başlatmak için offset
self.setStartPosition = function () {
self.x = 2048 / 2;
self.y = 2732 - 400;
};
// Sınırları kontrol et
self.clampToRoad = function () {
if (self.x < road.x - road.width / 2 + carGfx.width / 2) {
self.x = road.x - road.width / 2 + carGfx.width / 2;
}
if (self.x > road.x + road.width / 2 - carGfx.width / 2) {
self.x = road.x + road.width / 2 - carGfx.width / 2;
}
};
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.speed = 22;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111111
});
/****
* Game Code
****/
// Yolun ortasına yerleştir
// Araba (oyuncu)
// Yol şeridi
// Yol çizgisi
// Engel
var road = LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0
});
road.x = 2048 / 2;
road.y = 0;
game.addChild(road);
var laneCount = 3;
var laneSpacing = road.width / laneCount;
// Skor metni
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Oyuncu arabası
var car = new Car();
car.setStartPosition();
game.addChild(car);
// Oyun değişkenleri
var obstacles = [];
var dragNode = null;
var lastScore = 0;
var isGameOver = false;
// Oyun alanı sınırları
var roadLeft = road.x - road.width / 2;
var roadRight = road.x + road.width / 2;
// Hareket için başlangıç offseti
var dragOffsetX = 0;
// Oyun skorunu güncelle
function updateScore(val) {
LK.setScore(val);
scoreTxt.setText(val);
}
// Oyun başlatıldığında skor sıfırla
updateScore(0);
// Oyun hareketleri
function handleMove(x, y, obj) {
if (dragNode) {
// Arabayı sadece yatay eksende hareket ettir
var newX = x - dragOffsetX;
car.x = newX;
car.clampToRoad();
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Arabaya dokunulduysa sürüklemeye başla
if (x > car.x - 120 && x < car.x + 120 && y > car.y - 180 && y < car.y + 180) {
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;
// 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 - 100 > 2732) {
obs.destroy();
obstacles.splice(i, 1);
continue;
}
// Çarpışma kontrolü
if (car.intersects(obs)) {
// Kırmızı titret
LK.effects.flashScreen(0xff0000, 800);
isGameOver = true;
LK.showGameOver();
return;
}
}
// Skor: her frame biraz artır (yol kat ettikçe)
if (LK.ticks % 4 === 0) {
updateScore(LK.getScore() + 1);
}
// Engel oluşturma (her 40 frame'de bir)
if (LK.ticks % 40 === 0) {
var obs = new Obstacle();
// Rastgele şerit seç
var laneIdx = Math.floor(Math.random() * laneCount);
obs.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing;
obs.y = -120;
obstacles.push(obs);
game.addChild(obs);
}
};
// Oyun yeniden başlatıldığında sıfırla
game.on('destroy', function () {
obstacles = [];
isGameOver = false;
car.setStartPosition();
updateScore(0);
}); ===================================================================
--- original.js
+++ change.js
@@ -52,44 +52,22 @@
/****
* Game Code
****/
-// Engel
-// Yol çizgisi
-// Yol şeridi
-// Araba (oyuncu)
// Yolun ortasına yerleştir
+// Araba (oyuncu)
+// Yol şeridi
+// Yol çizgisi
+// Engel
var road = LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0
});
road.x = 2048 / 2;
road.y = 0;
game.addChild(road);
-// Yol çizgileri (hareketli)
-var laneLines = [];
var laneCount = 3;
var laneSpacing = road.width / laneCount;
-for (var i = 0; i < 8; i++) {
- var lane = LK.getAsset('lane', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- lane.x = road.x - road.width / 2 + laneSpacing;
- lane.y = i * 400;
- game.addChild(lane);
- laneLines.push(lane);
-}
-for (var i = 0; i < 8; i++) {
- var lane = LK.getAsset('lane', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- lane.x = road.x + road.width / 2 - laneSpacing;
- lane.y = i * 400 + 200;
- game.addChild(lane);
- laneLines.push(lane);
-}
// Skor metni
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
@@ -139,15 +117,8 @@
};
// Oyun güncelleme döngüsü
game.update = function () {
if (isGameOver) return;
- // Yol çizgilerini hareket ettir
- for (var i = 0; i < laneLines.length; i++) {
- laneLines[i].y += 22;
- if (laneLines[i].y > 2732) {
- laneLines[i].y -= 2732;
- }
- }
// Engelleri güncelle
for (var i = obstacles.length - 1; i >= 0; i--) {
var obs = obstacles[i];
obs.update();