/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PlayerCar = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('playerCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.lane = 2; // Start in middle lane (0,1,2,3,4)
self.targetX = 0;
self.update = function () {
// Smooth movement towards target position
var diff = self.targetX - self.x;
if (Math.abs(diff) > 2) {
self.x += diff * 0.2;
}
};
self.setLane = function (lane) {
if (lane < 0) lane = 0;
if (lane > 4) lane = 4;
self.lane = lane;
self.targetX = lanePositions[lane];
};
return self;
});
var RoadLine = Container.expand(function () {
var self = Container.call(this);
var lineGraphics = self.attachAsset('roadLine', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
if (self.y > 2732 + 50) {
self.y -= 2732 + 200;
}
};
return self;
});
var TrafficCar = Container.expand(function () {
var self = Container.call(this);
var carTypes = ['trafficCar1', 'trafficCar2', 'trafficCar3'];
var carType = carTypes[Math.floor(Math.random() * carTypes.length)];
var carGraphics = self.attachAsset(carType, {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3 + Math.random() * 4; // Random speed between 3-7
self.baseSpeed = self.speed;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x34495e
});
/****
* Game Code
****/
var lanePositions = [400, 600, 800, 1000, 1200]; // X positions for 5 lanes
var roadWidth = 1000;
var roadX = 2048 / 2;
// Create road background
var road = game.addChild(LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 9,
x: roadX,
y: 2732 / 2
}));
// Create road lines
var roadLines = [];
for (var i = 1; i < 5; i++) {
for (var j = 0; j < 8; j++) {
var line = new RoadLine();
line.x = lanePositions[i] - 50;
line.y = j * 400 - 200;
roadLines.push(line);
game.addChild(line);
}
}
// Create player car
var playerCar = game.addChild(new PlayerCar());
playerCar.x = lanePositions[2];
playerCar.y = 2400;
playerCar.targetX = playerCar.x;
// Game variables
var trafficCars = [];
var distance = 0;
var gameSpeed = 1;
var spawnTimer = 0;
var spawnInterval = 120; // Start spawning every 2 seconds at 60fps
var dragActive = false;
var dragStartX = 0;
var lastPlayerX = playerCar.x;
// UI elements
var distanceText = new Text2('0m', {
size: 80,
fill: 0xFFFFFF
});
distanceText.anchor.set(0.5, 0);
LK.gui.top.addChild(distanceText);
distanceText.y = 100;
// Spawn traffic car
function spawnTrafficCar() {
var lane = Math.floor(Math.random() * 5);
var car = new TrafficCar();
car.x = lanePositions[lane];
car.y = -100;
car.speed *= gameSpeed;
trafficCars.push(car);
game.addChild(car);
}
// Touch/drag controls
game.down = function (x, y, obj) {
dragActive = true;
dragStartX = x;
lastPlayerX = playerCar.x;
};
game.move = function (x, y, obj) {
if (dragActive) {
var dragDistance = x - dragStartX;
var newX = lastPlayerX + dragDistance;
// Find closest lane
var closestLane = 0;
var closestDistance = Math.abs(newX - lanePositions[0]);
for (var i = 1; i < lanePositions.length; i++) {
var distance = Math.abs(newX - lanePositions[i]);
if (distance < closestDistance) {
closestDistance = distance;
closestLane = i;
}
}
playerCar.setLane(closestLane);
}
};
game.up = function (x, y, obj) {
dragActive = false;
};
// Main game update
game.update = function () {
// Update distance and speed
distance += 0.5;
LK.setScore(Math.floor(distance));
distanceText.setText(Math.floor(distance) + 'm');
// Increase difficulty over time
if (LK.ticks % 1800 === 0) {
// Every 30 seconds
gameSpeed += 0.1;
spawnInterval = Math.max(60, spawnInterval - 5);
}
// Update road line speeds
for (var i = 0; i < roadLines.length; i++) {
roadLines[i].speed = 5 * gameSpeed;
}
// Spawn new traffic cars
spawnTimer++;
if (spawnTimer >= spawnInterval) {
spawnTrafficCar();
spawnTimer = 0;
}
// Update and check collisions with traffic cars
for (var i = trafficCars.length - 1; i >= 0; i--) {
var car = trafficCars[i];
// Remove cars that are off screen
if (car.y > 2732 + 100) {
car.destroy();
trafficCars.splice(i, 1);
continue;
}
// Check collision with player
if (car.intersects(playerCar)) {
// Game over
LK.getSound('crash').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,194 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var PlayerCar = Container.expand(function () {
+ var self = Container.call(this);
+ var carGraphics = self.attachAsset('playerCar', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.lane = 2; // Start in middle lane (0,1,2,3,4)
+ self.targetX = 0;
+ self.update = function () {
+ // Smooth movement towards target position
+ var diff = self.targetX - self.x;
+ if (Math.abs(diff) > 2) {
+ self.x += diff * 0.2;
+ }
+ };
+ self.setLane = function (lane) {
+ if (lane < 0) lane = 0;
+ if (lane > 4) lane = 4;
+ self.lane = lane;
+ self.targetX = lanePositions[lane];
+ };
+ return self;
+});
+var RoadLine = Container.expand(function () {
+ var self = Container.call(this);
+ var lineGraphics = self.attachAsset('roadLine', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 5;
+ self.update = function () {
+ self.y += self.speed;
+ if (self.y > 2732 + 50) {
+ self.y -= 2732 + 200;
+ }
+ };
+ return self;
+});
+var TrafficCar = Container.expand(function () {
+ var self = Container.call(this);
+ var carTypes = ['trafficCar1', 'trafficCar2', 'trafficCar3'];
+ var carType = carTypes[Math.floor(Math.random() * carTypes.length)];
+ var carGraphics = self.attachAsset(carType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3 + Math.random() * 4; // Random speed between 3-7
+ self.baseSpeed = self.speed;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x34495e
+});
+
+/****
+* Game Code
+****/
+var lanePositions = [400, 600, 800, 1000, 1200]; // X positions for 5 lanes
+var roadWidth = 1000;
+var roadX = 2048 / 2;
+// Create road background
+var road = game.addChild(LK.getAsset('road', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.6,
+ scaleY: 9,
+ x: roadX,
+ y: 2732 / 2
+}));
+// Create road lines
+var roadLines = [];
+for (var i = 1; i < 5; i++) {
+ for (var j = 0; j < 8; j++) {
+ var line = new RoadLine();
+ line.x = lanePositions[i] - 50;
+ line.y = j * 400 - 200;
+ roadLines.push(line);
+ game.addChild(line);
+ }
+}
+// Create player car
+var playerCar = game.addChild(new PlayerCar());
+playerCar.x = lanePositions[2];
+playerCar.y = 2400;
+playerCar.targetX = playerCar.x;
+// Game variables
+var trafficCars = [];
+var distance = 0;
+var gameSpeed = 1;
+var spawnTimer = 0;
+var spawnInterval = 120; // Start spawning every 2 seconds at 60fps
+var dragActive = false;
+var dragStartX = 0;
+var lastPlayerX = playerCar.x;
+// UI elements
+var distanceText = new Text2('0m', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+distanceText.anchor.set(0.5, 0);
+LK.gui.top.addChild(distanceText);
+distanceText.y = 100;
+// Spawn traffic car
+function spawnTrafficCar() {
+ var lane = Math.floor(Math.random() * 5);
+ var car = new TrafficCar();
+ car.x = lanePositions[lane];
+ car.y = -100;
+ car.speed *= gameSpeed;
+ trafficCars.push(car);
+ game.addChild(car);
+}
+// Touch/drag controls
+game.down = function (x, y, obj) {
+ dragActive = true;
+ dragStartX = x;
+ lastPlayerX = playerCar.x;
+};
+game.move = function (x, y, obj) {
+ if (dragActive) {
+ var dragDistance = x - dragStartX;
+ var newX = lastPlayerX + dragDistance;
+ // Find closest lane
+ var closestLane = 0;
+ var closestDistance = Math.abs(newX - lanePositions[0]);
+ for (var i = 1; i < lanePositions.length; i++) {
+ var distance = Math.abs(newX - lanePositions[i]);
+ if (distance < closestDistance) {
+ closestDistance = distance;
+ closestLane = i;
+ }
+ }
+ playerCar.setLane(closestLane);
+ }
+};
+game.up = function (x, y, obj) {
+ dragActive = false;
+};
+// Main game update
+game.update = function () {
+ // Update distance and speed
+ distance += 0.5;
+ LK.setScore(Math.floor(distance));
+ distanceText.setText(Math.floor(distance) + 'm');
+ // Increase difficulty over time
+ if (LK.ticks % 1800 === 0) {
+ // Every 30 seconds
+ gameSpeed += 0.1;
+ spawnInterval = Math.max(60, spawnInterval - 5);
+ }
+ // Update road line speeds
+ for (var i = 0; i < roadLines.length; i++) {
+ roadLines[i].speed = 5 * gameSpeed;
+ }
+ // Spawn new traffic cars
+ spawnTimer++;
+ if (spawnTimer >= spawnInterval) {
+ spawnTrafficCar();
+ spawnTimer = 0;
+ }
+ // Update and check collisions with traffic cars
+ for (var i = trafficCars.length - 1; i >= 0; i--) {
+ var car = trafficCars[i];
+ // Remove cars that are off screen
+ if (car.y > 2732 + 100) {
+ car.destroy();
+ trafficCars.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (car.intersects(playerCar)) {
+ // Game over
+ LK.getSound('crash').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ }
+};
\ No newline at end of file