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
****/
// Engel
// Yol çizgisi
// Yol şeridi
// Araba (oyuncu)
// Yolun ortasına yerleştir
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"
});
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;
// 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();
// 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
@@ -5,21 +5,8 @@
/****
* Classes
****/
-// Bonus
-var Bonus = Container.expand(function () {
- var self = Container.call(this);
- var bonusGfx = self.attachAsset('bonus', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.speed = 22;
- 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', {
@@ -65,9 +52,8 @@
/****
* Game Code
****/
-// Bonus
// Engel
// Yol çizgisi
// Yol şeridi
// Araba (oyuncu)
@@ -115,9 +101,8 @@
car.setStartPosition();
game.addChild(car);
// Oyun değişkenleri
var obstacles = [];
-var bonuses = [];
var dragNode = null;
var lastScore = 0;
var isGameOver = false;
// Oyun alanı sınırları
@@ -180,28 +165,8 @@
LK.showGameOver();
return;
}
}
- // Bonusları güncelle
- for (var i = bonuses.length - 1; i >= 0; i--) {
- var b = bonuses[i];
- b.update();
- // Ekran dışına çıktıysa sil
- if (b.y - 80 > 2732) {
- b.destroy();
- bonuses.splice(i, 1);
- continue;
- }
- // Toplama kontrolü
- if (car.intersects(b)) {
- updateScore(LK.getScore() + 5);
- // Sarı titret
- LK.effects.flashObject(car, 0xffeb3b, 400);
- b.destroy();
- bonuses.splice(i, 1);
- continue;
- }
- }
// Skor: her frame biraz artır (yol kat ettikçe)
if (LK.ticks % 4 === 0) {
updateScore(LK.getScore() + 1);
}
@@ -214,31 +179,12 @@
obs.y = -120;
obstacles.push(obs);
game.addChild(obs);
}
- // Bonus oluşturma (her 120 frame'de bir, %50 olasılıkla)
- if (LK.ticks % 120 === 0 && Math.random() < 0.5) {
- // Rastgele şerit seç, ancak arabanın bulunduğu şeridi atla
- var carLaneIdx = Math.floor((car.x - (road.x - road.width / 2)) / laneSpacing);
- var possibleLanes = [];
- for (var li = 0; li < laneCount; li++) {
- if (li !== carLaneIdx) possibleLanes.push(li);
- }
- // Eğer tüm şeritler arabanın altında ise, bonus koyma
- if (possibleLanes.length > 0) {
- var laneIdx = possibleLanes[Math.floor(Math.random() * possibleLanes.length)];
- var b = new Bonus();
- b.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing;
- b.y = -100;
- bonuses.push(b);
- game.addChild(b);
- }
- }
};
// Oyun yeniden başlatıldığında sıfırla
game.on('destroy', function () {
obstacles = [];
- bonuses = [];
isGameOver = false;
car.setStartPosition();
updateScore(0);
});
\ No newline at end of file