User prompt
Let's manage one car
User prompt
Leave a gap between the back of the 2nd car and the front of the . car
User prompt
Leave a gap between the back of the first car and the front of the second car.
User prompt
The cars should be lined up and in a row, but there should be space between them.
User prompt
cars move away from each other
User prompt
Have 2 more cars in the back, follow the car in the front.
User prompt
Let there be 4 more cars behind, let them follow the car in front.
User prompt
let the road be 4 lanes
User prompt
The screen is divided into two invisible halves: Left side: Tap to move the car to the left lane. Right side: Tap to move the car to the right lane.
Code edit (1 edits merged)
Please save this source code
User prompt
Highway Dodge
Initial prompt
Objective: The player will be driving on a highway in a vehicle and will try to avoid the obstacles that come their way. The player's goal is to survive as long as possible and collect high scores. Story: The game will be a simple arcade style, with only one goal: to avoid the obstacles. However, as you progress, the speed and difficulty level will increase.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Lane Divider Class
var LaneDivider = Container.expand(function () {
var self = Container.call(this);
var divider = self.attachAsset('laneDivider', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Obstacle Car Class
var ObstacleCar = Container.expand(function () {
var self = Container.call(this);
var car = self.attachAsset('obstacleCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.type = 'car';
self.speed = 0;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Obstacle Truck Class
var ObstacleTruck = Container.expand(function () {
var self = Container.call(this);
var truck = self.attachAsset('obstacleTruck', {
anchorX: 0.5,
anchorY: 0.5
});
self.type = 'truck';
self.speed = 0;
self.update = function () {
self.y += self.speed;
};
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
});
// For collision, use self as the hitbox
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// Game constants
// Vehicle (player car)
// Obstacle (other cars/trucks)
// Road lane divider
var ROAD_WIDTH = 1200;
var ROAD_LEFT = (2048 - ROAD_WIDTH) / 2;
var ROAD_RIGHT = ROAD_LEFT + ROAD_WIDTH;
var NUM_LANES = 4;
var LANE_WIDTH = ROAD_WIDTH / NUM_LANES;
var PLAYER_START_LANE = 2; // 0-indexed
var PLAYER_Y = 2200;
var OBSTACLE_MIN_GAP = 420;
var OBSTACLE_MAX_GAP = 800;
var OBSTACLE_MIN_SPEED = 18;
var OBSTACLE_MAX_SPEED = 38;
var LANE_DIVIDER_GAP = 320;
var LANE_DIVIDER_SPEED = 28;
// Game state
var playerCar;
var followerCars = []; // Array of follower cars (unused, kept for compatibility)
var NUM_FOLLOWERS = 0; // Number of follower cars (set to 0 to disable followers)
var FOLLOWER_GAP = 120; // Vertical gap between cars (unused)
var playerLane = PLAYER_START_LANE;
var obstacles = [];
var laneDividers = [];
var dragStartX = null;
var dragStartLane = null;
var isDragging = false;
var gameOver = false;
var ticksSurvived = 0;
var speedMultiplier = 1;
// Score display
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Draw road background (just a rectangle, not an asset)
var roadBg = LK.getAsset('laneDivider', {
width: ROAD_WIDTH,
height: 2732,
color: 0x333333,
anchorX: 0,
anchorY: 0,
x: ROAD_LEFT,
y: 0
});
game.addChild(roadBg);
// Draw lane dividers (vertical dashed lines)
function spawnLaneDividers() {
for (var lane = 1; lane < NUM_LANES; lane++) {
for (var y = -120; y < 2732 + 120; y += LANE_DIVIDER_GAP + 120) {
var divider = new LaneDivider();
divider.x = ROAD_LEFT + lane * LANE_WIDTH;
divider.y = y;
divider.speed = LANE_DIVIDER_SPEED;
laneDividers.push(divider);
game.addChild(divider);
}
}
}
spawnLaneDividers();
// Spawn player car
playerCar = new PlayerCar();
playerCar.x = ROAD_LEFT + (playerLane + 0.5) * LANE_WIDTH;
playerCar.y = PLAYER_Y;
game.addChild(playerCar);
// No follower cars to spawn
// Touch controls: tap left/right quarter to move car to leftmost/rightmost lane, inner quarters for inner lanes
game.down = function (x, y, obj) {
if (gameOver) return;
var quarter = 2048 / 4;
var targetLane = playerLane;
if (x < quarter) {
// Tap on leftmost quarter: move to lane 0
targetLane = 0;
} else if (x < 2 * quarter) {
// Tap on 2nd quarter: move to lane 1
targetLane = 1;
} else if (x < 3 * quarter) {
// Tap on 3rd quarter: move to lane 2
targetLane = 2;
} else {
// Tap on rightmost quarter: move to lane 3
targetLane = 3;
}
if (playerLane !== targetLane) {
playerLane = targetLane;
tween(playerCar, {
x: ROAD_LEFT + (playerLane + 0.5) * LANE_WIDTH
}, {
duration: 120,
easing: tween.cubicOut
});
}
};
game.move = function (x, y, obj) {
// No drag/swipe movement needed for tap controls
};
game.up = function (x, y, obj) {
// No drag/swipe state to reset
};
// Spawn obstacles at random intervals
var nextObstacleTick = 0;
function spawnObstacle() {
// Randomly choose lane and type
var lane = Math.floor(Math.random() * NUM_LANES);
var type = Math.random() < 0.7 ? 'car' : 'truck';
var obs;
if (type === 'car') {
obs = new ObstacleCar();
} else {
obs = new ObstacleTruck();
}
obs.x = ROAD_LEFT + (lane + 0.5) * LANE_WIDTH;
obs.y = -(obs.height / 2);
// Speed increases with time
obs.speed = OBSTACLE_MIN_SPEED + (OBSTACLE_MAX_SPEED - OBSTACLE_MIN_SPEED) * speedMultiplier;
obstacles.push(obs);
game.addChild(obs);
}
// Main game update loop
game.update = function () {
if (gameOver) return;
ticksSurvived++;
// Score: 1 point per 10 ticks survived
if (ticksSurvived % 10 === 0) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
}
// Increase speed multiplier over time (caps at 1)
speedMultiplier = Math.min(1, ticksSurvived / (60 * 60)); // 1 after 60 seconds
// Move lane dividers
for (var i = laneDividers.length - 1; i >= 0; i--) {
var divider = laneDividers[i];
divider.speed = LANE_DIVIDER_SPEED + 20 * speedMultiplier;
divider.update();
if (divider.y > 2732 + 120) {
divider.y = -120;
}
}
// Move obstacles
for (var j = obstacles.length - 1; j >= 0; j--) {
var obs = obstacles[j];
obs.speed = OBSTACLE_MIN_SPEED + (OBSTACLE_MAX_SPEED - OBSTACLE_MIN_SPEED) * speedMultiplier;
obs.update();
// Remove if off screen
if (obs.y - obs.height / 2 > 2732 + 100) {
obs.destroy();
obstacles.splice(j, 1);
continue;
}
// Collision detection
if (obs.intersects(playerCar)) {
// Flash screen red
LK.effects.flashScreen(0xff0000, 800);
gameOver = true;
LK.showGameOver();
return;
}
}
// No follower cars to update
// Spawn new obstacles
if (LK.ticks >= nextObstacleTick) {
spawnObstacle();
// Next obstacle in random ticks, gets faster over time
var minGap = OBSTACLE_MIN_GAP - 200 * speedMultiplier;
var maxGap = OBSTACLE_MAX_GAP - 400 * speedMultiplier;
if (minGap < 180) minGap = 180;
if (maxGap < 320) maxGap = 320;
var gap = minGap + Math.random() * (maxGap - minGap);
nextObstacleTick = LK.ticks + Math.floor(gap / (OBSTACLE_MIN_SPEED + (OBSTACLE_MAX_SPEED - OBSTACLE_MIN_SPEED) * speedMultiplier));
}
};
// Reset game state on restart
game.on('reset', function () {
// Remove all obstacles and lane dividers
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
obstacles = [];
for (var j = 0; j < laneDividers.length; j++) {
laneDividers[j].destroy();
}
laneDividers = [];
// No follower cars to remove or respawn
// Recreate lane dividers
spawnLaneDividers();
// Reset player
playerLane = PLAYER_START_LANE;
playerCar.x = ROAD_LEFT + (playerLane + 0.5) * LANE_WIDTH;
playerCar.y = PLAYER_Y;
// Reset state
dragStartX = null;
dragStartLane = null;
isDragging = false;
gameOver = false;
ticksSurvived = 0;
speedMultiplier = 0;
LK.setScore(0);
scoreTxt.setText('0');
nextObstacleTick = 0;
}); ===================================================================
--- original.js
+++ change.js
@@ -67,12 +67,12 @@
/****
* Game Code
****/
-// Road lane divider
-// Obstacle (other cars/trucks)
-// Vehicle (player car)
// Game constants
+// Vehicle (player car)
+// Obstacle (other cars/trucks)
+// Road lane divider
var ROAD_WIDTH = 1200;
var ROAD_LEFT = (2048 - ROAD_WIDTH) / 2;
var ROAD_RIGHT = ROAD_LEFT + ROAD_WIDTH;
var NUM_LANES = 4;
@@ -86,11 +86,11 @@
var LANE_DIVIDER_GAP = 320;
var LANE_DIVIDER_SPEED = 28;
// Game state
var playerCar;
-var followerCars = []; // Array of follower cars
-var NUM_FOLLOWERS = 2; // Number of follower cars
-var FOLLOWER_GAP = 120; // Vertical gap between cars
+var followerCars = []; // Array of follower cars (unused, kept for compatibility)
+var NUM_FOLLOWERS = 0; // Number of follower cars (set to 0 to disable followers)
+var FOLLOWER_GAP = 120; // Vertical gap between cars (unused)
var playerLane = PLAYER_START_LANE;
var obstacles = [];
var laneDividers = [];
var dragStartX = null;
@@ -135,25 +135,9 @@
playerCar = new PlayerCar();
playerCar.x = ROAD_LEFT + (playerLane + 0.5) * LANE_WIDTH;
playerCar.y = PLAYER_Y;
game.addChild(playerCar);
-// Spawn follower cars behind the player car
-followerCars = [];
-for (var i = 0; i < NUM_FOLLOWERS; i++) {
- var follower = new PlayerCar();
- // Line up followers in the same lane as player, spaced vertically
- follower.x = playerCar.x;
- var carHeight = playerCar.height;
- var gapBetweenCars = 60; // The gap between the back of the first car and the front of the second car
- var extraGap = 0;
- if (i === 1) {
- // Leave a gap between the back of the 2nd car and the front of the 3rd car (follower)
- extraGap = 60;
- }
- follower.y = playerCar.y + (i + 1) * (carHeight + gapBetweenCars) + extraGap; // Add car height and gap for each follower
- game.addChild(follower);
- followerCars.push(follower);
-}
+// No follower cars to spawn
// Touch controls: tap left/right quarter to move car to leftmost/rightmost lane, inner quarters for inner lanes
game.down = function (x, y, obj) {
if (gameOver) return;
var quarter = 2048 / 4;
@@ -245,28 +229,9 @@
LK.showGameOver();
return;
}
}
- // Update follower cars to follow the car in front, lined up in a row with space between
- var leader = playerCar;
- var carHeight = playerCar.height;
- var gapBetweenCars = 60; // The gap between the back of the first car and the front of the second car
- for (var i = 0; i < followerCars.length; i++) {
- var follower = followerCars[i];
- // Target X is exactly the leader's X (same lane)
- var targetX = leader.x;
- // Target Y is a fixed gap behind the leader, using car height and gap
- var extraGap = 0;
- if (i === 1) {
- // Maintain extra gap between 2nd and 3rd car
- extraGap = 60;
- }
- var targetY = leader.y + carHeight + gapBetweenCars + extraGap;
- // Smoothly interpolate position for a following effect
- follower.x += (targetX - follower.x) * 0.25;
- follower.y += (targetY - follower.y) * 0.25;
- leader = follower;
- }
+ // No follower cars to update
// Spawn new obstacles
if (LK.ticks >= nextObstacleTick) {
spawnObstacle();
// Next obstacle in random ticks, gets faster over time
@@ -288,35 +253,15 @@
for (var j = 0; j < laneDividers.length; j++) {
laneDividers[j].destroy();
}
laneDividers = [];
- // Remove follower cars
- for (var k = 0; k < followerCars.length; k++) {
- followerCars[k].destroy();
- }
- followerCars = [];
+ // No follower cars to remove or respawn
// Recreate lane dividers
spawnLaneDividers();
// Reset player
playerLane = PLAYER_START_LANE;
playerCar.x = ROAD_LEFT + (playerLane + 0.5) * LANE_WIDTH;
playerCar.y = PLAYER_Y;
- // Recreate follower cars
- for (var i = 0; i < NUM_FOLLOWERS; i++) {
- var follower = new PlayerCar();
- // Line up followers in the same lane as player, spaced vertically
- follower.x = playerCar.x;
- var carHeight = playerCar.height;
- var gapBetweenCars = 60; // The gap between the back of the first car and the front of the second car
- var extraGap = 0;
- if (i === 1) {
- // Leave a gap between the back of the 2nd car and the front of the 3rd car (follower)
- extraGap = 60;
- }
- follower.y = playerCar.y + (i + 1) * (carHeight + gapBetweenCars) + extraGap; // Add car height and gap for each follower
- game.addChild(follower);
- followerCars.push(follower);
- }
// Reset state
dragStartX = null;
dragStartLane = null;
isDragging = false;
A luxury black van with the words penci zorno on it, top view looking at the opposite side. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a top view of the supercar with rocket engines on the back. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
super Truck with propeller top view. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat