/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Arkadan kovalayan düşman araba var ChaserCar = Container.expand(function () { var self = Container.call(this); var car = self.attachAsset('chaserCar', { anchorX: 0.5, anchorY: 0.5 }); self.width = car.width; self.height = car.height; self.speed = 12; // Başlangıç hızı self.targetY = 0; // Hedef y (player'ın arkasında başlar) self.update = function () { // Oyuncuya yaklaş if (self.y < self.targetY) { self.y += self.speed; if (self.y > self.targetY) self.y = self.targetY; } }; return self; }); // Düz ve ters giden engel arabalar var EnemyCar = Container.expand(function () { var self = Container.call(this); // Farklı tipte araba şekilleri ve renkleri var carTypes = [{ asset: 'enemyCar', shape: 'box' }, { asset: 'enemyCarRed', shape: 'box' }, { asset: 'enemyCarBlue', shape: 'box' }, { asset: 'enemyCarYellow', shape: 'box' }, { asset: 'enemyCarGreen', shape: 'ellipse' }, { asset: 'enemyCarPurple', shape: 'box' }, { asset: 'enemyCar', shape: 'ellipse' }, { asset: 'enemyCarRed', shape: 'ellipse' }, { asset: 'enemyCarBlue', shape: 'ellipse' }, { asset: 'enemyCarYellow', shape: 'ellipse' }, { asset: 'enemyCarGreen', shape: 'box' }, { asset: 'enemyCarPurple', shape: 'ellipse' }, { asset: 'enemyCar', shape: 'box' }, { asset: 'enemyCarRed', shape: 'box' }, { asset: 'enemyCarBlue', shape: 'box' }, { asset: 'enemyCarYellow', shape: 'box' }, // 10 yeni çeşit { asset: 'enemyCarOrange', shape: 'box' }, { asset: 'enemyCarPink', shape: 'ellipse' }, { asset: 'enemyCarCyan', shape: 'box' }, { asset: 'enemyCarBlack', shape: 'ellipse' }, { asset: 'enemyCarWhite', shape: 'box' }, { asset: 'enemyCarBrown', shape: 'ellipse' }, { asset: 'enemyCarSilver', shape: 'box' }, { asset: 'enemyCarGold', shape: 'ellipse' }, { asset: 'enemyCarNavy', shape: 'box' }, { asset: 'enemyCarLime', shape: 'ellipse' }, // 3 yeni çeşit (arttırıldı) { asset: 'enemyCarBlack', shape: 'box' }, { asset: 'enemyCarCyan', shape: 'ellipse' }, { asset: 'enemyCarBrown', shape: 'box' }]; // If selectedEnemyCarAssets is set, filter carTypes if (typeof selectedEnemyCarAssets !== 'undefined' && selectedEnemyCarAssets && selectedEnemyCarAssets.length > 0) { var filtered = []; for (var i = 0; i < carTypes.length; i++) { if (selectedEnemyCarAssets.indexOf(carTypes[i].asset) !== -1) { filtered.push(carTypes[i]); } } if (filtered.length > 0) carTypes = filtered; } // Rastgele bir tip seç var typeIdx = Math.floor(Math.random() * carTypes.length); var carType = carTypes[typeIdx]; var car = self.attachAsset(carType.asset, { anchorX: 0.5, anchorY: 0.5 }); self.width = car.width; self.height = car.height; self.speed = 18; // Varsayılan hız (aşağı) self.direction = 1; // 1: aşağı, -1: yukarı (ters) self.update = function () { self.y += self.speed * self.direction; }; return self; }); // Nitro power-up var Nitro = Container.expand(function () { var self = Container.call(this); var nitro = self.attachAsset('nitro', { anchorX: 0.5, anchorY: 0.5 }); self.width = nitro.width; self.height = nitro.height; self.speed = 24; self.lane = 1; self.update = function () { self.y += self.speed; }; return self; }); // Oyuncu arabası var PlayerCar = Container.expand(function () { var self = Container.call(this); // Use selectedPlayerCarAsset if set, fallback to 'playerCar' var asset = typeof selectedPlayerCarAsset !== 'undefined' && selectedPlayerCarAsset ? selectedPlayerCarAsset : 'playerCar'; var car = self.attachAsset(asset, { anchorX: 0.5, anchorY: 0.5 }); self.width = car.width; self.height = car.height; return self; }); // Yol çizgisi (hareketli) var RoadLine = Container.expand(function () { var self = Container.call(this); var line = self.attachAsset('roadLine', { anchorX: 0.5, anchorY: 0.5 }); self.width = line.width; self.height = line.height; self.speed = 24; self.update = function () { self.y += self.speed; }; return self; }); // Yan ağaçlar (sol ve sağ) var TreeLeft = Container.expand(function () { var self = Container.call(this); var tree = self.attachAsset('treeLeft', { anchorX: 0.5, anchorY: 0.5 }); self.width = tree.width; self.height = tree.height; self.speed = 24; self.update = function () { self.y += self.speed; }; return self; }); var TreeRight = Container.expand(function () { var self = Container.call(this); var tree = self.attachAsset('treeRight', { anchorX: 0.5, anchorY: 0.5 }); self.width = tree.width; self.height = tree.height; self.speed = 24; self.update = function () { self.y += self.speed; }; return self; }); // Tree bottom zone (left) var TreeZoneLeft = Container.expand(function () { var self = Container.call(this); var zone = self.attachAsset('treeZoneLeft', { anchorX: 0.5, anchorY: 0.0 }); self.width = zone.width; self.height = zone.height; self.speed = 24; self.update = function () { self.y += self.speed; }; return self; }); // Tree bottom zone (right) var TreeZoneRight = Container.expand(function () { var self = Container.call(this); var zone = self.attachAsset('treeZoneRight', { anchorX: 0.5, anchorY: 0.0 }); self.width = zone.width; self.height = zone.height; self.speed = 24; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Nitro asset // Chasing enemy car asset (arkadan kovalayan düşman) // Köprü ve arka plan için özelleştirilebilir assetler // 10 yeni çeşit için ek varlıklar // Oyun alanı boyutları // Köprü ve arka planı ekle // Tree bottom zone assets (customize these IDs as needed) var backgroundImg = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(backgroundImg); var bridgeImg = LK.getAsset('bridge', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(bridgeImg); // Oyuncu arabası (kırmızı kutu) // Engeller (gri kutu) // Yol çizgisi (beyaz ince kutu) // Yan ağaçlar için basit şekil (dilerseniz image ile de değiştirebilirsiniz) // Play button asset (customizable) var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; // Yolun genişliği ve şeritler var ROAD_WIDTH = 1200; var ROAD_LEFT = (GAME_WIDTH - ROAD_WIDTH) / 2; var ROAD_RIGHT = ROAD_LEFT + ROAD_WIDTH; // Şerit sayısı ve pozisyonları var LANE_COUNT = 4; var LANE_WIDTH = ROAD_WIDTH / LANE_COUNT; var LANE_X = [ROAD_LEFT + LANE_WIDTH * 0.5, ROAD_LEFT + LANE_WIDTH * 1.5, ROAD_LEFT + LANE_WIDTH * 2.5, ROAD_LEFT + LANE_WIDTH * 3.5]; // Yol çizgileri var roadLines = []; // Yan ağaçlar var leftTrees = []; var rightTrees = []; // Tree bottom zones var leftTreeZones = []; var rightTreeZones = []; function spawnRoadLines() { // Her şeridin ortasına, aralıklı çizgiler for (var lane = 0; lane < LANE_COUNT; lane++) { for (var i = 0; i < 8; i++) { var line = new RoadLine(); line.x = ROAD_LEFT + LANE_WIDTH * (lane + 0.5); line.y = i * 400; roadLines.push(line); game.addChild(line); } } // Sol ve sağ kenara ağaçlar ve altındaki bölgeler for (var i = 0; i < 8; i++) { var leftTree = new TreeLeft(); leftTree.x = ROAD_LEFT - 120; // Sol kenarın biraz dışında leftTree.y = i * 400; leftTrees.push(leftTree); game.addChild(leftTree); var rightTree = new TreeRight(); rightTree.x = ROAD_RIGHT + 120; // Sağ kenarın biraz dışında rightTree.y = i * 400; rightTrees.push(rightTree); game.addChild(rightTree); // Tree bottom zones var leftZone = new TreeZoneLeft(); leftZone.x = ROAD_LEFT - 120; leftZone.y = leftTree.y + leftTree.height / 2; // Ağacın altına hizala leftTreeZones.push(leftZone); game.addChild(leftZone); var rightZone = new TreeZoneRight(); rightZone.x = ROAD_RIGHT + 120; rightZone.y = rightTree.y + rightTree.height / 2; rightTreeZones.push(rightZone); game.addChild(rightZone); } } spawnRoadLines(); // Oyuncu arabası var player = new PlayerCar(); player.lane = 1; // Ortadaki şerit player.x = LANE_X[player.lane]; player.y = GAME_HEIGHT - 500; game.addChild(player); // Arkadan kovalayan düşman araba var chaserCar = new ChaserCar(); chaserCar.x = player.x; chaserCar.y = GAME_HEIGHT + 400; // Ekranın dışında başlat chaserCar.targetY = player.y + 600; // Oyuncunun arkasında başlat game.addChild(chaserCar); // Nitro power-up'lar var nitros = []; var nitroSpawnTick = 0; var NITRO_SPAWN_INTERVAL = 180; // 3 saniyede bir var nitroActive = false; var nitroTimer = 0; var NITRO_DURATION = 120; // 2 saniye var playerSpeedBoost = 0; // Engeller var enemyCars = []; var ENEMY_SPAWN_INTERVAL_BASE = 60; // Başlangıçta 60 tickte bir (1 sn) var ENEMY_SPAWN_INTERVAL_MIN = 18; // Minimum 0.3 sn (18 tick) var enemySpawnTick = 0; function getEnemySpawnInterval() { // Mesafe arttıkça interval azalır, minimuma kadar iner // 0-2000 arası 60, 2000'den sonra 30'a kadar iner, 6000'den sonra 18'e kadar iner (daha yavaş artış) if (distance < 2000) return ENEMY_SPAWN_INTERVAL_BASE; if (distance < 6000) return Math.max(ENEMY_SPAWN_INTERVAL_BASE - Math.floor((distance - 2000) / 133), 30); return ENEMY_SPAWN_INTERVAL_MIN; } // Skor var distance = 0; var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // En yüksek skor (oyun başında sıfır) var highScore = 0; var highScoreTxt = new Text2('', { size: 60, fill: 0xFFFF00 }); highScoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(highScoreTxt); function updateHighScore() { if (distance > highScore) highScore = distance; highScoreTxt.setText('En Yüksek: ' + highScore); } updateHighScore(); // Sürükleme için var dragStartX = null; var dragStartLane = null; // Oyun bitti mi? var isGameOver = false; // Menu state var isMenu = true; var isCarSelect = false; var selectedPlayerCarAsset = 'playerCar'; // default var selectedEnemyCarAssets = []; // if empty, all types used // Car asset list for selection (player and enemy) var allCarAssets = ['playerCar', 'enemyCar', 'enemyCarRed', 'enemyCarBlue', 'enemyCarYellow', 'enemyCarGreen', 'enemyCarPurple', 'enemyCarOrange', 'enemyCarPink', 'enemyCarCyan', 'enemyCarBlack', 'enemyCarWhite', 'enemyCarBrown', 'enemyCarSilver', 'enemyCarGold', 'enemyCarNavy', 'enemyCarLime']; // Menu overlay and play button var menuOverlay = new Container(); var playButton = LK.getAsset('playButton', { anchorX: 0.5, anchorY: 0.5, x: GAME_WIDTH / 2, y: GAME_HEIGHT / 2 + 200 }); menuOverlay.addChild(playButton); // Car select button var carSelectButton = LK.getAsset('carSelectButton', { anchorX: 0.5, anchorY: 0.5, x: GAME_WIDTH / 2, y: GAME_HEIGHT / 2 + 800 // moved further down }); menuOverlay.addChild(carSelectButton); // Optionally, add a game title var titleText = new Text2('ARABA YARIŞI', { size: 140, fill: 0xFFF700 }); titleText.anchor.set(0.5, 0.5); titleText.x = GAME_WIDTH / 2; titleText.y = GAME_HEIGHT / 2 - 200; menuOverlay.addChild(titleText); game.addChild(menuOverlay); // Car select overlay var carSelectOverlay = new Container(); carSelectOverlay.visible = false; game.addChild(carSelectOverlay); // Car select grid var carSelectButtons = []; var carSelectTitle = new Text2('ARABA SEÇ', { size: 120, fill: 0xFFF700 }); carSelectTitle.anchor.set(0.5, 0.5); carSelectTitle.x = GAME_WIDTH / 2; carSelectTitle.y = 300; carSelectOverlay.addChild(carSelectTitle); // Layout grid var gridCols = 4; var gridRows = Math.ceil(allCarAssets.length / gridCols); var gridStartX = GAME_WIDTH / 2 - gridCols * 350 / 2 + 175; var gridStartY = 500; for (var i = 0; i < allCarAssets.length; i++) { var asset = allCarAssets[i]; var btn = LK.getAsset(asset, { anchorX: 0.5, anchorY: 0.5, x: gridStartX + i % gridCols * 350, y: gridStartY + Math.floor(i / gridCols) * 400 }); carSelectOverlay.addChild(btn); carSelectButtons.push({ btn: btn, asset: asset }); } // Car select back button var carSelectBackBtn = new Text2('GERİ', { size: 80, fill: 0xFFFFFF }); carSelectBackBtn.anchor.set(0.5, 0.5); carSelectBackBtn.x = GAME_WIDTH / 2; carSelectBackBtn.y = GAME_HEIGHT - 300; carSelectOverlay.addChild(carSelectBackBtn); // Only handle tap for menu or game or car select game.down = function (x, y, obj) { if (isMenu) { // Play button var bx = playButton.x, by = playButton.y, bw = playButton.width, bh = playButton.height; if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) { isMenu = false; menuOverlay.visible = false; return; } // Car select button var csx = carSelectButton.x, csy = carSelectButton.y, csw = carSelectButton.width, csh = carSelectButton.height; if (x >= csx - csw / 2 && x <= csx + csw / 2 && y >= csy - csh / 2 && y <= csy + csh / 2) { isMenu = false; isCarSelect = true; menuOverlay.visible = false; carSelectOverlay.visible = true; return; } return; } if (isCarSelect) { // Car select grid for (var i = 0; i < carSelectButtons.length; i++) { var btn = carSelectButtons[i].btn; var bx = btn.x, by = btn.y, bw = btn.width, bh = btn.height; if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) { selectedPlayerCarAsset = carSelectButtons[i].asset; isCarSelect = false; carSelectOverlay.visible = false; // Reset player car player.destroy(); player = new PlayerCar(); player.lane = 1; player.x = LANE_X[player.lane]; player.y = GAME_HEIGHT - 500; game.addChild(player); menuOverlay.visible = false; isMenu = false; return; } } // Back button var bbx = carSelectBackBtn.x, bby = carSelectBackBtn.y; var bbw = 200, bbh = 120; if (x >= bbx - bbw / 2 && x <= bbx + bbw / 2 && y >= bby - bbh / 2 && y <= bby + bbh / 2) { isCarSelect = false; carSelectOverlay.visible = false; isMenu = true; menuOverlay.visible = true; return; } return; } // Game controls if (x > GAME_WIDTH / 2) { movePlayerToLane(player.lane + 1); } else { movePlayerToLane(player.lane - 1); } }; // Oyun hareketleri function movePlayerToLane(lane) { if (lane < 0) lane = 0; if (lane > LANE_COUNT - 1) lane = LANE_COUNT - 1; if (lane !== player.lane) { player.lane = lane; // Yumuşak geçiş animasyonu tween(player, { x: LANE_X[lane] }, { duration: 120, easing: tween.cubicOut }); // Araba hareket sesi çal LK.getSound('Carsound').play(); } } // Dokunma ile sağ/sola bir şerit hareket // (removed duplicate game.down, handled above with overlay forwarding) game.move = function (x, y, obj) { // Hareket gerekmez, tap ile kontrol }; game.up = function (x, y, obj) { // Gerekli değil, tap ile kontrol }; // Çarpışma kontrolü function checkCollision(a, b) { // Basit dikdörtgen çarpışma return Math.abs(a.x - b.x) < (a.width + b.width) / 2 - 20 && Math.abs(a.y - b.y) < (a.height + b.height) / 2 - 20; } // Oyun güncelleme game.update = function () { if (isMenu) { return; } if (isCarSelect) { return; } if (isGameOver) { return; } // Müzik başlat (her zaman) if (!LK.isMusicPlaying || !LK.isMusicPlaying('A')) { LK.playMusic('A', { loop: true }); } // Skor: mesafe arttıkça artar distance += 1; scoreTxt.setText(distance); updateHighScore(); // Yol çizgilerini hareket ettir for (var i = 0; i < roadLines.length; i++) { var line = roadLines[i]; line.update(); if (line.y > GAME_HEIGHT + 100) { line.y -= 8 * 400; } } // Sol ağaçları hareket ettir for (var i = 0; i < leftTrees.length; i++) { var tree = leftTrees[i]; tree.update(); if (tree.y > GAME_HEIGHT + 100) { tree.y -= 8 * 400; } } // Sağ ağaçları hareket ettir for (var i = 0; i < rightTrees.length; i++) { var tree = rightTrees[i]; tree.update(); if (tree.y > GAME_HEIGHT + 100) { tree.y -= 8 * 400; } } // Sol ağaç altı bölgeleri hareket ettir for (var i = 0; i < leftTreeZones.length; i++) { var zone = leftTreeZones[i]; zone.update(); if (zone.y > GAME_HEIGHT + 100) { zone.y -= 8 * 400; } } // Sağ ağaç altı bölgeleri hareket ettir for (var i = 0; i < rightTreeZones.length; i++) { var zone = rightTreeZones[i]; zone.update(); if (zone.y > GAME_HEIGHT + 100) { zone.y -= 8 * 400; } } // Engelleri hareket ettir for (var i = enemyCars.length - 1; i >= 0; i--) { var enemy = enemyCars[i]; enemy.update(); // Ekrandan çıktıysa sil if (enemy.direction === 1 && enemy.y > GAME_HEIGHT + 200 || enemy.direction === -1 && enemy.y < -200) { enemy.destroy(); enemyCars.splice(i, 1); continue; } // Çarpışma kontrolü if (checkCollision(player, enemy)) { isGameOver = true; // Çarpışma anında oyuncu arabasına görsel efekt uygula LK.effects.flashObject(player, 0xff0000, 800); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } // Arkadan kovalayan düşman araba hareketi ve çarpışma chaserCar.x = player.x; chaserCar.targetY = player.y + 600 - distance / 10; // Mesafe arttıkça yaklaşsın if (chaserCar.targetY < player.y + 200) chaserCar.targetY = player.y + 200; // Minimum mesafe chaserCar.update(); // Çarpışma kontrolü (chaserCar) if (checkCollision(player, chaserCar)) { isGameOver = true; LK.effects.flashObject(player, 0xff0000, 800); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } // Nitro spawn ve hareket nitroSpawnTick++; if (nitroSpawnTick >= NITRO_SPAWN_INTERVAL) { nitroSpawnTick = 0; // Rastgele bir şeride nitro koy var lane = Math.floor(Math.random() * LANE_COUNT); var nitro = new Nitro(); nitro.x = LANE_X[lane]; nitro.y = -150; nitro.lane = lane; game.addChild(nitro); nitros.push(nitro); } // Nitro'ları hareket ettir ve topla for (var i = nitros.length - 1; i >= 0; i--) { var n = nitros[i]; n.update(); if (n.y > GAME_HEIGHT + 200) { n.destroy(); nitros.splice(i, 1); continue; } // Toplama kontrolü if (!nitroActive && checkCollision(player, n)) { nitroActive = true; nitroTimer = NITRO_DURATION; playerSpeedBoost = 18; // Hız artışı n.destroy(); nitros.splice(i, 1); // Görsel efekt: arabayı maviye flashla LK.effects.flashObject(player, 0x00cfff, 400); continue; } } // Nitro etkisi if (nitroActive) { nitroTimer--; if (nitroTimer > 0) { // Hızlı ilerle: yol, ağaçlar, düşmanlar, chaserCar daha hızlı hareket eder for (var i = 0; i < roadLines.length; i++) roadLines[i].y += playerSpeedBoost; for (var i = 0; i < leftTrees.length; i++) leftTrees[i].y += playerSpeedBoost; for (var i = 0; i < rightTrees.length; i++) rightTrees[i].y += playerSpeedBoost; for (var i = 0; i < leftTreeZones.length; i++) leftTreeZones[i].y += playerSpeedBoost; for (var i = 0; i < rightTreeZones.length; i++) rightTreeZones[i].y += playerSpeedBoost; for (var i = 0; i < enemyCars.length; i++) enemyCars[i].y += playerSpeedBoost; chaserCar.y += playerSpeedBoost * 0.7; // Araba kadrajdan çıkmasın: player.y görsel olarak ileri kayarken sınırla var playerVisualMove = playerSpeedBoost * 0.5; var playerMinY = 300 + player.height / 2; // Üst sınır (ekranda kalacak şekilde) var playerMaxY = GAME_HEIGHT - 500; // Alt sınır (başlangıç pozisyonu) var newPlayerY = player.y + playerVisualMove; if (newPlayerY < playerMinY) { player.y = playerMinY; } else if (newPlayerY > playerMaxY) { player.y = playerMaxY; } else { player.y = newPlayerY; } distance += Math.floor(playerSpeedBoost * 0.7); } else { nitroActive = false; playerSpeedBoost = 0; } } // Yeni engel oluştur enemySpawnTick++; var currentSpawnInterval = getEnemySpawnInterval(); if (enemySpawnTick >= currentSpawnInterval) { enemySpawnTick = 0; // Rastgele bir veya iki şeride engel koy var lanes = [0, 1, 2, 3]; // %60 tek araba, %40 iki araba var count = Math.random() < 0.6 ? 1 : 2; for (var j = 0; j < count; j++) { if (lanes.length === 0) break; var idx = Math.floor(Math.random() * lanes.length); var lane = lanes[idx]; lanes.splice(idx, 1); var enemy = new EnemyCar(); enemy.x = LANE_X[lane]; // Soldaki iki şerit (0 ve 1) için de aşağı doğru giden araba oluştur enemy.y = -200; enemy.direction = 1; // Aşağı hareket game.addChild(enemy); enemyCars.push(enemy); } } }; // Oyun yeniden başlatıldığında sıfırla game.on('reset', function () { // Arabaları ve çizgileri sil for (var i = 0; i < enemyCars.length; i++) { enemyCars[i].destroy(); } enemyCars = []; // Nitro'ları sil for (var i = 0; i < nitros.length; i++) { nitros[i].destroy(); } nitros = []; // ChaserCar'ı sıfırla chaserCar.x = player.x; chaserCar.y = GAME_HEIGHT + 400; chaserCar.targetY = player.y + 600; nitroActive = false; nitroTimer = 0; playerSpeedBoost = 0; distance = 0; scoreTxt.setText('0'); isGameOver = false; player.lane = 1; player.x = LANE_X[1]; player.y = GAME_HEIGHT - 500; updateHighScore(); // Menüye geri dön isMenu = true; isCarSelect = false; if (menuOverlay) menuOverlay.visible = true; // Reset car selection to default selectedPlayerCarAsset = 'playerCar'; selectedEnemyCarAssets = []; // Müzik başlat (menüde) });
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Arkadan kovalayan düşman araba
var ChaserCar = Container.expand(function () {
var self = Container.call(this);
var car = self.attachAsset('chaserCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = car.width;
self.height = car.height;
self.speed = 12; // Başlangıç hızı
self.targetY = 0; // Hedef y (player'ın arkasında başlar)
self.update = function () {
// Oyuncuya yaklaş
if (self.y < self.targetY) {
self.y += self.speed;
if (self.y > self.targetY) self.y = self.targetY;
}
};
return self;
});
// Düz ve ters giden engel arabalar
var EnemyCar = Container.expand(function () {
var self = Container.call(this);
// Farklı tipte araba şekilleri ve renkleri
var carTypes = [{
asset: 'enemyCar',
shape: 'box'
}, {
asset: 'enemyCarRed',
shape: 'box'
}, {
asset: 'enemyCarBlue',
shape: 'box'
}, {
asset: 'enemyCarYellow',
shape: 'box'
}, {
asset: 'enemyCarGreen',
shape: 'ellipse'
}, {
asset: 'enemyCarPurple',
shape: 'box'
}, {
asset: 'enemyCar',
shape: 'ellipse'
}, {
asset: 'enemyCarRed',
shape: 'ellipse'
}, {
asset: 'enemyCarBlue',
shape: 'ellipse'
}, {
asset: 'enemyCarYellow',
shape: 'ellipse'
}, {
asset: 'enemyCarGreen',
shape: 'box'
}, {
asset: 'enemyCarPurple',
shape: 'ellipse'
}, {
asset: 'enemyCar',
shape: 'box'
}, {
asset: 'enemyCarRed',
shape: 'box'
}, {
asset: 'enemyCarBlue',
shape: 'box'
}, {
asset: 'enemyCarYellow',
shape: 'box'
},
// 10 yeni çeşit
{
asset: 'enemyCarOrange',
shape: 'box'
}, {
asset: 'enemyCarPink',
shape: 'ellipse'
}, {
asset: 'enemyCarCyan',
shape: 'box'
}, {
asset: 'enemyCarBlack',
shape: 'ellipse'
}, {
asset: 'enemyCarWhite',
shape: 'box'
}, {
asset: 'enemyCarBrown',
shape: 'ellipse'
}, {
asset: 'enemyCarSilver',
shape: 'box'
}, {
asset: 'enemyCarGold',
shape: 'ellipse'
}, {
asset: 'enemyCarNavy',
shape: 'box'
}, {
asset: 'enemyCarLime',
shape: 'ellipse'
},
// 3 yeni çeşit (arttırıldı)
{
asset: 'enemyCarBlack',
shape: 'box'
}, {
asset: 'enemyCarCyan',
shape: 'ellipse'
}, {
asset: 'enemyCarBrown',
shape: 'box'
}];
// If selectedEnemyCarAssets is set, filter carTypes
if (typeof selectedEnemyCarAssets !== 'undefined' && selectedEnemyCarAssets && selectedEnemyCarAssets.length > 0) {
var filtered = [];
for (var i = 0; i < carTypes.length; i++) {
if (selectedEnemyCarAssets.indexOf(carTypes[i].asset) !== -1) {
filtered.push(carTypes[i]);
}
}
if (filtered.length > 0) carTypes = filtered;
}
// Rastgele bir tip seç
var typeIdx = Math.floor(Math.random() * carTypes.length);
var carType = carTypes[typeIdx];
var car = self.attachAsset(carType.asset, {
anchorX: 0.5,
anchorY: 0.5
});
self.width = car.width;
self.height = car.height;
self.speed = 18; // Varsayılan hız (aşağı)
self.direction = 1; // 1: aşağı, -1: yukarı (ters)
self.update = function () {
self.y += self.speed * self.direction;
};
return self;
});
// Nitro power-up
var Nitro = Container.expand(function () {
var self = Container.call(this);
var nitro = self.attachAsset('nitro', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = nitro.width;
self.height = nitro.height;
self.speed = 24;
self.lane = 1;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Oyuncu arabası
var PlayerCar = Container.expand(function () {
var self = Container.call(this);
// Use selectedPlayerCarAsset if set, fallback to 'playerCar'
var asset = typeof selectedPlayerCarAsset !== 'undefined' && selectedPlayerCarAsset ? selectedPlayerCarAsset : 'playerCar';
var car = self.attachAsset(asset, {
anchorX: 0.5,
anchorY: 0.5
});
self.width = car.width;
self.height = car.height;
return self;
});
// Yol çizgisi (hareketli)
var RoadLine = Container.expand(function () {
var self = Container.call(this);
var line = self.attachAsset('roadLine', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = line.width;
self.height = line.height;
self.speed = 24;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Yan ağaçlar (sol ve sağ)
var TreeLeft = Container.expand(function () {
var self = Container.call(this);
var tree = self.attachAsset('treeLeft', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = tree.width;
self.height = tree.height;
self.speed = 24;
self.update = function () {
self.y += self.speed;
};
return self;
});
var TreeRight = Container.expand(function () {
var self = Container.call(this);
var tree = self.attachAsset('treeRight', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = tree.width;
self.height = tree.height;
self.speed = 24;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Tree bottom zone (left)
var TreeZoneLeft = Container.expand(function () {
var self = Container.call(this);
var zone = self.attachAsset('treeZoneLeft', {
anchorX: 0.5,
anchorY: 0.0
});
self.width = zone.width;
self.height = zone.height;
self.speed = 24;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Tree bottom zone (right)
var TreeZoneRight = Container.expand(function () {
var self = Container.call(this);
var zone = self.attachAsset('treeZoneRight', {
anchorX: 0.5,
anchorY: 0.0
});
self.width = zone.width;
self.height = zone.height;
self.speed = 24;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// Nitro asset
// Chasing enemy car asset (arkadan kovalayan düşman)
// Köprü ve arka plan için özelleştirilebilir assetler
// 10 yeni çeşit için ek varlıklar
// Oyun alanı boyutları
// Köprü ve arka planı ekle
// Tree bottom zone assets (customize these IDs as needed)
var backgroundImg = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(backgroundImg);
var bridgeImg = LK.getAsset('bridge', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(bridgeImg);
// Oyuncu arabası (kırmızı kutu)
// Engeller (gri kutu)
// Yol çizgisi (beyaz ince kutu)
// Yan ağaçlar için basit şekil (dilerseniz image ile de değiştirebilirsiniz)
// Play button asset (customizable)
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
// Yolun genişliği ve şeritler
var ROAD_WIDTH = 1200;
var ROAD_LEFT = (GAME_WIDTH - ROAD_WIDTH) / 2;
var ROAD_RIGHT = ROAD_LEFT + ROAD_WIDTH;
// Şerit sayısı ve pozisyonları
var LANE_COUNT = 4;
var LANE_WIDTH = ROAD_WIDTH / LANE_COUNT;
var LANE_X = [ROAD_LEFT + LANE_WIDTH * 0.5, ROAD_LEFT + LANE_WIDTH * 1.5, ROAD_LEFT + LANE_WIDTH * 2.5, ROAD_LEFT + LANE_WIDTH * 3.5];
// Yol çizgileri
var roadLines = [];
// Yan ağaçlar
var leftTrees = [];
var rightTrees = [];
// Tree bottom zones
var leftTreeZones = [];
var rightTreeZones = [];
function spawnRoadLines() {
// Her şeridin ortasına, aralıklı çizgiler
for (var lane = 0; lane < LANE_COUNT; lane++) {
for (var i = 0; i < 8; i++) {
var line = new RoadLine();
line.x = ROAD_LEFT + LANE_WIDTH * (lane + 0.5);
line.y = i * 400;
roadLines.push(line);
game.addChild(line);
}
}
// Sol ve sağ kenara ağaçlar ve altındaki bölgeler
for (var i = 0; i < 8; i++) {
var leftTree = new TreeLeft();
leftTree.x = ROAD_LEFT - 120; // Sol kenarın biraz dışında
leftTree.y = i * 400;
leftTrees.push(leftTree);
game.addChild(leftTree);
var rightTree = new TreeRight();
rightTree.x = ROAD_RIGHT + 120; // Sağ kenarın biraz dışında
rightTree.y = i * 400;
rightTrees.push(rightTree);
game.addChild(rightTree);
// Tree bottom zones
var leftZone = new TreeZoneLeft();
leftZone.x = ROAD_LEFT - 120;
leftZone.y = leftTree.y + leftTree.height / 2; // Ağacın altına hizala
leftTreeZones.push(leftZone);
game.addChild(leftZone);
var rightZone = new TreeZoneRight();
rightZone.x = ROAD_RIGHT + 120;
rightZone.y = rightTree.y + rightTree.height / 2;
rightTreeZones.push(rightZone);
game.addChild(rightZone);
}
}
spawnRoadLines();
// Oyuncu arabası
var player = new PlayerCar();
player.lane = 1; // Ortadaki şerit
player.x = LANE_X[player.lane];
player.y = GAME_HEIGHT - 500;
game.addChild(player);
// Arkadan kovalayan düşman araba
var chaserCar = new ChaserCar();
chaserCar.x = player.x;
chaserCar.y = GAME_HEIGHT + 400; // Ekranın dışında başlat
chaserCar.targetY = player.y + 600; // Oyuncunun arkasında başlat
game.addChild(chaserCar);
// Nitro power-up'lar
var nitros = [];
var nitroSpawnTick = 0;
var NITRO_SPAWN_INTERVAL = 180; // 3 saniyede bir
var nitroActive = false;
var nitroTimer = 0;
var NITRO_DURATION = 120; // 2 saniye
var playerSpeedBoost = 0;
// Engeller
var enemyCars = [];
var ENEMY_SPAWN_INTERVAL_BASE = 60; // Başlangıçta 60 tickte bir (1 sn)
var ENEMY_SPAWN_INTERVAL_MIN = 18; // Minimum 0.3 sn (18 tick)
var enemySpawnTick = 0;
function getEnemySpawnInterval() {
// Mesafe arttıkça interval azalır, minimuma kadar iner
// 0-2000 arası 60, 2000'den sonra 30'a kadar iner, 6000'den sonra 18'e kadar iner (daha yavaş artış)
if (distance < 2000) return ENEMY_SPAWN_INTERVAL_BASE;
if (distance < 6000) return Math.max(ENEMY_SPAWN_INTERVAL_BASE - Math.floor((distance - 2000) / 133), 30);
return ENEMY_SPAWN_INTERVAL_MIN;
}
// Skor
var distance = 0;
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// En yüksek skor (oyun başında sıfır)
var highScore = 0;
var highScoreTxt = new Text2('', {
size: 60,
fill: 0xFFFF00
});
highScoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreTxt);
function updateHighScore() {
if (distance > highScore) highScore = distance;
highScoreTxt.setText('En Yüksek: ' + highScore);
}
updateHighScore();
// Sürükleme için
var dragStartX = null;
var dragStartLane = null;
// Oyun bitti mi?
var isGameOver = false;
// Menu state
var isMenu = true;
var isCarSelect = false;
var selectedPlayerCarAsset = 'playerCar'; // default
var selectedEnemyCarAssets = []; // if empty, all types used
// Car asset list for selection (player and enemy)
var allCarAssets = ['playerCar', 'enemyCar', 'enemyCarRed', 'enemyCarBlue', 'enemyCarYellow', 'enemyCarGreen', 'enemyCarPurple', 'enemyCarOrange', 'enemyCarPink', 'enemyCarCyan', 'enemyCarBlack', 'enemyCarWhite', 'enemyCarBrown', 'enemyCarSilver', 'enemyCarGold', 'enemyCarNavy', 'enemyCarLime'];
// Menu overlay and play button
var menuOverlay = new Container();
var playButton = LK.getAsset('playButton', {
anchorX: 0.5,
anchorY: 0.5,
x: GAME_WIDTH / 2,
y: GAME_HEIGHT / 2 + 200
});
menuOverlay.addChild(playButton);
// Car select button
var carSelectButton = LK.getAsset('carSelectButton', {
anchorX: 0.5,
anchorY: 0.5,
x: GAME_WIDTH / 2,
y: GAME_HEIGHT / 2 + 800 // moved further down
});
menuOverlay.addChild(carSelectButton);
// Optionally, add a game title
var titleText = new Text2('ARABA YARIŞI', {
size: 140,
fill: 0xFFF700
});
titleText.anchor.set(0.5, 0.5);
titleText.x = GAME_WIDTH / 2;
titleText.y = GAME_HEIGHT / 2 - 200;
menuOverlay.addChild(titleText);
game.addChild(menuOverlay);
// Car select overlay
var carSelectOverlay = new Container();
carSelectOverlay.visible = false;
game.addChild(carSelectOverlay);
// Car select grid
var carSelectButtons = [];
var carSelectTitle = new Text2('ARABA SEÇ', {
size: 120,
fill: 0xFFF700
});
carSelectTitle.anchor.set(0.5, 0.5);
carSelectTitle.x = GAME_WIDTH / 2;
carSelectTitle.y = 300;
carSelectOverlay.addChild(carSelectTitle);
// Layout grid
var gridCols = 4;
var gridRows = Math.ceil(allCarAssets.length / gridCols);
var gridStartX = GAME_WIDTH / 2 - gridCols * 350 / 2 + 175;
var gridStartY = 500;
for (var i = 0; i < allCarAssets.length; i++) {
var asset = allCarAssets[i];
var btn = LK.getAsset(asset, {
anchorX: 0.5,
anchorY: 0.5,
x: gridStartX + i % gridCols * 350,
y: gridStartY + Math.floor(i / gridCols) * 400
});
carSelectOverlay.addChild(btn);
carSelectButtons.push({
btn: btn,
asset: asset
});
}
// Car select back button
var carSelectBackBtn = new Text2('GERİ', {
size: 80,
fill: 0xFFFFFF
});
carSelectBackBtn.anchor.set(0.5, 0.5);
carSelectBackBtn.x = GAME_WIDTH / 2;
carSelectBackBtn.y = GAME_HEIGHT - 300;
carSelectOverlay.addChild(carSelectBackBtn);
// Only handle tap for menu or game or car select
game.down = function (x, y, obj) {
if (isMenu) {
// Play button
var bx = playButton.x,
by = playButton.y,
bw = playButton.width,
bh = playButton.height;
if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) {
isMenu = false;
menuOverlay.visible = false;
return;
}
// Car select button
var csx = carSelectButton.x,
csy = carSelectButton.y,
csw = carSelectButton.width,
csh = carSelectButton.height;
if (x >= csx - csw / 2 && x <= csx + csw / 2 && y >= csy - csh / 2 && y <= csy + csh / 2) {
isMenu = false;
isCarSelect = true;
menuOverlay.visible = false;
carSelectOverlay.visible = true;
return;
}
return;
}
if (isCarSelect) {
// Car select grid
for (var i = 0; i < carSelectButtons.length; i++) {
var btn = carSelectButtons[i].btn;
var bx = btn.x,
by = btn.y,
bw = btn.width,
bh = btn.height;
if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) {
selectedPlayerCarAsset = carSelectButtons[i].asset;
isCarSelect = false;
carSelectOverlay.visible = false;
// Reset player car
player.destroy();
player = new PlayerCar();
player.lane = 1;
player.x = LANE_X[player.lane];
player.y = GAME_HEIGHT - 500;
game.addChild(player);
menuOverlay.visible = false;
isMenu = false;
return;
}
}
// Back button
var bbx = carSelectBackBtn.x,
bby = carSelectBackBtn.y;
var bbw = 200,
bbh = 120;
if (x >= bbx - bbw / 2 && x <= bbx + bbw / 2 && y >= bby - bbh / 2 && y <= bby + bbh / 2) {
isCarSelect = false;
carSelectOverlay.visible = false;
isMenu = true;
menuOverlay.visible = true;
return;
}
return;
}
// Game controls
if (x > GAME_WIDTH / 2) {
movePlayerToLane(player.lane + 1);
} else {
movePlayerToLane(player.lane - 1);
}
};
// Oyun hareketleri
function movePlayerToLane(lane) {
if (lane < 0) lane = 0;
if (lane > LANE_COUNT - 1) lane = LANE_COUNT - 1;
if (lane !== player.lane) {
player.lane = lane;
// Yumuşak geçiş animasyonu
tween(player, {
x: LANE_X[lane]
}, {
duration: 120,
easing: tween.cubicOut
});
// Araba hareket sesi çal
LK.getSound('Carsound').play();
}
}
// Dokunma ile sağ/sola bir şerit hareket
// (removed duplicate game.down, handled above with overlay forwarding)
game.move = function (x, y, obj) {
// Hareket gerekmez, tap ile kontrol
};
game.up = function (x, y, obj) {
// Gerekli değil, tap ile kontrol
};
// Çarpışma kontrolü
function checkCollision(a, b) {
// Basit dikdörtgen çarpışma
return Math.abs(a.x - b.x) < (a.width + b.width) / 2 - 20 && Math.abs(a.y - b.y) < (a.height + b.height) / 2 - 20;
}
// Oyun güncelleme
game.update = function () {
if (isMenu) {
return;
}
if (isCarSelect) {
return;
}
if (isGameOver) {
return;
}
// Müzik başlat (her zaman)
if (!LK.isMusicPlaying || !LK.isMusicPlaying('A')) {
LK.playMusic('A', {
loop: true
});
}
// Skor: mesafe arttıkça artar
distance += 1;
scoreTxt.setText(distance);
updateHighScore();
// Yol çizgilerini hareket ettir
for (var i = 0; i < roadLines.length; i++) {
var line = roadLines[i];
line.update();
if (line.y > GAME_HEIGHT + 100) {
line.y -= 8 * 400;
}
}
// Sol ağaçları hareket ettir
for (var i = 0; i < leftTrees.length; i++) {
var tree = leftTrees[i];
tree.update();
if (tree.y > GAME_HEIGHT + 100) {
tree.y -= 8 * 400;
}
}
// Sağ ağaçları hareket ettir
for (var i = 0; i < rightTrees.length; i++) {
var tree = rightTrees[i];
tree.update();
if (tree.y > GAME_HEIGHT + 100) {
tree.y -= 8 * 400;
}
}
// Sol ağaç altı bölgeleri hareket ettir
for (var i = 0; i < leftTreeZones.length; i++) {
var zone = leftTreeZones[i];
zone.update();
if (zone.y > GAME_HEIGHT + 100) {
zone.y -= 8 * 400;
}
}
// Sağ ağaç altı bölgeleri hareket ettir
for (var i = 0; i < rightTreeZones.length; i++) {
var zone = rightTreeZones[i];
zone.update();
if (zone.y > GAME_HEIGHT + 100) {
zone.y -= 8 * 400;
}
}
// Engelleri hareket ettir
for (var i = enemyCars.length - 1; i >= 0; i--) {
var enemy = enemyCars[i];
enemy.update();
// Ekrandan çıktıysa sil
if (enemy.direction === 1 && enemy.y > GAME_HEIGHT + 200 || enemy.direction === -1 && enemy.y < -200) {
enemy.destroy();
enemyCars.splice(i, 1);
continue;
}
// Çarpışma kontrolü
if (checkCollision(player, enemy)) {
isGameOver = true;
// Çarpışma anında oyuncu arabasına görsel efekt uygula
LK.effects.flashObject(player, 0xff0000, 800);
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
// Arkadan kovalayan düşman araba hareketi ve çarpışma
chaserCar.x = player.x;
chaserCar.targetY = player.y + 600 - distance / 10; // Mesafe arttıkça yaklaşsın
if (chaserCar.targetY < player.y + 200) chaserCar.targetY = player.y + 200; // Minimum mesafe
chaserCar.update();
// Çarpışma kontrolü (chaserCar)
if (checkCollision(player, chaserCar)) {
isGameOver = true;
LK.effects.flashObject(player, 0xff0000, 800);
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Nitro spawn ve hareket
nitroSpawnTick++;
if (nitroSpawnTick >= NITRO_SPAWN_INTERVAL) {
nitroSpawnTick = 0;
// Rastgele bir şeride nitro koy
var lane = Math.floor(Math.random() * LANE_COUNT);
var nitro = new Nitro();
nitro.x = LANE_X[lane];
nitro.y = -150;
nitro.lane = lane;
game.addChild(nitro);
nitros.push(nitro);
}
// Nitro'ları hareket ettir ve topla
for (var i = nitros.length - 1; i >= 0; i--) {
var n = nitros[i];
n.update();
if (n.y > GAME_HEIGHT + 200) {
n.destroy();
nitros.splice(i, 1);
continue;
}
// Toplama kontrolü
if (!nitroActive && checkCollision(player, n)) {
nitroActive = true;
nitroTimer = NITRO_DURATION;
playerSpeedBoost = 18; // Hız artışı
n.destroy();
nitros.splice(i, 1);
// Görsel efekt: arabayı maviye flashla
LK.effects.flashObject(player, 0x00cfff, 400);
continue;
}
}
// Nitro etkisi
if (nitroActive) {
nitroTimer--;
if (nitroTimer > 0) {
// Hızlı ilerle: yol, ağaçlar, düşmanlar, chaserCar daha hızlı hareket eder
for (var i = 0; i < roadLines.length; i++) roadLines[i].y += playerSpeedBoost;
for (var i = 0; i < leftTrees.length; i++) leftTrees[i].y += playerSpeedBoost;
for (var i = 0; i < rightTrees.length; i++) rightTrees[i].y += playerSpeedBoost;
for (var i = 0; i < leftTreeZones.length; i++) leftTreeZones[i].y += playerSpeedBoost;
for (var i = 0; i < rightTreeZones.length; i++) rightTreeZones[i].y += playerSpeedBoost;
for (var i = 0; i < enemyCars.length; i++) enemyCars[i].y += playerSpeedBoost;
chaserCar.y += playerSpeedBoost * 0.7;
// Araba kadrajdan çıkmasın: player.y görsel olarak ileri kayarken sınırla
var playerVisualMove = playerSpeedBoost * 0.5;
var playerMinY = 300 + player.height / 2; // Üst sınır (ekranda kalacak şekilde)
var playerMaxY = GAME_HEIGHT - 500; // Alt sınır (başlangıç pozisyonu)
var newPlayerY = player.y + playerVisualMove;
if (newPlayerY < playerMinY) {
player.y = playerMinY;
} else if (newPlayerY > playerMaxY) {
player.y = playerMaxY;
} else {
player.y = newPlayerY;
}
distance += Math.floor(playerSpeedBoost * 0.7);
} else {
nitroActive = false;
playerSpeedBoost = 0;
}
}
// Yeni engel oluştur
enemySpawnTick++;
var currentSpawnInterval = getEnemySpawnInterval();
if (enemySpawnTick >= currentSpawnInterval) {
enemySpawnTick = 0;
// Rastgele bir veya iki şeride engel koy
var lanes = [0, 1, 2, 3];
// %60 tek araba, %40 iki araba
var count = Math.random() < 0.6 ? 1 : 2;
for (var j = 0; j < count; j++) {
if (lanes.length === 0) break;
var idx = Math.floor(Math.random() * lanes.length);
var lane = lanes[idx];
lanes.splice(idx, 1);
var enemy = new EnemyCar();
enemy.x = LANE_X[lane];
// Soldaki iki şerit (0 ve 1) için de aşağı doğru giden araba oluştur
enemy.y = -200;
enemy.direction = 1; // Aşağı hareket
game.addChild(enemy);
enemyCars.push(enemy);
}
}
};
// Oyun yeniden başlatıldığında sıfırla
game.on('reset', function () {
// Arabaları ve çizgileri sil
for (var i = 0; i < enemyCars.length; i++) {
enemyCars[i].destroy();
}
enemyCars = [];
// Nitro'ları sil
for (var i = 0; i < nitros.length; i++) {
nitros[i].destroy();
}
nitros = [];
// ChaserCar'ı sıfırla
chaserCar.x = player.x;
chaserCar.y = GAME_HEIGHT + 400;
chaserCar.targetY = player.y + 600;
nitroActive = false;
nitroTimer = 0;
playerSpeedBoost = 0;
distance = 0;
scoreTxt.setText('0');
isGameOver = false;
player.lane = 1;
player.x = LANE_X[1];
player.y = GAME_HEIGHT - 500;
updateHighScore();
// Menüye geri dön
isMenu = true;
isCarSelect = false;
if (menuOverlay) menuOverlay.visible = true;
// Reset car selection to default
selectedPlayerCarAsset = 'playerCar';
selectedEnemyCarAssets = [];
// Müzik başlat (menüde)
});
Peugeot pars arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Bmw e60 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Renault l90 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Gri Dodge challenger 2014 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Beyaz Peugeot 405 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Kirmizi Irankhodro samand arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Beyaz saipa pride 131 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Turuncu mazda rx7 arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Cheverleot camaro ss arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Yeni porche 911 arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Yeni ford mustang arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Citroen xantia arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Zamyad neysan arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Lambirghini aventador arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Gri mercedes benz cls arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Acik mavi Bmw m4 arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
Usntunde play yazan araba temali mavi bir dugme. In-Game asset. 2d. High contrast. No shadows
Car yazili araba temali turuncu ve daire bir dugme. In-Game asset. 2d. High contrast. No shadows
Mavi ve asiri Spor olarak ozellestirilmis bir peugeot 206 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
Tam olarak yukaridan gorunen seritsiz duz bir yol. In-Game asset. 2d. High contrast. No shadows
Modern sokak lambasi. In-Game asset. 2d. High contrast. No shadows
Nitro. In-Game asset. 2d. High contrast. No shadows