/**** * Classes ****/ // ALFRomeo class var ALFRomeo = Container.expand(function () { var self = Container.call(this); var alfaRomeoGraphics = self.attachAsset('ALFRomeo', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.23 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // AiDU class var AiDU = Container.expand(function () { var self = Container.call(this); var audiGraphics = self.attachAsset('AiDU', { anchorX: 0.5, anchorY: 0.5, scaleX: 384.17 / 384.17, scaleY: 922.01 / 922.01 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // AiphaTauri class var AiphaTauri = Container.expand(function () { var self = Container.call(this); var aiphaTauriGraphics = self.attachAsset('AiphaTauri', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.83, scaleY: 0.96 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // Aipine class var Aipine = Container.expand(function () { var self = Container.call(this); var aipineGraphics = self.attachAsset('Aipine', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // AshtonMartin class var AshtonMartin = Container.expand(function () { var self = Container.call(this); var astonMartinGraphics = self.attachAsset('AshtonMartin', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.91, scaleY: 0.98 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // BMiWMotorsport50YearAnniversary class var BMiWMotorsport50YearAnniversary = Container.expand(function () { var self = Container.call(this); var bmw50AnniversaryGraphics = self.attachAsset('BMiWMotorsport50YearAnniversary', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // BMiW Willaims class var BMiWWillaims = Container.expand(function () { var self = Container.call(this); var bmwGraphics = self.attachAsset('BMiWWillaims', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.95, scaleY: 0.98 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // BarRonda class var BarRonda = Container.expand(function () { var self = Container.call(this); var barRondaGraphics = self.attachAsset('BarRonda', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.97, scaleY: 0.95 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var BlueBull = Container.expand(function () { var self = Container.call(this); var blueBullGraphics = self.attachAsset('BlueBull', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.89 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var BrainGP = Container.expand(function () { var self = Container.call(this); var brainGPGraphics = self.attachAsset('BrainGP', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var Cadillaic = Container.expand(function () { var self = Container.call(this); var cadillaicGraphics = self.attachAsset('Cadillaic', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); //<Assets used in the game will automatically appear here> // Car class var Car = Container.expand(function () { var self = Container.call(this); var carGraphics = self.attachAsset('RealBull', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0; self.maxSpeed = 10 * 1.7; self.acceleration = 0.2 * 1.7; self.deceleration = 0.1 * 1.7; self.update = function () { self.y -= self.speed; if (self.speed > 0) { self.speed -= self.deceleration; } }; self.accelerate = function () { if (self.speed < self.maxSpeed) { self.speed += self.acceleration; } }; }); var FRVR = Container.expand(function () { var self = Container.call(this); var frvrGraphics = self.attachAsset('FRVR', { anchorX: 0.5, anchorY: 0.5, scaleX: 370 / 370, scaleY: 760 / 760 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // FerrAi class var FerrAi = Container.expand(function () { var self = Container.call(this); var ferrAiGraphics = self.attachAsset('FerrAi', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 0.95 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // ForceIndAi class var ForceIndAi = Container.expand(function () { var self = Container.call(this); var forceIndAiGraphics = self.attachAsset('ForceIndAi', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.83, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // Grid class var Grid = Container.expand(function () { var self = Container.call(this); var gridGraphics = self.attachAsset('grid', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.destroy(); var index = grids.indexOf(self); if (index > -1) { grids.splice(index, 1); } } }; }); // Jaguair class var Jaguair = Container.expand(function () { var self = Container.call(this); var jaguairGraphics = self.attachAsset('Jaguair', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // Jordain class var Jordain = Container.expand(function () { var self = Container.call(this); var jordainGraphics = self.attachAsset('Jordain', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.95, scaleY: 0.98 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // McLairen class var McLairen = Container.expand(function () { var self = Container.call(this); var mclairenGraphics = self.attachAsset('McLairen', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 0.91 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // MacLaren Ayrton Senna class var McLairenBrasil = Container.expand(function () { var self = Container.call(this); var mclarenGraphics = self.attachAsset('McLairenBrasil', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 0.91 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var McLairenMP4 = Container.expand(function () { var self = Container.call(this); var mclarenMP4Graphics = self.attachAsset('McLairenMP4', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 0.91 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // McLairenMercedesz class var McLairenMercedesz = Container.expand(function () { var self = Container.call(this); var mclarenMercedesGraphics = self.attachAsset('McLairenMercedesz', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.91 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // McLairen Ronda MP4-30 (2015) class var McLairenRondaMP4302015 = Container.expand(function () { var self = Container.call(this); var mclarenRondaGraphics = self.attachAsset('McLairenRondaMP4302015', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // Mercedesz2000 class var Mercedesz2000 = Container.expand(function () { var self = Container.call(this); var mercedesz2000Graphics = self.attachAsset('Mercedesz2000', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var MercedeszAiGPerformance = Container.expand(function () { var self = Container.call(this); var mercedeszAiGPerformanceGraphics = self.attachAsset('MercedeszAiGPerformance', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // MercedeszAiGPetronais class var MercedeszAiGPetronais = Container.expand(function () { var self = Container.call(this); var mercedesGraphics = self.attachAsset('MercedeszAiGPetronais', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.79, scaleY: 0.96 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var Porshe = Container.expand(function () { var self = Container.call(this); var porsheGraphics = self.attachAsset('Porshe', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // RealBull class var RealBull = Container.expand(function () { var self = Container.call(this); var realBullGraphics = self.attachAsset('RealBull', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // Renaiult class var Renaiult = Container.expand(function () { var self = Container.call(this); var renaultGraphics = self.attachAsset('Renaiult', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var RenaiultTelefonica = Container.expand(function () { var self = Container.call(this); var renaiultTelefonicaGraphics = self.attachAsset('RenaiultTelefonai', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // SaiberKick class var SaiberKick = Container.expand(function () { var self = Container.call(this); var saiberKickGraphics = self.attachAsset('SaiberKick', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // SaiberPetronais class var SaiberPetronais = Container.expand(function () { var self = Container.call(this); var saiberGraphics = self.attachAsset('SaiberPetronais', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.89, scaleY: 0.94 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); var TOTOYA = Container.expand(function () { var self = Container.call(this); var tGraphics = self.attachAsset('TOTOYA', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); // Williams class var Willaims = Container.expand(function () { var self = Container.call(this); var williamsGraphics = self.attachAsset('Willaims', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.02 }); self.speed = 5 / 1.5 * 2 * 1.7; self.update = function () { self.y += self.speed; if (self.y > 2732 || obstacles.length > 4) { self.destroy(); var index = obstacles.indexOf(self); if (index > -1) { obstacles.splice(index, 1); } } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Play background music LK.playMusic('v', { loop: true }); function countCarType(carType) { return obstacles.filter(function (obstacle) { return obstacle.constructor.name === carType; }).length; } // Add keyboard event listeners for controlling the player's car var keys = {}; game.on('keydown', function (event) { keys[event.code] = true; if (event.code === 'KeyA') { car.x -= car.speed; } }); game.on('keyup', function (event) { keys[event.code] = false; }); var racetrackSpeed = 0; var racetrackAcceleration = 4; var racetrack = LK.getAsset('racetrack', { anchorX: 0.5, anchorY: 0.5, scaleX: 2048 / 2000, scaleY: 2732 / 2850, x: 2048 / 2, y: 0 }); game.addChild(racetrack); var racetrack2 = LK.getAsset('racetrack', { anchorX: 0.5, anchorY: 0.5, scaleX: 2048 / 2000, scaleY: 2732 / 2850, x: 2048 / 2, y: -2732 }); game.addChild(racetrack2); var leftFrame = LK.getAsset('leftFrame', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(leftFrame); var closingLine1 = LK.getAsset('closingLine1', { anchorX: 0, anchorY: 0, x: 50, y: 0 }); game.addChild(closingLine1); var rightFrame = LK.getAsset('rightFrame', { anchorX: 1, anchorY: 0, x: 2048, y: 0 }); game.addChild(rightFrame); var closingLine2 = LK.getAsset('closingLine2', { anchorX: 1, anchorY: 0, x: 2048 - 50, y: 0 }); game.addChild(closingLine2); var grids = []; for (var i = 0; i < 5; i++) { var grid = new Grid(); grid.x = i % 2 === 0 ? 524 : 1524; // Alternate left and right grid.y = 2732 - 1000 - i * 1000; // Ensure all grids are positioned at the same distance apart if (!grids.some(function (existingGrid) { return existingGrid.x === grid.x && existingGrid.y === grid.y; })) { game.addChild(grid); grids.push(grid); } } game.addChild(car); var overtakenObstacles = 0; var car = game.addChild(new Car()); car.x = 524; // Start from the grid on the left side of the map car.y = 2732 - 200 - 277 + 25; var obstacles = []; var carTypeLoadCounts = {}; var score = 0; var lastSpawnTick = 0; var scoreTxt = new Text2('0', { size: 30, // Reduced to one-fifth fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 1); // Adjust anchor for bottom-left positioning LK.gui.bottomLeft.addChild(scoreTxt); // Move to bottom-left corner var timeTxt = new Text2('Current time: 0-0-0-0-0-0', { size: 30, // Same size as scoreTxt fill: 0xFFFFFF }); timeTxt.anchor.set(0.5, 1); // Centered at the bottom LK.gui.bottom.addChild(timeTxt); // Add to bottom center function spawnObstacle() { if (obstacles.length >= 3) { return; } // Limit to a maximum of three cars on the track var carTypes = [RealBull, BlueBull, FerrAi, Willaims, MercedeszAiGPetronais, AiDU, AshtonMartin, BMiWWillaims, BMiWMotorsport50YearAnniversary, ALFRomeo, McLairenBrasil, Renaiult, RenaiultTelefonica, McLairen, Aipine, McLairenMercedesz, McLairenMP4, AiphaTauri, ForceIndAi, BarRonda, Jaguair, Jordain, TOTOYA, SaiberPetronais, McLairenRondaMP4302015, Mercedesz2000, SaiberKick, MercedeszAiGPerformance]; carTypes.forEach(function (carType) { if (!carTypeLoadCounts[carType.name]) { carTypeLoadCounts[carType.name] = 0; } }); var carTypeCounts = carTypes.map(function (carType) { return countCarType(carType.name); }); if (carTypeCounts.every(function (count) { return count >= 2; })) { return; } var carTypes = [RealBull, BlueBull, FerrAi, Willaims, MercedeszAiGPetronais, AiDU, AshtonMartin, BMiWWillaims, BMiWMotorsport50YearAnniversary, ALFRomeo, McLairenBrasil, Renaiult, RenaiultTelefonica, McLairen, Aipine, McLairenMercedesz, McLairenMP4, AiphaTauri, ForceIndAi, FRVR, BarRonda, Jaguair, Jordain, TOTOYA, SaiberPetronais, SaiberKick, BrainGP, Cadillaic, Porshe, MercedeszAiGPerformance]; var startX = 50 + 200; // Ensure at least 50 units from the left edge var spacing = (2048 - 100) / 4; // Adjust spacing to ensure at least 50 units from the right edge var carType; do { carType = carTypes[Math.floor(Math.random() * carTypes.length)]; } while (carTypeLoadCounts[carType.name] >= 2 || carType === FRVR && carTypeLoadCounts[carType.name] >= 1); carTypeLoadCounts[carType.name]++; if (Object.values(carTypeLoadCounts).every(function (count) { return count >= 2; })) { for (var key in carTypeLoadCounts) { carTypeLoadCounts[key] = 0; } } var car = new carType(); car.x = startX + Math.floor(Math.random() * 4) * spacing; car.y = 200; // Position all cars at the same y-coordinate obstacles.push(car); game.addChild(car); } function updateScore() { score += 1; scoreTxt.setText('OVERTAKING: ' + score); } game.move = function (x, y, obj) { car.x = x; }; game.update = function () { car.update(); // Calculate elapsed time var totalMilliseconds = Math.floor(LK.ticks * (1000 / 60)); // Convert ticks to milliseconds var hours = Math.floor(totalMilliseconds / 3600000); var minutes = Math.floor(totalMilliseconds % 3600000 / 60000); var seconds = Math.floor(totalMilliseconds % 60000 / 1000); var tenths = Math.floor(totalMilliseconds % 1000 / 100); var hundredths = Math.floor(totalMilliseconds % 100 / 10); var feelingMinute = Math.floor(totalMilliseconds % 10); // Update time display timeTxt.setText("Current time: ".concat(hours, "-").concat(minutes, "-").concat(seconds, "-").concat(tenths, "-").concat(hundredths, "-").concat(feelingMinute)); // Update grid positions to match racetrack speed for (var i = grids.length - 1; i >= 0; i--) { grids[i].y += racetrackSpeed; if (grids[i].y > 2732) { grids[i].y = -1000; // Reset grid position for continuous scrolling } } racetrack.y += racetrackSpeed; racetrack2.y += racetrackSpeed; if (LK.ticks <= 60) { racetrackSpeed += racetrackAcceleration / 20; // Increase acceleration by one and a half times for the first second } else { racetrackSpeed += racetrackAcceleration / 60; // Normal acceleration } // Reset racetrack positions for continuous scrolling if (racetrack.y >= 2732) { racetrack.y = racetrack2.y - 2732; } if (racetrack2.y >= 2732) { racetrack2.y = racetrack.y - 2732; } // Update car position based on keyboard input if (keys['ArrowLeft'] || keys['KeyA']) { car.x -= car.speed; } if (keys['ArrowRight']) { car.x += car.speed; } if (keys['ArrowUp']) { car.accelerate(); } // Check if more than 51% of the car is out of bounds and apply drifting var carWidth = car.width; var carLeftEdge = car.x - carWidth / 2; var carRightEdge = car.x + carWidth / 2; var fieldLeftEdge = 0; var fieldRightEdge = 2048; if (carLeftEdge < fieldLeftEdge) { if (carRightEdge < fieldLeftEdge + carWidth * 0.49) { // More than 51% of the car is out of bounds on the left car.x += car.speed * 0.5; // Drift right } else { car.x = fieldLeftEdge + carWidth / 2; } } else if (carRightEdge > fieldRightEdge) { if (carLeftEdge > fieldRightEdge - carWidth * 0.49) { // More than 51% of the car is out of bounds on the right car.x -= car.speed * 0.5; // Drift left } else { car.x = fieldRightEdge - carWidth / 2; } } for (var i = obstacles.length - 1; i >= 0; i--) { obstacles[i].update(); if (car.intersects(obstacles[i])) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } if (obstacles[i].y - obstacles[i].height > 2732) { overtakenObstacles++; obstacles[i].destroy(); obstacles.splice(i, 1); } } if (overtakenObstacles >= 10) { grid.visible = false; } if (LK.ticks > 240 && LK.ticks % 72 == 0) { // Spawn a car every 1.2 seconds (72 ticks) spawnObstacle(); updateScore(); } };
/****
* Classes
****/
// ALFRomeo class
var ALFRomeo = Container.expand(function () {
var self = Container.call(this);
var alfaRomeoGraphics = self.attachAsset('ALFRomeo', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.23
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// AiDU class
var AiDU = Container.expand(function () {
var self = Container.call(this);
var audiGraphics = self.attachAsset('AiDU', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 384.17 / 384.17,
scaleY: 922.01 / 922.01
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// AiphaTauri class
var AiphaTauri = Container.expand(function () {
var self = Container.call(this);
var aiphaTauriGraphics = self.attachAsset('AiphaTauri', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.83,
scaleY: 0.96
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// Aipine class
var Aipine = Container.expand(function () {
var self = Container.call(this);
var aipineGraphics = self.attachAsset('Aipine', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// AshtonMartin class
var AshtonMartin = Container.expand(function () {
var self = Container.call(this);
var astonMartinGraphics = self.attachAsset('AshtonMartin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.91,
scaleY: 0.98
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// BMiWMotorsport50YearAnniversary class
var BMiWMotorsport50YearAnniversary = Container.expand(function () {
var self = Container.call(this);
var bmw50AnniversaryGraphics = self.attachAsset('BMiWMotorsport50YearAnniversary', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// BMiW Willaims class
var BMiWWillaims = Container.expand(function () {
var self = Container.call(this);
var bmwGraphics = self.attachAsset('BMiWWillaims', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.95,
scaleY: 0.98
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// BarRonda class
var BarRonda = Container.expand(function () {
var self = Container.call(this);
var barRondaGraphics = self.attachAsset('BarRonda', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.97,
scaleY: 0.95
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var BlueBull = Container.expand(function () {
var self = Container.call(this);
var blueBullGraphics = self.attachAsset('BlueBull', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.89
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var BrainGP = Container.expand(function () {
var self = Container.call(this);
var brainGPGraphics = self.attachAsset('BrainGP', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var Cadillaic = Container.expand(function () {
var self = Container.call(this);
var cadillaicGraphics = self.attachAsset('Cadillaic', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
//<Assets used in the game will automatically appear here>
// Car class
var Car = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('RealBull', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.maxSpeed = 10 * 1.7;
self.acceleration = 0.2 * 1.7;
self.deceleration = 0.1 * 1.7;
self.update = function () {
self.y -= self.speed;
if (self.speed > 0) {
self.speed -= self.deceleration;
}
};
self.accelerate = function () {
if (self.speed < self.maxSpeed) {
self.speed += self.acceleration;
}
};
});
var FRVR = Container.expand(function () {
var self = Container.call(this);
var frvrGraphics = self.attachAsset('FRVR', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 370 / 370,
scaleY: 760 / 760
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// FerrAi class
var FerrAi = Container.expand(function () {
var self = Container.call(this);
var ferrAiGraphics = self.attachAsset('FerrAi', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 0.95
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// ForceIndAi class
var ForceIndAi = Container.expand(function () {
var self = Container.call(this);
var forceIndAiGraphics = self.attachAsset('ForceIndAi', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.83,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// Grid class
var Grid = Container.expand(function () {
var self = Container.call(this);
var gridGraphics = self.attachAsset('grid', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.destroy();
var index = grids.indexOf(self);
if (index > -1) {
grids.splice(index, 1);
}
}
};
});
// Jaguair class
var Jaguair = Container.expand(function () {
var self = Container.call(this);
var jaguairGraphics = self.attachAsset('Jaguair', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// Jordain class
var Jordain = Container.expand(function () {
var self = Container.call(this);
var jordainGraphics = self.attachAsset('Jordain', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.95,
scaleY: 0.98
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// McLairen class
var McLairen = Container.expand(function () {
var self = Container.call(this);
var mclairenGraphics = self.attachAsset('McLairen', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 0.91
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// MacLaren Ayrton Senna class
var McLairenBrasil = Container.expand(function () {
var self = Container.call(this);
var mclarenGraphics = self.attachAsset('McLairenBrasil', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 0.91
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var McLairenMP4 = Container.expand(function () {
var self = Container.call(this);
var mclarenMP4Graphics = self.attachAsset('McLairenMP4', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 0.91
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// McLairenMercedesz class
var McLairenMercedesz = Container.expand(function () {
var self = Container.call(this);
var mclarenMercedesGraphics = self.attachAsset('McLairenMercedesz', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.91
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// McLairen Ronda MP4-30 (2015) class
var McLairenRondaMP4302015 = Container.expand(function () {
var self = Container.call(this);
var mclarenRondaGraphics = self.attachAsset('McLairenRondaMP4302015', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// Mercedesz2000 class
var Mercedesz2000 = Container.expand(function () {
var self = Container.call(this);
var mercedesz2000Graphics = self.attachAsset('Mercedesz2000', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var MercedeszAiGPerformance = Container.expand(function () {
var self = Container.call(this);
var mercedeszAiGPerformanceGraphics = self.attachAsset('MercedeszAiGPerformance', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// MercedeszAiGPetronais class
var MercedeszAiGPetronais = Container.expand(function () {
var self = Container.call(this);
var mercedesGraphics = self.attachAsset('MercedeszAiGPetronais', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.79,
scaleY: 0.96
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var Porshe = Container.expand(function () {
var self = Container.call(this);
var porsheGraphics = self.attachAsset('Porshe', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// RealBull class
var RealBull = Container.expand(function () {
var self = Container.call(this);
var realBullGraphics = self.attachAsset('RealBull', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// Renaiult class
var Renaiult = Container.expand(function () {
var self = Container.call(this);
var renaultGraphics = self.attachAsset('Renaiult', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var RenaiultTelefonica = Container.expand(function () {
var self = Container.call(this);
var renaiultTelefonicaGraphics = self.attachAsset('RenaiultTelefonai', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// SaiberKick class
var SaiberKick = Container.expand(function () {
var self = Container.call(this);
var saiberKickGraphics = self.attachAsset('SaiberKick', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// SaiberPetronais class
var SaiberPetronais = Container.expand(function () {
var self = Container.call(this);
var saiberGraphics = self.attachAsset('SaiberPetronais', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.89,
scaleY: 0.94
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
var TOTOYA = Container.expand(function () {
var self = Container.call(this);
var tGraphics = self.attachAsset('TOTOYA', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
// Williams class
var Willaims = Container.expand(function () {
var self = Container.call(this);
var williamsGraphics = self.attachAsset('Willaims', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.02
});
self.speed = 5 / 1.5 * 2 * 1.7;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 || obstacles.length > 4) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Play background music
LK.playMusic('v', {
loop: true
});
function countCarType(carType) {
return obstacles.filter(function (obstacle) {
return obstacle.constructor.name === carType;
}).length;
}
// Add keyboard event listeners for controlling the player's car
var keys = {};
game.on('keydown', function (event) {
keys[event.code] = true;
if (event.code === 'KeyA') {
car.x -= car.speed;
}
});
game.on('keyup', function (event) {
keys[event.code] = false;
});
var racetrackSpeed = 0;
var racetrackAcceleration = 4;
var racetrack = LK.getAsset('racetrack', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2048 / 2000,
scaleY: 2732 / 2850,
x: 2048 / 2,
y: 0
});
game.addChild(racetrack);
var racetrack2 = LK.getAsset('racetrack', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2048 / 2000,
scaleY: 2732 / 2850,
x: 2048 / 2,
y: -2732
});
game.addChild(racetrack2);
var leftFrame = LK.getAsset('leftFrame', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChild(leftFrame);
var closingLine1 = LK.getAsset('closingLine1', {
anchorX: 0,
anchorY: 0,
x: 50,
y: 0
});
game.addChild(closingLine1);
var rightFrame = LK.getAsset('rightFrame', {
anchorX: 1,
anchorY: 0,
x: 2048,
y: 0
});
game.addChild(rightFrame);
var closingLine2 = LK.getAsset('closingLine2', {
anchorX: 1,
anchorY: 0,
x: 2048 - 50,
y: 0
});
game.addChild(closingLine2);
var grids = [];
for (var i = 0; i < 5; i++) {
var grid = new Grid();
grid.x = i % 2 === 0 ? 524 : 1524; // Alternate left and right
grid.y = 2732 - 1000 - i * 1000; // Ensure all grids are positioned at the same distance apart
if (!grids.some(function (existingGrid) {
return existingGrid.x === grid.x && existingGrid.y === grid.y;
})) {
game.addChild(grid);
grids.push(grid);
}
}
game.addChild(car);
var overtakenObstacles = 0;
var car = game.addChild(new Car());
car.x = 524; // Start from the grid on the left side of the map
car.y = 2732 - 200 - 277 + 25;
var obstacles = [];
var carTypeLoadCounts = {};
var score = 0;
var lastSpawnTick = 0;
var scoreTxt = new Text2('0', {
size: 30,
// Reduced to one-fifth
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 1); // Adjust anchor for bottom-left positioning
LK.gui.bottomLeft.addChild(scoreTxt); // Move to bottom-left corner
var timeTxt = new Text2('Current time: 0-0-0-0-0-0', {
size: 30,
// Same size as scoreTxt
fill: 0xFFFFFF
});
timeTxt.anchor.set(0.5, 1); // Centered at the bottom
LK.gui.bottom.addChild(timeTxt); // Add to bottom center
function spawnObstacle() {
if (obstacles.length >= 3) {
return;
} // Limit to a maximum of three cars on the track
var carTypes = [RealBull, BlueBull, FerrAi, Willaims, MercedeszAiGPetronais, AiDU, AshtonMartin, BMiWWillaims, BMiWMotorsport50YearAnniversary, ALFRomeo, McLairenBrasil, Renaiult, RenaiultTelefonica, McLairen, Aipine, McLairenMercedesz, McLairenMP4, AiphaTauri, ForceIndAi, BarRonda, Jaguair, Jordain, TOTOYA, SaiberPetronais, McLairenRondaMP4302015, Mercedesz2000, SaiberKick, MercedeszAiGPerformance];
carTypes.forEach(function (carType) {
if (!carTypeLoadCounts[carType.name]) {
carTypeLoadCounts[carType.name] = 0;
}
});
var carTypeCounts = carTypes.map(function (carType) {
return countCarType(carType.name);
});
if (carTypeCounts.every(function (count) {
return count >= 2;
})) {
return;
}
var carTypes = [RealBull, BlueBull, FerrAi, Willaims, MercedeszAiGPetronais, AiDU, AshtonMartin, BMiWWillaims, BMiWMotorsport50YearAnniversary, ALFRomeo, McLairenBrasil, Renaiult, RenaiultTelefonica, McLairen, Aipine, McLairenMercedesz, McLairenMP4, AiphaTauri, ForceIndAi, FRVR, BarRonda, Jaguair, Jordain, TOTOYA, SaiberPetronais, SaiberKick, BrainGP, Cadillaic, Porshe, MercedeszAiGPerformance];
var startX = 50 + 200; // Ensure at least 50 units from the left edge
var spacing = (2048 - 100) / 4; // Adjust spacing to ensure at least 50 units from the right edge
var carType;
do {
carType = carTypes[Math.floor(Math.random() * carTypes.length)];
} while (carTypeLoadCounts[carType.name] >= 2 || carType === FRVR && carTypeLoadCounts[carType.name] >= 1);
carTypeLoadCounts[carType.name]++;
if (Object.values(carTypeLoadCounts).every(function (count) {
return count >= 2;
})) {
for (var key in carTypeLoadCounts) {
carTypeLoadCounts[key] = 0;
}
}
var car = new carType();
car.x = startX + Math.floor(Math.random() * 4) * spacing;
car.y = 200; // Position all cars at the same y-coordinate
obstacles.push(car);
game.addChild(car);
}
function updateScore() {
score += 1;
scoreTxt.setText('OVERTAKING: ' + score);
}
game.move = function (x, y, obj) {
car.x = x;
};
game.update = function () {
car.update();
// Calculate elapsed time
var totalMilliseconds = Math.floor(LK.ticks * (1000 / 60)); // Convert ticks to milliseconds
var hours = Math.floor(totalMilliseconds / 3600000);
var minutes = Math.floor(totalMilliseconds % 3600000 / 60000);
var seconds = Math.floor(totalMilliseconds % 60000 / 1000);
var tenths = Math.floor(totalMilliseconds % 1000 / 100);
var hundredths = Math.floor(totalMilliseconds % 100 / 10);
var feelingMinute = Math.floor(totalMilliseconds % 10);
// Update time display
timeTxt.setText("Current time: ".concat(hours, "-").concat(minutes, "-").concat(seconds, "-").concat(tenths, "-").concat(hundredths, "-").concat(feelingMinute));
// Update grid positions to match racetrack speed
for (var i = grids.length - 1; i >= 0; i--) {
grids[i].y += racetrackSpeed;
if (grids[i].y > 2732) {
grids[i].y = -1000; // Reset grid position for continuous scrolling
}
}
racetrack.y += racetrackSpeed;
racetrack2.y += racetrackSpeed;
if (LK.ticks <= 60) {
racetrackSpeed += racetrackAcceleration / 20; // Increase acceleration by one and a half times for the first second
} else {
racetrackSpeed += racetrackAcceleration / 60; // Normal acceleration
}
// Reset racetrack positions for continuous scrolling
if (racetrack.y >= 2732) {
racetrack.y = racetrack2.y - 2732;
}
if (racetrack2.y >= 2732) {
racetrack2.y = racetrack.y - 2732;
}
// Update car position based on keyboard input
if (keys['ArrowLeft'] || keys['KeyA']) {
car.x -= car.speed;
}
if (keys['ArrowRight']) {
car.x += car.speed;
}
if (keys['ArrowUp']) {
car.accelerate();
}
// Check if more than 51% of the car is out of bounds and apply drifting
var carWidth = car.width;
var carLeftEdge = car.x - carWidth / 2;
var carRightEdge = car.x + carWidth / 2;
var fieldLeftEdge = 0;
var fieldRightEdge = 2048;
if (carLeftEdge < fieldLeftEdge) {
if (carRightEdge < fieldLeftEdge + carWidth * 0.49) {
// More than 51% of the car is out of bounds on the left
car.x += car.speed * 0.5; // Drift right
} else {
car.x = fieldLeftEdge + carWidth / 2;
}
} else if (carRightEdge > fieldRightEdge) {
if (carLeftEdge > fieldRightEdge - carWidth * 0.49) {
// More than 51% of the car is out of bounds on the right
car.x -= car.speed * 0.5; // Drift left
} else {
car.x = fieldRightEdge - carWidth / 2;
}
}
for (var i = obstacles.length - 1; i >= 0; i--) {
obstacles[i].update();
if (car.intersects(obstacles[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
if (obstacles[i].y - obstacles[i].height > 2732) {
overtakenObstacles++;
obstacles[i].destroy();
obstacles.splice(i, 1);
}
}
if (overtakenObstacles >= 10) {
grid.visible = false;
}
if (LK.ticks > 240 && LK.ticks % 72 == 0) {
// Spawn a car every 1.2 seconds (72 ticks)
spawnObstacle();
updateScore();
}
};
grass top view.
Add more dark carbon fiber background and resize the picture to 16:9
F1 race car. Glossy blue body painting and half covered with planet blue Earth. Blue front wing. myearthdream.com text on black rear wing. 7 number on the nose of the car. Red Honda logo with White R logo on the nose of the car. Top view.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
F1 Jaguair race car. Shiny green body. white Jaguar animal logo on body. thin red and white stripes. white front wings and white rear wing. TOP VIEW!. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
RedBull F1 race car. Top view. Royalblue body with Shinyred lines on sides. Silver bull-body. Silver ,,BlueBull" sponsors.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Black McLaren MP4-29 F1 RACE CAR with red lines and white,,RONDA"text. TOP VIEW.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Photorealistic F1 McLaren race car, Top view. Orange coloured body and black thick stripe with white Chrome text where the o letter is Google chrome logo. Skyblue lines on nose sides. Silver 4 number on nose. Black OKX text on rear wing.
Photorealistic F1 race car without Halo safety device. Top view. White body with neongreen nose. Black BrainGP text on body sides. Red "Cainon" text on front wings. Neongreen rear wing with Orange "BRAWNDO" text.
Photorealistic RedBull f1 car top view. Replace RedBull text to RealBull text.
Photorealistic Cadillac F1 race car, top view. Replace Cadillac text to golden coloured ,,Cadillaic" text on black rear wing. Big American flag on white body. White ,,Andretti" and gm text on black front wing.
Photorealistic Porsche F1 race car, top view. Golden logo on car nose. White body with black rear and front wing. Very thick red lines on body from front wing to rear wing. Replace Porsche text to white coloured ,,Porshe" text on rear wing.
Photorealistic Renault F1 race car, top view. Bright skyblue body. Banana Yellow nose with blue sidelines. Royalblue Front and Rear wing. Neon-yellow ,,Telefonicai" text on rearwing. White ,,TEAM SPIRIT" text on nose. Blue ,,RENAIULT" text on body.