User prompt
Let the game speed up after 50 points, other than that, let it be at normal speed
User prompt
Get faster and faster to play
User prompt
Draw in all three lanes
User prompt
Let the lines be on each lane
Code edit (1 edits merged)
Please save this source code
User prompt
Turbo Lane Runner
Initial prompt
Hello make car game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Enemy Car Class var EnemyCar = Container.expand(function () { var self = Container.call(this); var car = self.attachAsset('enemyCar', { anchorX: 0.5, anchorY: 0.5 }); self.lane = 1; self.speed = 18; self.update = function () { self.y += self.speed * gameSpeed; }; return self; }); // Lane Divider Class var LaneDivider = Container.expand(function () { var self = Container.call(this); var div = self.attachAsset('laneDivider', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 18; self.update = function () { self.y += self.speed * gameSpeed; }; return self; }); // Obstacle Class var Obstacle = Container.expand(function () { var self = Container.call(this); var obs = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.lane = 1; self.speed = 18; self.update = function () { self.y += self.speed * gameSpeed; }; return self; }); // Player Car Class var PlayerCar = Container.expand(function () { var self = Container.call(this); var car = self.attachAsset('playerCar', { anchorX: 0.5, anchorY: 0.5 }); self.lane = 1; // 0: left, 1: center, 2: right self.setLane = function (laneIdx) { self.lane = laneIdx; // Animate to new lane position var targetX = lanes[self.lane]; tween(self, { x: targetX }, { duration: 120, easing: tween.cubicOut }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Music (background) // Sound for lane change // Sound for crash // Road lane divider // Obstacle (barrier) // Enemy car // Car (player) // Lane positions (3 lanes) var laneCount = 3; var laneWidth = 410; var lanes = [2048 / 2 - laneWidth, // left 2048 / 2, // center 2048 / 2 + laneWidth // right ]; // Game variables var playerCar; var enemyCars = []; var obstacles = []; var laneDividers = []; var score = 0; var scoreTxt; var gameSpeed = 1; var ticksSinceStart = 0; var swipeStartX = null; var swipeStartY = null; var swipeActive = false; var lastLane = 1; var spawnTick = 0; var dividerSpacing = 320; var dragNode = null; // Score display scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Start music LK.playMusic('bgmusic'); // Create player car playerCar = new PlayerCar(); playerCar.x = lanes[1]; playerCar.y = 2732 - 500; playerCar.setLane(1); game.addChild(playerCar); // Create lane dividers (vertical lines for each lane) // Draw a divider for each lane boundary (between lanes) for (var l = 0; l < laneCount + 1; l++) { // For 3 lanes, this will draw 4 lines: left edge, between lanes, right edge // But we want only the lines between lanes, so skip the first and last if (l === 0 || l === laneCount) continue; for (var i = 0; i < 10; i++) { var divider = new LaneDivider(); // Place the divider at the correct X for the lane line divider.x = (lanes[l - 1] + lanes[l]) / 2; divider.y = i * dividerSpacing; laneDividers.push(divider); game.addChild(divider); } } // Helper: spawn enemy car or obstacle function spawnObstacleOrEnemy() { // Randomly decide: 70% enemy car, 30% obstacle var isEnemy = Math.random() < 0.7; var laneIdx = Math.floor(Math.random() * laneCount); var y = -300; if (isEnemy) { var enemy = new EnemyCar(); enemy.lane = laneIdx; enemy.x = lanes[laneIdx]; enemy.y = y; enemyCars.push(enemy); game.addChild(enemy); } else { var obs = new Obstacle(); obs.lane = laneIdx; obs.x = lanes[laneIdx]; obs.y = y; obstacles.push(obs); game.addChild(obs); } } // Helper: update score function updateScore(val) { score = val; scoreTxt.setText(score); } // Touch/drag/swipe handling game.down = function (x, y, obj) { swipeStartX = x; swipeStartY = y; swipeActive = true; dragNode = playerCar; }; game.move = function (x, y, obj) { // Only handle swipe if active if (!swipeActive) return; if (!dragNode) return; var dx = x - swipeStartX; var dy = y - swipeStartY; // Only consider horizontal swipes, ignore vertical if (Math.abs(dx) > 80 && Math.abs(dx) > Math.abs(dy)) { var newLane = playerCar.lane; if (dx < 0 && playerCar.lane > 0) { newLane = playerCar.lane - 1; } else if (dx > 0 && playerCar.lane < laneCount - 1) { newLane = playerCar.lane + 1; } if (newLane !== playerCar.lane) { playerCar.setLane(newLane); LK.getSound('swipe').play(); swipeActive = false; dragNode = null; } } }; game.up = function (x, y, obj) { swipeActive = false; dragNode = null; }; // Main game update loop game.update = function () { ticksSinceStart++; // Only increase game speed after score reaches 50 if (score >= 50) { if (ticksSinceStart % 60 === 0 && gameSpeed < 4) { // Increase speed every second, and allow it to go higher if (gameSpeed < 2) { gameSpeed += 0.08; } else if (gameSpeed < 3) { gameSpeed += 0.12; } else { gameSpeed += 0.18; } if (gameSpeed > 4) gameSpeed = 4; } } else { gameSpeed = 1; } // Move lane dividers, loop to top for (var i = 0; i < laneDividers.length; i++) { var div = laneDividers[i]; div.update(); if (div.y > 2732 + 60) { div.y -= dividerSpacing * 10; } } // Spawn enemies/obstacles every 40-60 ticks, randomize spawnTick++; var spawnInterval = 40 + Math.floor(Math.random() * 20); if (spawnTick > spawnInterval) { spawnObstacleOrEnemy(); spawnTick = 0; } // Update enemy cars for (var i = enemyCars.length - 1; i >= 0; i--) { var enemy = enemyCars[i]; enemy.update(); // Off screen if (enemy.y > 2732 + 300) { enemy.destroy(); enemyCars.splice(i, 1); updateScore(score + 1); continue; } // Collision with player if (enemy.intersects(playerCar)) { LK.getSound('crash').play(); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } // Update obstacles for (var j = obstacles.length - 1; j >= 0; j--) { var obs = obstacles[j]; obs.update(); // Off screen if (obs.y > 2732 + 200) { obs.destroy(); obstacles.splice(j, 1); updateScore(score + 1); continue; } // Collision with player if (obs.intersects(playerCar)) { LK.getSound('crash').play(); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } }; // Center score text at top, avoid top left 100x100 scoreTxt.x = LK.gui.top.width / 2; scoreTxt.y = 40;
===================================================================
--- original.js
+++ change.js
@@ -203,19 +203,23 @@
};
// Main game update loop
game.update = function () {
ticksSinceStart++;
- // Gradually increase game speed, ramp up faster for more challenge
- if (ticksSinceStart % 60 === 0 && gameSpeed < 4) {
- // Increase speed every second, and allow it to go higher
- if (gameSpeed < 2) {
- gameSpeed += 0.08;
- } else if (gameSpeed < 3) {
- gameSpeed += 0.12;
- } else {
- gameSpeed += 0.18;
+ // Only increase game speed after score reaches 50
+ if (score >= 50) {
+ if (ticksSinceStart % 60 === 0 && gameSpeed < 4) {
+ // Increase speed every second, and allow it to go higher
+ if (gameSpeed < 2) {
+ gameSpeed += 0.08;
+ } else if (gameSpeed < 3) {
+ gameSpeed += 0.12;
+ } else {
+ gameSpeed += 0.18;
+ }
+ if (gameSpeed > 4) gameSpeed = 4;
}
- if (gameSpeed > 4) gameSpeed = 4;
+ } else {
+ gameSpeed = 1;
}
// Move lane dividers, loop to top
for (var i = 0; i < laneDividers.length; i++) {
var div = laneDividers[i];