User prompt
Menu de birde araba sec butonu olsun ve ona basinca dusman arabalari ve oyuncu arabasinda olusab bir sayfa olsun ve hangi araba secilirse o araba oyuncu arabasi olsun ve ok tusuna basinca oyun baslasin
User prompt
En basta menu olsun
User prompt
Agaclar daha buyuk olsun
User prompt
En sag ve en sol taraflarda agac olmali
User prompt
En basta bir menu olmali ve bir oyna birde araba seç tusu olnali
User prompt
Sag dokununca araba bir cizgi sag ve sola dokununca bir cizgi sola hareket ersin
User prompt
Dusman arabalari nin cesitliligi 10 tane daha fazla olsun
User prompt
Dusman arabalari cesitliligi 10 tane daha fazla olsun
User prompt
Yanlarda agac olsun
User prompt
Ilerledikce dusman arabalar daha fazla spawn olmali
User prompt
Araba larin boyutlari daha fazla olmali
User prompt
Dusman arabalarin cesitliligi daha fazla olsun
User prompt
Soldan 2 cizgi de ilerleyen arabalarin hizi digerleri gibi olsun ama asagi dogru hareket etsenler
User prompt
4 tane yol cizgisi olsun ve soldan 2 tane cizgideki arabalar ters yonde ilerlesin
Code edit (1 edits merged)
Please save this source code
User prompt
Yukarıya Kaçış: Araba Yarışı
Initial prompt
Arabanin surekli olarak yukari hareket etdigi bi araba oyunu yolda ilerlerken yolda duz bir sekilde hareket eden baska arabalarda olmali
/**** * 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