/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
// Add slight rotation animation
coinGraphics.rotation += 0.1;
};
return self;
});
var PlayerCar = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('playerCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.targetX = 0;
self.moveSpeed = 12;
self.update = function () {
// Smooth movement towards target position
var dx = self.targetX - self.x;
if (Math.abs(dx) > 5) {
self.x += dx * 0.15;
} else {
self.x = self.targetX;
}
};
return self;
});
var RoadLane = Container.expand(function () {
var self = Container.call(this);
var laneGraphics = self.attachAsset('roadLane', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var TrafficCar = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('trafficCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c3e50
});
/****
* Game Code
****/
// Game variables
var playerCar;
var trafficCars = [];
var coins = [];
var roadLanes = [];
var gameSpeed = 8;
var speedIncreaseRate = 0.002;
var trafficSpawnRate = 0.02;
var coinSpawnRate = 0.01;
var lanePositions = [512, 768, 1024, 1280, 1536]; // 5 lanes across the road
var distance = 0;
var coinCount = 0;
var isDragging = false;
// UI Elements
var scoreText = new Text2('Distance: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreText);
scoreText.x = 120; // Offset from top-left menu area
var coinText = new Text2('Coins: 0', {
size: 60,
fill: 0xF1C40F
});
coinText.anchor.set(1, 0);
LK.gui.topRight.addChild(coinText);
// Initialize player car
playerCar = game.addChild(new PlayerCar());
playerCar.x = lanePositions[2]; // Start in middle lane
playerCar.y = 2200; // Near bottom of screen
// Create initial road lanes for visual effect
function createRoadLane() {
var lane = new RoadLane();
lane.x = 1024; // Center of screen
lane.y = -100;
roadLanes.push(lane);
game.addChild(lane);
}
// Initialize some road lanes
for (var i = 0; i < 20; i++) {
createRoadLane();
roadLanes[i].y = i * 150 - 300;
}
// Spawn traffic car
function spawnTrafficCar() {
var car = new TrafficCar();
car.x = lanePositions[Math.floor(Math.random() * lanePositions.length)];
car.y = -100;
car.speed = gameSpeed;
trafficCars.push(car);
game.addChild(car);
}
// Spawn coin
function spawnCoin() {
var coin = new Coin();
coin.x = lanePositions[Math.floor(Math.random() * lanePositions.length)];
coin.y = -100;
coin.speed = gameSpeed;
coins.push(coin);
game.addChild(coin);
}
// Handle touch/mouse input
game.down = function (x, y, obj) {
isDragging = true;
// Find closest lane to touch position
var closestLane = 0;
var minDistance = Math.abs(x - lanePositions[0]);
for (var i = 1; i < lanePositions.length; i++) {
var distance = Math.abs(x - lanePositions[i]);
if (distance < minDistance) {
minDistance = distance;
closestLane = i;
}
}
playerCar.targetX = lanePositions[closestLane];
};
game.move = function (x, y, obj) {
if (isDragging) {
// Find closest lane to drag position
var closestLane = 0;
var minDistance = Math.abs(x - lanePositions[0]);
for (var i = 1; i < lanePositions.length; i++) {
var distance = Math.abs(x - lanePositions[i]);
if (distance < minDistance) {
minDistance = distance;
closestLane = i;
}
}
playerCar.targetX = lanePositions[closestLane];
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
// Main game update loop
game.update = function () {
// Increase game speed over time
gameSpeed += speedIncreaseRate;
distance += gameSpeed / 10;
// Update speed for all moving objects
for (var i = 0; i < trafficCars.length; i++) {
trafficCars[i].speed = gameSpeed;
}
for (var i = 0; i < coins.length; i++) {
coins[i].speed = gameSpeed;
}
for (var i = 0; i < roadLanes.length; i++) {
roadLanes[i].speed = gameSpeed;
}
// Spawn traffic cars
if (Math.random() < trafficSpawnRate + distance * 0.000005) {
spawnTrafficCar();
}
// Spawn coins
if (Math.random() < coinSpawnRate) {
spawnCoin();
}
// Spawn road lanes
if (LK.ticks % 20 === 0) {
createRoadLane();
}
// Clean up and check collisions for traffic cars
for (var i = trafficCars.length - 1; i >= 0; i--) {
var car = trafficCars[i];
// Remove cars that are off screen
if (car.y > 2800) {
car.destroy();
trafficCars.splice(i, 1);
continue;
}
// Check collision with player
if (car.intersects(playerCar)) {
LK.getSound('carCrash').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Clean up and check collection for coins
for (var i = coins.length - 1; i >= 0; i--) {
var coin = coins[i];
// Remove coins that are off screen
if (coin.y > 2800) {
coin.destroy();
coins.splice(i, 1);
continue;
}
// Check collection by player
if (coin.intersects(playerCar)) {
LK.getSound('coinCollect').play();
coinCount++;
LK.setScore(Math.floor(distance) + coinCount * 10);
coin.destroy();
coins.splice(i, 1);
// Add tween effect for coin collection
tween(playerCar, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(playerCar, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
}
});
}
}
// Clean up road lanes
for (var i = roadLanes.length - 1; i >= 0; i--) {
var lane = roadLanes[i];
if (lane.y > 2800) {
lane.destroy();
roadLanes.splice(i, 1);
}
}
// Update UI
scoreText.setText('Distance: ' + Math.floor(distance));
coinText.setText('Coins: ' + coinCount);
// Update total score
LK.setScore(Math.floor(distance) + coinCount * 10);
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,262 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Coin = Container.expand(function () {
+ var self = Container.call(this);
+ var coinGraphics = self.attachAsset('coin', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ self.update = function () {
+ self.y += self.speed;
+ // Add slight rotation animation
+ coinGraphics.rotation += 0.1;
+ };
+ return self;
+});
+var PlayerCar = Container.expand(function () {
+ var self = Container.call(this);
+ var carGraphics = self.attachAsset('playerCar', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.targetX = 0;
+ self.moveSpeed = 12;
+ self.update = function () {
+ // Smooth movement towards target position
+ var dx = self.targetX - self.x;
+ if (Math.abs(dx) > 5) {
+ self.x += dx * 0.15;
+ } else {
+ self.x = self.targetX;
+ }
+ };
+ return self;
+});
+var RoadLane = Container.expand(function () {
+ var self = Container.call(this);
+ var laneGraphics = self.attachAsset('roadLane', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var TrafficCar = Container.expand(function () {
+ var self = Container.call(this);
+ var carGraphics = self.attachAsset('trafficCar', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ 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: 0x2c3e50
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var playerCar;
+var trafficCars = [];
+var coins = [];
+var roadLanes = [];
+var gameSpeed = 8;
+var speedIncreaseRate = 0.002;
+var trafficSpawnRate = 0.02;
+var coinSpawnRate = 0.01;
+var lanePositions = [512, 768, 1024, 1280, 1536]; // 5 lanes across the road
+var distance = 0;
+var coinCount = 0;
+var isDragging = false;
+// UI Elements
+var scoreText = new Text2('Distance: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0, 0);
+LK.gui.topLeft.addChild(scoreText);
+scoreText.x = 120; // Offset from top-left menu area
+var coinText = new Text2('Coins: 0', {
+ size: 60,
+ fill: 0xF1C40F
+});
+coinText.anchor.set(1, 0);
+LK.gui.topRight.addChild(coinText);
+// Initialize player car
+playerCar = game.addChild(new PlayerCar());
+playerCar.x = lanePositions[2]; // Start in middle lane
+playerCar.y = 2200; // Near bottom of screen
+// Create initial road lanes for visual effect
+function createRoadLane() {
+ var lane = new RoadLane();
+ lane.x = 1024; // Center of screen
+ lane.y = -100;
+ roadLanes.push(lane);
+ game.addChild(lane);
+}
+// Initialize some road lanes
+for (var i = 0; i < 20; i++) {
+ createRoadLane();
+ roadLanes[i].y = i * 150 - 300;
+}
+// Spawn traffic car
+function spawnTrafficCar() {
+ var car = new TrafficCar();
+ car.x = lanePositions[Math.floor(Math.random() * lanePositions.length)];
+ car.y = -100;
+ car.speed = gameSpeed;
+ trafficCars.push(car);
+ game.addChild(car);
+}
+// Spawn coin
+function spawnCoin() {
+ var coin = new Coin();
+ coin.x = lanePositions[Math.floor(Math.random() * lanePositions.length)];
+ coin.y = -100;
+ coin.speed = gameSpeed;
+ coins.push(coin);
+ game.addChild(coin);
+}
+// Handle touch/mouse input
+game.down = function (x, y, obj) {
+ isDragging = true;
+ // Find closest lane to touch position
+ var closestLane = 0;
+ var minDistance = Math.abs(x - lanePositions[0]);
+ for (var i = 1; i < lanePositions.length; i++) {
+ var distance = Math.abs(x - lanePositions[i]);
+ if (distance < minDistance) {
+ minDistance = distance;
+ closestLane = i;
+ }
+ }
+ playerCar.targetX = lanePositions[closestLane];
+};
+game.move = function (x, y, obj) {
+ if (isDragging) {
+ // Find closest lane to drag position
+ var closestLane = 0;
+ var minDistance = Math.abs(x - lanePositions[0]);
+ for (var i = 1; i < lanePositions.length; i++) {
+ var distance = Math.abs(x - lanePositions[i]);
+ if (distance < minDistance) {
+ minDistance = distance;
+ closestLane = i;
+ }
+ }
+ playerCar.targetX = lanePositions[closestLane];
+ }
+};
+game.up = function (x, y, obj) {
+ isDragging = false;
+};
+// Main game update loop
+game.update = function () {
+ // Increase game speed over time
+ gameSpeed += speedIncreaseRate;
+ distance += gameSpeed / 10;
+ // Update speed for all moving objects
+ for (var i = 0; i < trafficCars.length; i++) {
+ trafficCars[i].speed = gameSpeed;
+ }
+ for (var i = 0; i < coins.length; i++) {
+ coins[i].speed = gameSpeed;
+ }
+ for (var i = 0; i < roadLanes.length; i++) {
+ roadLanes[i].speed = gameSpeed;
+ }
+ // Spawn traffic cars
+ if (Math.random() < trafficSpawnRate + distance * 0.000005) {
+ spawnTrafficCar();
+ }
+ // Spawn coins
+ if (Math.random() < coinSpawnRate) {
+ spawnCoin();
+ }
+ // Spawn road lanes
+ if (LK.ticks % 20 === 0) {
+ createRoadLane();
+ }
+ // Clean up and check collisions for traffic cars
+ for (var i = trafficCars.length - 1; i >= 0; i--) {
+ var car = trafficCars[i];
+ // Remove cars that are off screen
+ if (car.y > 2800) {
+ car.destroy();
+ trafficCars.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (car.intersects(playerCar)) {
+ LK.getSound('carCrash').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Clean up and check collection for coins
+ for (var i = coins.length - 1; i >= 0; i--) {
+ var coin = coins[i];
+ // Remove coins that are off screen
+ if (coin.y > 2800) {
+ coin.destroy();
+ coins.splice(i, 1);
+ continue;
+ }
+ // Check collection by player
+ if (coin.intersects(playerCar)) {
+ LK.getSound('coinCollect').play();
+ coinCount++;
+ LK.setScore(Math.floor(distance) + coinCount * 10);
+ coin.destroy();
+ coins.splice(i, 1);
+ // Add tween effect for coin collection
+ tween(playerCar, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ tween(playerCar, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 100
+ });
+ }
+ });
+ }
+ }
+ // Clean up road lanes
+ for (var i = roadLanes.length - 1; i >= 0; i--) {
+ var lane = roadLanes[i];
+ if (lane.y > 2800) {
+ lane.destroy();
+ roadLanes.splice(i, 1);
+ }
+ }
+ // Update UI
+ scoreText.setText('Distance: ' + Math.floor(distance));
+ coinText.setText('Coins: ' + coinCount);
+ // Update total score
+ LK.setScore(Math.floor(distance) + coinCount * 10);
+};
\ No newline at end of file