/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var EnemyCar = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('enemyCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.lane = 0;
self.lastY = self.y;
self.hasBeenDodged = false;
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
};
return self;
});
var PlayerCar = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('playerCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.targetLane = 1;
self.currentLane = 1;
self.laneWidth = 2048 / 3;
self.isMoving = false;
self.moveTo = function (lane) {
if (lane !== self.currentLane && !self.isMoving) {
self.targetLane = lane;
self.isMoving = true;
var targetX = self.laneWidth * lane + self.laneWidth / 2;
tween(self, {
x: targetX
}, {
duration: 200,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.currentLane = lane;
self.isMoving = false;
}
});
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
var playerCar = game.addChild(new PlayerCar());
playerCar.x = game.width / 2;
playerCar.y = game.height - 150;
playerCar.currentLane = 1;
var enemyCars = [];
var score = 0;
var baseSpeed = 8;
var currentSpeed = baseSpeed;
var gameActive = true;
var dodgedCount = 0;
var spawnRate = 60;
var framesSinceLastSpawn = 0;
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var speedIndicator = new Text2('Speed: 1.0x', {
size: 80,
fill: 0xFF6B35
});
speedIndicator.anchor.set(0.5, 0);
speedIndicator.y = 150;
LK.gui.top.addChild(speedIndicator);
function updateScore(points) {
score += points;
LK.setScore(Math.floor(score / 10));
scoreTxt.setText(LK.getScore().toString());
var speedMultiplier = 1 + LK.getScore() * 0.02;
currentSpeed = baseSpeed * speedMultiplier;
speedIndicator.setText('Speed: ' + speedMultiplier.toFixed(1) + 'x');
if (LK.getScore() >= 500) {
LK.showYouWin();
}
}
function spawnEnemyCar() {
var lane = Math.floor(Math.random() * 3);
var newEnemy = game.addChild(new EnemyCar());
var laneWidth = game.width / 3;
newEnemy.x = laneWidth * lane + laneWidth / 2;
newEnemy.y = -150;
newEnemy.lane = lane;
newEnemy.speed = currentSpeed;
newEnemy.lastY = newEnemy.y;
newEnemy.hasBeenDodged = false;
enemyCars.push(newEnemy);
}
function checkCollision(enemy) {
var playerLaneWidth = playerCar.laneWidth;
var playerLaneX = playerCar.laneWidth * playerCar.currentLane + playerCar.laneWidth / 2;
var enemyLaneX = playerCar.laneWidth * enemy.lane + playerCar.laneWidth / 2;
if (playerLaneX === enemyLaneX && enemy.y >= playerCar.y - 100 && enemy.y <= playerCar.y + 100) {
return true;
}
return false;
}
game.down = function (x, y, obj) {
if (!gameActive) return;
var touchX = x;
var laneWidth = game.width / 3;
if (touchX < laneWidth) {
playerCar.moveTo(0);
} else if (touchX < laneWidth * 2) {
playerCar.moveTo(1);
} else {
playerCar.moveTo(2);
}
};
game.update = function () {
if (!gameActive) return;
updateScore(1);
framesSinceLastSpawn++;
var adjustedSpawnRate = Math.max(20, spawnRate - Math.floor(LK.getScore() / 50));
if (framesSinceLastSpawn >= adjustedSpawnRate) {
spawnEnemyCar();
framesSinceLastSpawn = 0;
}
for (var i = enemyCars.length - 1; i >= 0; i--) {
var enemy = enemyCars[i];
enemy.update();
if (enemy.lastY !== undefined && enemy.lastY < game.height && enemy.y >= game.height) {
if (!enemy.hasBeenDodged) {
enemy.hasBeenDodged = true;
updateScore(100);
LK.getSound('dodge').play();
}
enemy.destroy();
enemyCars.splice(i, 1);
continue;
}
if (checkCollision(enemy)) {
gameActive = false;
LK.effects.flashScreen(0xFF0000, 1000);
LK.getSound('collision').play();
LK.showGameOver();
}
}
};
LK.playMusic('bgmusic', {
loop: true
}); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,167 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var EnemyCar = Container.expand(function () {
+ var self = Container.call(this);
+ var carGraphics = self.attachAsset('enemyCar', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 0;
+ self.lane = 0;
+ self.lastY = self.y;
+ self.hasBeenDodged = false;
+ self.update = function () {
+ self.lastY = self.y;
+ self.y += self.speed;
+ };
+ return self;
+});
+var PlayerCar = Container.expand(function () {
+ var self = Container.call(this);
+ var carGraphics = self.attachAsset('playerCar', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 0;
+ self.targetLane = 1;
+ self.currentLane = 1;
+ self.laneWidth = 2048 / 3;
+ self.isMoving = false;
+ self.moveTo = function (lane) {
+ if (lane !== self.currentLane && !self.isMoving) {
+ self.targetLane = lane;
+ self.isMoving = true;
+ var targetX = self.laneWidth * lane + self.laneWidth / 2;
+ tween(self, {
+ x: targetX
+ }, {
+ duration: 200,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ self.currentLane = lane;
+ self.isMoving = false;
+ }
+ });
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
+ backgroundColor: 0x1a1a1a
+});
+
+/****
+* Game Code
+****/
+var playerCar = game.addChild(new PlayerCar());
+playerCar.x = game.width / 2;
+playerCar.y = game.height - 150;
+playerCar.currentLane = 1;
+var enemyCars = [];
+var score = 0;
+var baseSpeed = 8;
+var currentSpeed = baseSpeed;
+var gameActive = true;
+var dodgedCount = 0;
+var spawnRate = 60;
+var framesSinceLastSpawn = 0;
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var speedIndicator = new Text2('Speed: 1.0x', {
+ size: 80,
+ fill: 0xFF6B35
+});
+speedIndicator.anchor.set(0.5, 0);
+speedIndicator.y = 150;
+LK.gui.top.addChild(speedIndicator);
+function updateScore(points) {
+ score += points;
+ LK.setScore(Math.floor(score / 10));
+ scoreTxt.setText(LK.getScore().toString());
+ var speedMultiplier = 1 + LK.getScore() * 0.02;
+ currentSpeed = baseSpeed * speedMultiplier;
+ speedIndicator.setText('Speed: ' + speedMultiplier.toFixed(1) + 'x');
+ if (LK.getScore() >= 500) {
+ LK.showYouWin();
+ }
+}
+function spawnEnemyCar() {
+ var lane = Math.floor(Math.random() * 3);
+ var newEnemy = game.addChild(new EnemyCar());
+ var laneWidth = game.width / 3;
+ newEnemy.x = laneWidth * lane + laneWidth / 2;
+ newEnemy.y = -150;
+ newEnemy.lane = lane;
+ newEnemy.speed = currentSpeed;
+ newEnemy.lastY = newEnemy.y;
+ newEnemy.hasBeenDodged = false;
+ enemyCars.push(newEnemy);
+}
+function checkCollision(enemy) {
+ var playerLaneWidth = playerCar.laneWidth;
+ var playerLaneX = playerCar.laneWidth * playerCar.currentLane + playerCar.laneWidth / 2;
+ var enemyLaneX = playerCar.laneWidth * enemy.lane + playerCar.laneWidth / 2;
+ if (playerLaneX === enemyLaneX && enemy.y >= playerCar.y - 100 && enemy.y <= playerCar.y + 100) {
+ return true;
+ }
+ return false;
+}
+game.down = function (x, y, obj) {
+ if (!gameActive) return;
+ var touchX = x;
+ var laneWidth = game.width / 3;
+ if (touchX < laneWidth) {
+ playerCar.moveTo(0);
+ } else if (touchX < laneWidth * 2) {
+ playerCar.moveTo(1);
+ } else {
+ playerCar.moveTo(2);
+ }
+};
+game.update = function () {
+ if (!gameActive) return;
+ updateScore(1);
+ framesSinceLastSpawn++;
+ var adjustedSpawnRate = Math.max(20, spawnRate - Math.floor(LK.getScore() / 50));
+ if (framesSinceLastSpawn >= adjustedSpawnRate) {
+ spawnEnemyCar();
+ framesSinceLastSpawn = 0;
+ }
+ for (var i = enemyCars.length - 1; i >= 0; i--) {
+ var enemy = enemyCars[i];
+ enemy.update();
+ if (enemy.lastY !== undefined && enemy.lastY < game.height && enemy.y >= game.height) {
+ if (!enemy.hasBeenDodged) {
+ enemy.hasBeenDodged = true;
+ updateScore(100);
+ LK.getSound('dodge').play();
+ }
+ enemy.destroy();
+ enemyCars.splice(i, 1);
+ continue;
+ }
+ if (checkCollision(enemy)) {
+ gameActive = false;
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.getSound('collision').play();
+ LK.showGameOver();
+ }
+ }
+};
+LK.playMusic('bgmusic', {
+ loop: true
});
\ No newline at end of file