User prompt
Just make the line on 1 middle like an real road
User prompt
When you miss 1 car you lose and make white lines on middle
Code edit (1 edits merged)
Please save this source code
User prompt
Crash Course
Initial prompt
Make an car game with an road add some little traffic your goal is to crash the car you are driving
/****
* 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.isDestroyed = false;
return self;
});
var RoadDivider = Container.expand(function () {
var self = Container.call(this);
var dividerGraphics = self.attachAsset('laneDivider', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var TrafficVehicle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'car';
self.speed = 4 + Math.random() * 3;
self.points = self.type === 'truck' ? 20 : 10;
self.hasCollided = false;
var vehicleGraphics = self.attachAsset(self.type === 'truck' ? 'truck' : 'trafficCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x333333
});
/****
* Game Code
****/
// Game variables
var player;
var trafficVehicles = [];
var roadDividers = [];
var lanes = [400, 600, 800, 1000, 1200, 1400, 1648]; // 7 lanes across the screen
var spawnTimer = 0;
var spawnDelay = 60; // frames between spawns
var gameSpeed = 1;
var speedIncreaseTimer = 0;
var dragActive = false;
var dividerSpawnTimer = 0;
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var instructionTxt = new Text2('Drag to crash into traffic!', {
size: 60,
fill: 0xFFFF00
});
instructionTxt.anchor.set(0.5, 0);
instructionTxt.y = 100;
LK.gui.top.addChild(instructionTxt);
// Initialize player
player = game.addChild(new PlayerCar());
player.x = 1024; // Center horizontally
player.y = 2500; // Near bottom of screen
// Spawn traffic vehicle
function spawnTrafficVehicle() {
var laneIndex = Math.floor(Math.random() * lanes.length);
var vehicleType = Math.random() < 0.3 ? 'truck' : 'car';
var vehicle = new TrafficVehicle(vehicleType);
vehicle.x = lanes[laneIndex];
vehicle.y = -100; // Start above screen
trafficVehicles.push(vehicle);
game.addChild(vehicle);
}
// Spawn road dividers
function spawnRoadDivider() {
var dividerPositions = [500, 700, 900, 1100, 1300, 1500]; // Between lanes
for (var i = 0; i < dividerPositions.length; i++) {
var divider = new RoadDivider();
divider.x = dividerPositions[i];
divider.y = -100;
roadDividers.push(divider);
game.addChild(divider);
}
}
// Handle collision
function handleCollision(vehicle) {
if (vehicle.hasCollided) return;
vehicle.hasCollided = true;
var points = vehicle.points;
// Check for bonus multi-vehicle crashes
var nearbyVehicles = 0;
for (var i = 0; i < trafficVehicles.length; i++) {
var other = trafficVehicles[i];
if (other !== vehicle && !other.hasCollided) {
var distance = Math.sqrt(Math.pow(vehicle.x - other.x, 2) + Math.pow(vehicle.y - other.y, 2));
if (distance < 150) {
nearbyVehicles++;
other.hasCollided = true;
points += other.points;
}
}
}
// Bonus for multi-vehicle crashes
if (nearbyVehicles > 0) {
points += nearbyVehicles * 5;
LK.getSound('bonus').play();
} else {
LK.getSound('crash').play();
}
// Update score
LK.setScore(LK.getScore() + points);
scoreTxt.setText('Score: ' + LK.getScore());
// Visual effects
LK.effects.flashObject(vehicle, 0xff0000, 500);
LK.effects.flashObject(player, 0xffff00, 300);
// Tween crashed vehicle
tween(vehicle, {
alpha: 0.3,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 500,
easing: tween.easeOut
});
}
// Touch controls
game.down = function (x, y, obj) {
dragActive = true;
player.x = x;
};
game.move = function (x, y, obj) {
if (dragActive) {
player.x = Math.max(200, Math.min(1848, x)); // Keep within screen bounds
}
};
game.up = function (x, y, obj) {
dragActive = false;
};
// Main game loop
game.update = function () {
// Spawn traffic vehicles
spawnTimer++;
if (spawnTimer >= spawnDelay) {
spawnTrafficVehicle();
spawnTimer = 0;
}
// Spawn road dividers
dividerSpawnTimer++;
if (dividerSpawnTimer >= 120) {
// Every 2 seconds
spawnRoadDivider();
dividerSpawnTimer = 0;
}
// Increase difficulty over time
speedIncreaseTimer++;
if (speedIncreaseTimer >= 1800) {
// Every 30 seconds
gameSpeed += 0.1;
spawnDelay = Math.max(20, spawnDelay - 2);
speedIncreaseTimer = 0;
}
// Update road dividers
for (var i = roadDividers.length - 1; i >= 0; i--) {
var divider = roadDividers[i];
// Remove dividers that are off screen
if (divider.y > 2800) {
divider.destroy();
roadDividers.splice(i, 1);
}
}
// Update traffic vehicles
for (var i = trafficVehicles.length - 1; i >= 0; i--) {
var vehicle = trafficVehicles[i];
// Check collision with player
if (!vehicle.hasCollided && player.intersects(vehicle)) {
handleCollision(vehicle);
}
// Check if vehicle was missed (passed player without collision)
if (!vehicle.hasCollided && vehicle.y > player.y + 100) {
// Vehicle missed - game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
// Remove vehicles that are off screen
if (vehicle.y > 2800) {
vehicle.destroy();
trafficVehicles.splice(i, 1);
}
}
// Hide instruction text after first crash
if (LK.getScore() > 0 && instructionTxt.alpha > 0) {
tween(instructionTxt, {
alpha: 0
}, {
duration: 1000
});
}
}; ===================================================================
--- original.js
+++ change.js
@@ -14,8 +14,20 @@
});
self.isDestroyed = false;
return self;
});
+var RoadDivider = Container.expand(function () {
+ var self = Container.call(this);
+ var dividerGraphics = self.attachAsset('laneDivider', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
var TrafficVehicle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'car';
self.speed = 4 + Math.random() * 3;
@@ -43,14 +55,16 @@
****/
// Game variables
var player;
var trafficVehicles = [];
+var roadDividers = [];
var lanes = [400, 600, 800, 1000, 1200, 1400, 1648]; // 7 lanes across the screen
var spawnTimer = 0;
var spawnDelay = 60; // frames between spawns
var gameSpeed = 1;
var speedIncreaseTimer = 0;
var dragActive = false;
+var dividerSpawnTimer = 0;
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
@@ -77,8 +91,19 @@
vehicle.y = -100; // Start above screen
trafficVehicles.push(vehicle);
game.addChild(vehicle);
}
+// Spawn road dividers
+function spawnRoadDivider() {
+ var dividerPositions = [500, 700, 900, 1100, 1300, 1500]; // Between lanes
+ for (var i = 0; i < dividerPositions.length; i++) {
+ var divider = new RoadDivider();
+ divider.x = dividerPositions[i];
+ divider.y = -100;
+ roadDividers.push(divider);
+ game.addChild(divider);
+ }
+}
// Handle collision
function handleCollision(vehicle) {
if (vehicle.hasCollided) return;
vehicle.hasCollided = true;
@@ -139,23 +164,46 @@
if (spawnTimer >= spawnDelay) {
spawnTrafficVehicle();
spawnTimer = 0;
}
+ // Spawn road dividers
+ dividerSpawnTimer++;
+ if (dividerSpawnTimer >= 120) {
+ // Every 2 seconds
+ spawnRoadDivider();
+ dividerSpawnTimer = 0;
+ }
// Increase difficulty over time
speedIncreaseTimer++;
if (speedIncreaseTimer >= 1800) {
// Every 30 seconds
gameSpeed += 0.1;
spawnDelay = Math.max(20, spawnDelay - 2);
speedIncreaseTimer = 0;
}
+ // Update road dividers
+ for (var i = roadDividers.length - 1; i >= 0; i--) {
+ var divider = roadDividers[i];
+ // Remove dividers that are off screen
+ if (divider.y > 2800) {
+ divider.destroy();
+ roadDividers.splice(i, 1);
+ }
+ }
// Update traffic vehicles
for (var i = trafficVehicles.length - 1; i >= 0; i--) {
var vehicle = trafficVehicles[i];
// Check collision with player
if (!vehicle.hasCollided && player.intersects(vehicle)) {
handleCollision(vehicle);
}
+ // Check if vehicle was missed (passed player without collision)
+ if (!vehicle.hasCollided && vehicle.y > player.y + 100) {
+ // Vehicle missed - game over
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
// Remove vehicles that are off screen
if (vehicle.y > 2800) {
vehicle.destroy();
trafficVehicles.splice(i, 1);