User prompt
ekrana basılı tuttuğum zaman arabanın hızı artsın bıraktığımda normal hızda gitsin
User prompt
yol çizgileri arabanın ve engellerin altında gözüksün
User prompt
nitroyu kaldır
User prompt
nitroyu yolda toplayalım öyle kullanalım
User prompt
arabanın nitrosu olsun, nitro barı olsun, nitroyu yolda giderken nitroyu kullanmak için ekranı basılı tutalım nitro 5 saniye sürsün sonra bitsin
User prompt
ekrana basılı tuttuğumuz zaman araba hızı artmasın
User prompt
birden çok engel çeşitliliği olsun olsun
User prompt
ekrana basılı tuttuğum zaman arabanın hızı artsın bıraktığımda normal hızda gitsin
Code edit (1 edits merged)
Please save this source code
User prompt
Turbo Track: Araba Yarışı
Initial prompt
araba yarışı oyunu
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Oyuncu arabası var Car = Container.expand(function () { var self = Container.call(this); var carAsset = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.width = carAsset.width; self.height = carAsset.height; // Hareket limiti (ekran dışına çıkmasın) self.minX = self.width / 2 + 40; self.maxX = 2048 - self.width / 2 - 40; // Arabayı verilen x konumuna kaydır self.moveToX = function (targetX) { // Sınırlar içinde tut if (targetX < self.minX) targetX = self.minX; if (targetX > self.maxX) targetX = self.maxX; // Tween ile yumuşak kaydır tween.stop(self, { x: true }); tween(self, { x: targetX }, { duration: 180, easing: tween.cubicOut }); }; return self; }); // Yol çizgisi (dekoratif) var Lane = Container.expand(function () { var self = Container.call(this); var laneAsset = self.attachAsset('lane', { anchorX: 0.5, anchorY: 0.5 }); self.width = laneAsset.width; self.height = laneAsset.height; self.speed = 12; self.update = function () { self.y += self.speed; }; return self; }); var ObstacleBar = Container.expand(function () { var self = Container.call(this); var obsAsset = self.attachAsset('obstacle_bar', { anchorX: 0.5, anchorY: 0.5 }); self.width = obsAsset.width; self.height = obsAsset.height; self.type = "bar"; self.speed = 12; self.update = function () { self.y += self.speed; }; return self; }); // Kırmızı kutu engel (klasik) var ObstacleBox = Container.expand(function () { var self = Container.call(this); var obsAsset = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.width = obsAsset.width; self.height = obsAsset.height; self.type = "box"; self.speed = 12; self.update = function () { self.y += self.speed; }; return self; }); // Daire engel (yuvarlak, farklı renk) var ObstacleCircle = Container.expand(function () { var self = Container.call(this); var obsAsset = self.attachAsset('obstacle_circle', { anchorX: 0.5, anchorY: 0.5 }); self.width = obsAsset.width; self.height = obsAsset.height; self.type = "circle"; self.speed = 12; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ // Uzun dikdörtgen engel (bariyer) var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Pist genişliği (kenarlardan boşluk bırak) // Oyun alanı: 2048x2732 // Araba (oyuncu) için kutu şeklinde bir asset // Engeller için kutu şeklinde bir asset // Yol çizgisi için ince kutu // Daire engel (yuvarlak, farklı renk) // Uzun dikdörtgen engel (bariyer) var trackMargin = 220; var trackWidth = 2048 - 2 * trackMargin; // Şerit çizgileri için var laneCount = 3; var laneX = []; for (var i = 0; i < laneCount; i++) { laneX[i] = trackMargin + (i + 0.5) * (trackWidth / laneCount); } // Arabayı başlat var car = new Car(); car.x = laneX[1]; // Ortadaki şerit car.y = 2732 - 400; game.addChild(car); // Skor var score = 0; var scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Engeller ve yol çizgileri dizileri var obstacles = []; var lanes = []; // Oyun hızı ve zorluk var baseSpeed = 12; var speed = baseSpeed; var fastSpeed = 32; // Nitro ile gidecek hız var spawnInterval = 60; // Kaç frame'de bir engel gelsin var laneSpawnInterval = 36; // Yol çizgisi aralığı var ticksSinceLastObstacle = 0; var ticksSinceLastLane = 0; // Oyun bitti mi? var isGameOver = false; // Basılı tutma kontrolü var isPressing = false; // Nitro sistemi var nitroActive = false; var nitroDuration = 5 * 60; // 5 saniye, 60 FPS var nitroTimer = 0; var nitroBarWidth = 500; var nitroBarHeight = 40; var nitroBarBg = new Container(); var nitroBarFill = new Container(); var nitroBarBorder = new Container(); var nitroBarMax = nitroDuration; var nitroBarX = 2048 / 2 - nitroBarWidth / 2; var nitroBarY = 120; // Nitro bar arka planı var nitroBgAsset = LK.getAsset('lane', { width: nitroBarWidth, height: nitroBarHeight, color: 0x333333, anchorX: 0, anchorY: 0.5 }); nitroBarBg.addChild(nitroBgAsset); nitroBarBg.x = nitroBarX; nitroBarBg.y = nitroBarY; // Nitro bar dolu kısmı var nitroFillAsset = LK.getAsset('lane', { width: nitroBarWidth, height: nitroBarHeight, color: 0x00eaff, anchorX: 0, anchorY: 0.5 }); nitroBarFill.addChild(nitroFillAsset); nitroBarFill.x = nitroBarX; nitroBarFill.y = nitroBarY; // Nitro bar çerçevesi (beyaz) var nitroBorderAsset = LK.getAsset('lane', { width: nitroBarWidth, height: nitroBarHeight, color: 0xffffff, anchorX: 0, anchorY: 0.5 }); nitroBarBorder.addChild(nitroBorderAsset); nitroBarBorder.x = nitroBarX; nitroBarBorder.y = nitroBarY; nitroBarBorder.alpha = 0.25; // Nitro barı GUI'ye ekle LK.gui.top.addChild(nitroBarBg); LK.gui.top.addChild(nitroBarFill); LK.gui.top.addChild(nitroBarBorder); // Nitro barı güncelle function updateNitroBar() { var ratio = Math.max(0, Math.min(1, nitroTimer / nitroBarMax)); nitroBarFill.children[0].width = nitroBarWidth * ratio; if (ratio === 0) { nitroBarFill.visible = false; } else { nitroBarFill.visible = true; } } // Yol çizgilerini başlat for (var i = 0; i < laneCount; i++) { for (var j = 0; j < 6; j++) { var lane = new Lane(); lane.x = laneX[i]; lane.y = j * 500 + 200; lanes.push(lane); game.addChild(lane); } } // Hareket kontrolü (sürükleme veya dokunulan yere kayma) var dragActive = false; var dragOffsetX = 0; // Oyun alanı dışında kalan engelleri ve çizgileri sil function cleanupObstaclesAndLanes() { for (var i = obstacles.length - 1; i >= 0; i--) { if (obstacles[i].y - obstacles[i].height / 2 > 2732 + 100) { obstacles[i].destroy(); obstacles.splice(i, 1); } } for (var i = lanes.length - 1; i >= 0; i--) { if (lanes[i].y - lanes[i].height / 2 > 2732 + 100) { lanes[i].destroy(); lanes.splice(i, 1); } } } // Oyun güncelleme fonksiyonu game.update = function () { if (isGameOver) return; // Nitro aktifse nitro süresini azalt if (nitroActive) { nitroTimer -= 1; if (nitroTimer <= 0) { nitroActive = false; nitroTimer = 0; } } // Nitro barı güncelle updateNitroBar(); // Hız sabit, skor arttıkça artar, nitro aktifse hız artır if (nitroActive) { speed = fastSpeed; } else { speed = baseSpeed + Math.floor(score / 600) * 1.5; if (speed > 32) speed = 32; } // Engelleri ve yol çizgilerini hareket ettir for (var i = 0; i < obstacles.length; i++) { obstacles[i].speed = speed; obstacles[i].update(); } for (var i = 0; i < lanes.length; i++) { lanes[i].speed = speed; lanes[i].update(); } // Engelleri ve çizgileri temizle cleanupObstaclesAndLanes(); // Yeni engel oluştur ticksSinceLastObstacle++; if (ticksSinceLastObstacle >= spawnInterval) { ticksSinceLastObstacle = 0; // Rastgele bir şeride engel koy, farklı tiplerden seç var laneIdx = Math.floor(Math.random() * laneCount); var obsTypeRand = Math.random(); var obs; if (obsTypeRand < 0.5) { obs = new ObstacleBox(); } else if (obsTypeRand < 0.8) { obs = new ObstacleCircle(); } else { obs = new ObstacleBar(); // Bariyer engelini iki şeride yaymak için ortadaki şeritte çıkarsa, biraz sola/sağa kaydır if (laneIdx == 0) obs.x = laneX[0] + (laneX[1] - laneX[0]) / 2;else if (laneIdx == 2) obs.x = laneX[2] - (laneX[2] - laneX[1]) / 2;else obs.x = laneX[1]; } if (!obs.x) obs.x = laneX[laneIdx]; obs.y = -obs.height / 2 - 40; obs.speed = speed; obstacles.push(obs); game.addChild(obs); } // Yeni yol çizgisi oluştur ticksSinceLastLane++; if (ticksSinceLastLane >= laneSpawnInterval) { ticksSinceLastLane = 0; for (var i = 0; i < laneCount; i++) { var lane = new Lane(); lane.x = laneX[i]; lane.y = -lane.height / 2; lane.speed = speed; lanes.push(lane); game.addChild(lane); } } // Skor: her frame biraz artar (hayatta kalma süresi) score += 1; scoreTxt.setText(score); // Zorluk: skor arttıkça hız ve engel sıklığı artsın if (score % 600 == 0 && !isPressing && speed < 32 && !nitroActive) { speed += 1.5; if (spawnInterval > 28) spawnInterval -= 2; } // Çarpışma kontrolü for (var i = 0; i < obstacles.length; i++) { if (car.intersects(obstacles[i])) { isGameOver = true; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } }; // Oyun alanında dokunma veya sürükleme ile araba kontrolü function getNearestLaneX(x) { // En yakın şerit merkezini bul var minDist = 99999; var bestX = laneX[0]; for (var i = 0; i < laneCount; i++) { var dist = Math.abs(x - laneX[i]); if (dist < minDist) { minDist = dist; bestX = laneX[i]; } } return bestX; } // Sürükleme başlat game.down = function (x, y, obj) { isPressing = true; // Basılı tutuluyor // Nitro başlat: Nitro barı doluysa ve nitro aktif değilse if (!nitroActive && nitroTimer === 0) { nitroActive = true; nitroTimer = nitroBarMax; } // Arabaya dokunulduysa sürükleme başlat if (Math.abs(x - car.x) < car.width / 2 + 40 && Math.abs(y - car.y) < car.height / 2 + 40) { dragActive = true; dragOffsetX = car.x - x; } else { // Pistte bir yere dokunulduysa arabayı o şeride kaydır var targetX = getNearestLaneX(x); car.moveToX(targetX); } }; // Sürükleme devamı game.move = function (x, y, obj) { if (dragActive) { var newX = x + dragOffsetX; car.moveToX(newX); } }; // Sürükleme bırakıldı game.up = function (x, y, obj) { dragActive = false; isPressing = false; // Basılı tutma bitti // Nitro, süresi bitene kadar devam eder, burada bir şey yapılmaz }; /**** END OF FILE ****/
===================================================================
--- original.js
+++ change.js
@@ -143,17 +143,77 @@
var lanes = [];
// Oyun hızı ve zorluk
var baseSpeed = 12;
var speed = baseSpeed;
-var fastSpeed = 22; // Basılı tutunca gidecek hız
+var fastSpeed = 32; // Nitro ile gidecek hız
var spawnInterval = 60; // Kaç frame'de bir engel gelsin
var laneSpawnInterval = 36; // Yol çizgisi aralığı
var ticksSinceLastObstacle = 0;
var ticksSinceLastLane = 0;
// Oyun bitti mi?
var isGameOver = false;
// Basılı tutma kontrolü
var isPressing = false;
+// Nitro sistemi
+var nitroActive = false;
+var nitroDuration = 5 * 60; // 5 saniye, 60 FPS
+var nitroTimer = 0;
+var nitroBarWidth = 500;
+var nitroBarHeight = 40;
+var nitroBarBg = new Container();
+var nitroBarFill = new Container();
+var nitroBarBorder = new Container();
+var nitroBarMax = nitroDuration;
+var nitroBarX = 2048 / 2 - nitroBarWidth / 2;
+var nitroBarY = 120;
+// Nitro bar arka planı
+var nitroBgAsset = LK.getAsset('lane', {
+ width: nitroBarWidth,
+ height: nitroBarHeight,
+ color: 0x333333,
+ anchorX: 0,
+ anchorY: 0.5
+});
+nitroBarBg.addChild(nitroBgAsset);
+nitroBarBg.x = nitroBarX;
+nitroBarBg.y = nitroBarY;
+// Nitro bar dolu kısmı
+var nitroFillAsset = LK.getAsset('lane', {
+ width: nitroBarWidth,
+ height: nitroBarHeight,
+ color: 0x00eaff,
+ anchorX: 0,
+ anchorY: 0.5
+});
+nitroBarFill.addChild(nitroFillAsset);
+nitroBarFill.x = nitroBarX;
+nitroBarFill.y = nitroBarY;
+// Nitro bar çerçevesi (beyaz)
+var nitroBorderAsset = LK.getAsset('lane', {
+ width: nitroBarWidth,
+ height: nitroBarHeight,
+ color: 0xffffff,
+ anchorX: 0,
+ anchorY: 0.5
+});
+nitroBarBorder.addChild(nitroBorderAsset);
+nitroBarBorder.x = nitroBarX;
+nitroBarBorder.y = nitroBarY;
+nitroBarBorder.alpha = 0.25;
+// Nitro barı GUI'ye ekle
+LK.gui.top.addChild(nitroBarBg);
+LK.gui.top.addChild(nitroBarFill);
+LK.gui.top.addChild(nitroBarBorder);
+// Nitro barı güncelle
+function updateNitroBar() {
+ var ratio = Math.max(0, Math.min(1, nitroTimer / nitroBarMax));
+ nitroBarFill.children[0].width = nitroBarWidth * ratio;
+ if (ratio === 0) {
+ nitroBarFill.visible = false;
+ } else {
+ nitroBarFill.visible = true;
+ }
+}
// Yol çizgilerini başlat
for (var i = 0; i < laneCount; i++) {
for (var j = 0; j < 6; j++) {
var lane = new Lane();
@@ -183,11 +243,25 @@
}
// Oyun güncelleme fonksiyonu
game.update = function () {
if (isGameOver) return;
- // Hız sabit, skor arttıkça artar
- speed = baseSpeed + Math.floor(score / 600) * 1.5;
- if (speed > 32) speed = 32;
+ // Nitro aktifse nitro süresini azalt
+ if (nitroActive) {
+ nitroTimer -= 1;
+ if (nitroTimer <= 0) {
+ nitroActive = false;
+ nitroTimer = 0;
+ }
+ }
+ // Nitro barı güncelle
+ updateNitroBar();
+ // Hız sabit, skor arttıkça artar, nitro aktifse hız artır
+ if (nitroActive) {
+ speed = fastSpeed;
+ } else {
+ speed = baseSpeed + Math.floor(score / 600) * 1.5;
+ if (speed > 32) speed = 32;
+ }
// Engelleri ve yol çizgilerini hareket ettir
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = speed;
obstacles[i].update();
@@ -237,9 +311,9 @@
// Skor: her frame biraz artar (hayatta kalma süresi)
score += 1;
scoreTxt.setText(score);
// Zorluk: skor arttıkça hız ve engel sıklığı artsın
- if (score % 600 == 0 && !isPressing && speed < 32) {
+ if (score % 600 == 0 && !isPressing && speed < 32 && !nitroActive) {
speed += 1.5;
if (spawnInterval > 28) spawnInterval -= 2;
}
// Çarpışma kontrolü
@@ -268,8 +342,13 @@
}
// Sürükleme başlat
game.down = function (x, y, obj) {
isPressing = true; // Basılı tutuluyor
+ // Nitro başlat: Nitro barı doluysa ve nitro aktif değilse
+ if (!nitroActive && nitroTimer === 0) {
+ nitroActive = true;
+ nitroTimer = nitroBarMax;
+ }
// Arabaya dokunulduysa sürükleme başlat
if (Math.abs(x - car.x) < car.width / 2 + 40 && Math.abs(y - car.y) < car.height / 2 + 40) {
dragActive = true;
dragOffsetX = car.x - x;
@@ -289,6 +368,7 @@
// Sürükleme bırakıldı
game.up = function (x, y, obj) {
dragActive = false;
isPressing = false; // Basılı tutma bitti
+ // Nitro, süresi bitene kadar devam eder, burada bir şey yapılmaz
};
/**** END OF FILE ****/
\ No newline at end of file