/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = gameSpeed;
self.isDefeated = false;
self.horizontalSpeed = 3;
self.horizontalDirection = 1;
self.movementRange = 150;
self.startX = 0;
self.defeat = function () {
if (!self.isDefeated) {
self.isDefeated = true;
LK.getSound('defeat').play();
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
tween(self, {
alpha: 0,
scaleY: 0.3
}, {
duration: 300
});
}
};
self.update = function () {
self.x -= self.speed;
// Add horizontal movement
if (self.startX === 0) {
self.startX = self.x;
}
self.y += self.horizontalSpeed * self.horizontalDirection;
if (self.y > self.startX + self.movementRange || self.y < self.startX - self.movementRange) {
self.horizontalDirection *= -1;
}
};
return self;
});
var Ground = Container.expand(function () {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0,
anchorY: 0
});
self.speed = gameSpeed;
self.update = function () {
self.x -= self.speed;
if (self.x <= -self.width) {
self.x += self.width * 2;
}
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = gameSpeed;
self.update = function () {
self.x -= self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.isOnGround = false;
self.jumpPower = -25;
self.gravity = 1.2;
self.groundY = 2500;
self.jump = function () {
if (self.isOnGround) {
self.velocityY = self.jumpPower;
self.isOnGround = false;
LK.getSound('jump').play();
}
};
self.update = function () {
// Normal gravity physics
self.velocityY += self.gravity;
self.y += self.velocityY;
if (self.y >= self.groundY) {
self.y = self.groundY;
self.velocityY = 0;
self.isOnGround = true;
}
};
return self;
});
var RopeObstacle = Container.expand(function () {
var self = Container.call(this);
var ropeGraphics = self.attachAsset('ropeObstacle', {
anchorX: 0.5,
anchorY: 0
});
self.speed = gameSpeed;
self.isAttached = false;
self.update = function () {
self.x -= self.speed;
};
return self;
});
var StreetLamp = Container.expand(function () {
var self = Container.call(this);
var lampPost = self.attachAsset('streetLamp', {
anchorX: 0.5,
anchorY: 1
});
var lampGlow = self.attachAsset('lampLight', {
anchorX: 0.5,
anchorY: 0.5
});
lampGlow.y = -130;
// Street lamps don't move - they stay fixed in position
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0f0f23
});
/****
* Game Code
****/
var gameSpeed = 20;
var spawnTimer = 0;
var speedIncreaseTimer = 0;
var obstacles = [];
var enemies = [];
var groundPieces = [];
var ropeObstacles = [];
var backgroundTiles = [];
var streetLamps = [];
var mapChanged = false;
// Create night cityscape background
for (var col = 0; col < 15; col++) {
// Create buildings of varying heights
var buildingTypes = ['building1', 'building2', 'building3'];
var buildingType = buildingTypes[Math.floor(Math.random() * buildingTypes.length)];
var building = game.addChild(LK.getAsset(buildingType, {
anchorX: 0,
anchorY: 1
}));
building.x = col * 200;
building.y = 2000; // Position buildings above ground
backgroundTiles.push(building);
// Add some windows (small yellow rectangles) to buildings
for (var window = 0; window < 6; window++) {
if (Math.random() > 0.7) {
// 30% chance for lit windows
var windowLight = game.addChild(LK.getAsset('lampLight', {
anchorX: 0.5,
anchorY: 0.5
}));
windowLight.x = building.x + 50 + window % 3 * 50;
windowLight.y = building.y - 100 - Math.floor(window / 3) * 80;
windowLight.width = 15;
windowLight.height = 15;
backgroundTiles.push(windowLight);
}
}
}
// Create stationary street lamps every 500 pixels (25 meters)
for (var lampPos = 0; lampPos < 5000; lampPos += 500) {
var streetLamp = game.addChild(new StreetLamp());
streetLamp.x = lampPos;
streetLamp.y = 2500;
streetLamps.push(streetLamp);
}
// Create player
var player = game.addChild(new Player());
player.x = 300;
player.y = 2500;
// Create permanent ground - more pieces for infinite coverage
for (var i = 0; i < 15; i++) {
var groundPiece = game.addChild(new Ground());
groundPiece.x = i * 300;
groundPiece.y = 2520;
groundPieces.push(groundPiece);
}
// Create score display
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 100;
// Jump control
game.down = function (x, y, obj) {
player.jump();
};
function spawnObstacle() {
var obstacle = new Obstacle();
obstacle.x = 2200;
obstacle.y = 2500;
obstacle.speed = gameSpeed;
obstacles.push(obstacle);
game.addChild(obstacle);
}
function spawnEnemy() {
var enemy = new Enemy();
enemy.x = 2200;
enemy.y = 2500;
enemy.speed = gameSpeed;
enemies.push(enemy);
game.addChild(enemy);
}
function spawnRopeObstacle() {
var rope = new RopeObstacle();
rope.x = 2200;
rope.y = 2200;
rope.speed = gameSpeed;
ropeObstacles.push(rope);
game.addChild(rope);
}
function checkCollisions() {
// Check obstacle collisions
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
LK.getSound('hit').play();
player.destroy();
LK.showGameOver();
return;
}
}
// Check rope obstacle collisions
for (var k = ropeObstacles.length - 1; k >= 0; k--) {
var rope = ropeObstacles[k];
if (player.intersects(rope)) {
// Make player jump forward
player.velocityY = -20;
player.isOnGround = false;
// Add forward momentum using tween
tween(player, {
x: player.x + 400
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
// After jumping forward, change map
if (!mapChanged) {
mapChanged = true;
// Change background to different pattern
for (var t = 0; t < backgroundTiles.length; t++) {
var tile = backgroundTiles[t];
var newColor = Math.random() > 0.5 ? 0xFF6B6B : 0x4ECDC4;
tween(tile, {
tint: newColor
}, {
duration: 500
});
}
}
}
});
// Remove the rope obstacle after collision
rope.destroy();
ropeObstacles.splice(k, 1);
}
}
// Check enemy collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (player.intersects(enemy) && !enemy.isDefeated) {
if (player.velocityY > 0 && player.y < enemy.y - 30) {
// Player is falling and above enemy - defeat enemy
enemy.defeat();
player.velocityY = -15; // Small bounce
} else {
// Player hit enemy from side or below - game over
LK.getSound('hit').play();
player.destroy();
LK.showGameOver();
return;
}
}
}
}
function updateGameSpeed() {
gameSpeed += 0.003;
// Update speed for all moving objects
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = gameSpeed;
}
for (var j = 0; j < enemies.length; j++) {
enemies[j].speed = gameSpeed;
}
for (var m = 0; m < ropeObstacles.length; m++) {
ropeObstacles[m].speed = gameSpeed;
}
// Ground pieces maintain constant speed for infinite scrolling
for (var k = 0; k < groundPieces.length; k++) {
groundPieces[k].speed = gameSpeed;
}
}
function cleanupObjects() {
// Remove off-screen obstacles
for (var i = obstacles.length - 1; i >= 0; i--) {
if (obstacles[i].x < -100) {
obstacles[i].destroy();
obstacles.splice(i, 1);
}
}
// Remove off-screen enemies
for (var j = enemies.length - 1; j >= 0; j--) {
if (enemies[j].x < -100) {
enemies[j].destroy();
enemies.splice(j, 1);
}
}
// Remove off-screen rope obstacles
for (var k = ropeObstacles.length - 1; k >= 0; k--) {
if (ropeObstacles[k].x < -100) {
ropeObstacles[k].destroy();
ropeObstacles.splice(k, 1);
}
}
}
game.update = function () {
// Spawn objects
spawnTimer++;
if (spawnTimer >= 90) {
var rand = Math.random();
if (rand < 0.4) {
spawnObstacle();
} else if (rand < 0.7) {
spawnEnemy();
} else {
spawnRopeObstacle();
}
spawnTimer = 0;
}
// Increase game speed over time
speedIncreaseTimer++;
if (speedIncreaseTimer >= 300) {
updateGameSpeed();
speedIncreaseTimer = 0;
}
// Update score based on survival time
if (LK.ticks % 30 === 0) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
}
// Check collisions
checkCollisions();
// Clean up off-screen objects
cleanupObjects();
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = gameSpeed;
self.isDefeated = false;
self.horizontalSpeed = 3;
self.horizontalDirection = 1;
self.movementRange = 150;
self.startX = 0;
self.defeat = function () {
if (!self.isDefeated) {
self.isDefeated = true;
LK.getSound('defeat').play();
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
tween(self, {
alpha: 0,
scaleY: 0.3
}, {
duration: 300
});
}
};
self.update = function () {
self.x -= self.speed;
// Add horizontal movement
if (self.startX === 0) {
self.startX = self.x;
}
self.y += self.horizontalSpeed * self.horizontalDirection;
if (self.y > self.startX + self.movementRange || self.y < self.startX - self.movementRange) {
self.horizontalDirection *= -1;
}
};
return self;
});
var Ground = Container.expand(function () {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0,
anchorY: 0
});
self.speed = gameSpeed;
self.update = function () {
self.x -= self.speed;
if (self.x <= -self.width) {
self.x += self.width * 2;
}
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = gameSpeed;
self.update = function () {
self.x -= self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.isOnGround = false;
self.jumpPower = -25;
self.gravity = 1.2;
self.groundY = 2500;
self.jump = function () {
if (self.isOnGround) {
self.velocityY = self.jumpPower;
self.isOnGround = false;
LK.getSound('jump').play();
}
};
self.update = function () {
// Normal gravity physics
self.velocityY += self.gravity;
self.y += self.velocityY;
if (self.y >= self.groundY) {
self.y = self.groundY;
self.velocityY = 0;
self.isOnGround = true;
}
};
return self;
});
var RopeObstacle = Container.expand(function () {
var self = Container.call(this);
var ropeGraphics = self.attachAsset('ropeObstacle', {
anchorX: 0.5,
anchorY: 0
});
self.speed = gameSpeed;
self.isAttached = false;
self.update = function () {
self.x -= self.speed;
};
return self;
});
var StreetLamp = Container.expand(function () {
var self = Container.call(this);
var lampPost = self.attachAsset('streetLamp', {
anchorX: 0.5,
anchorY: 1
});
var lampGlow = self.attachAsset('lampLight', {
anchorX: 0.5,
anchorY: 0.5
});
lampGlow.y = -130;
// Street lamps don't move - they stay fixed in position
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0f0f23
});
/****
* Game Code
****/
var gameSpeed = 20;
var spawnTimer = 0;
var speedIncreaseTimer = 0;
var obstacles = [];
var enemies = [];
var groundPieces = [];
var ropeObstacles = [];
var backgroundTiles = [];
var streetLamps = [];
var mapChanged = false;
// Create night cityscape background
for (var col = 0; col < 15; col++) {
// Create buildings of varying heights
var buildingTypes = ['building1', 'building2', 'building3'];
var buildingType = buildingTypes[Math.floor(Math.random() * buildingTypes.length)];
var building = game.addChild(LK.getAsset(buildingType, {
anchorX: 0,
anchorY: 1
}));
building.x = col * 200;
building.y = 2000; // Position buildings above ground
backgroundTiles.push(building);
// Add some windows (small yellow rectangles) to buildings
for (var window = 0; window < 6; window++) {
if (Math.random() > 0.7) {
// 30% chance for lit windows
var windowLight = game.addChild(LK.getAsset('lampLight', {
anchorX: 0.5,
anchorY: 0.5
}));
windowLight.x = building.x + 50 + window % 3 * 50;
windowLight.y = building.y - 100 - Math.floor(window / 3) * 80;
windowLight.width = 15;
windowLight.height = 15;
backgroundTiles.push(windowLight);
}
}
}
// Create stationary street lamps every 500 pixels (25 meters)
for (var lampPos = 0; lampPos < 5000; lampPos += 500) {
var streetLamp = game.addChild(new StreetLamp());
streetLamp.x = lampPos;
streetLamp.y = 2500;
streetLamps.push(streetLamp);
}
// Create player
var player = game.addChild(new Player());
player.x = 300;
player.y = 2500;
// Create permanent ground - more pieces for infinite coverage
for (var i = 0; i < 15; i++) {
var groundPiece = game.addChild(new Ground());
groundPiece.x = i * 300;
groundPiece.y = 2520;
groundPieces.push(groundPiece);
}
// Create score display
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 100;
// Jump control
game.down = function (x, y, obj) {
player.jump();
};
function spawnObstacle() {
var obstacle = new Obstacle();
obstacle.x = 2200;
obstacle.y = 2500;
obstacle.speed = gameSpeed;
obstacles.push(obstacle);
game.addChild(obstacle);
}
function spawnEnemy() {
var enemy = new Enemy();
enemy.x = 2200;
enemy.y = 2500;
enemy.speed = gameSpeed;
enemies.push(enemy);
game.addChild(enemy);
}
function spawnRopeObstacle() {
var rope = new RopeObstacle();
rope.x = 2200;
rope.y = 2200;
rope.speed = gameSpeed;
ropeObstacles.push(rope);
game.addChild(rope);
}
function checkCollisions() {
// Check obstacle collisions
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
LK.getSound('hit').play();
player.destroy();
LK.showGameOver();
return;
}
}
// Check rope obstacle collisions
for (var k = ropeObstacles.length - 1; k >= 0; k--) {
var rope = ropeObstacles[k];
if (player.intersects(rope)) {
// Make player jump forward
player.velocityY = -20;
player.isOnGround = false;
// Add forward momentum using tween
tween(player, {
x: player.x + 400
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
// After jumping forward, change map
if (!mapChanged) {
mapChanged = true;
// Change background to different pattern
for (var t = 0; t < backgroundTiles.length; t++) {
var tile = backgroundTiles[t];
var newColor = Math.random() > 0.5 ? 0xFF6B6B : 0x4ECDC4;
tween(tile, {
tint: newColor
}, {
duration: 500
});
}
}
}
});
// Remove the rope obstacle after collision
rope.destroy();
ropeObstacles.splice(k, 1);
}
}
// Check enemy collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (player.intersects(enemy) && !enemy.isDefeated) {
if (player.velocityY > 0 && player.y < enemy.y - 30) {
// Player is falling and above enemy - defeat enemy
enemy.defeat();
player.velocityY = -15; // Small bounce
} else {
// Player hit enemy from side or below - game over
LK.getSound('hit').play();
player.destroy();
LK.showGameOver();
return;
}
}
}
}
function updateGameSpeed() {
gameSpeed += 0.003;
// Update speed for all moving objects
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = gameSpeed;
}
for (var j = 0; j < enemies.length; j++) {
enemies[j].speed = gameSpeed;
}
for (var m = 0; m < ropeObstacles.length; m++) {
ropeObstacles[m].speed = gameSpeed;
}
// Ground pieces maintain constant speed for infinite scrolling
for (var k = 0; k < groundPieces.length; k++) {
groundPieces[k].speed = gameSpeed;
}
}
function cleanupObjects() {
// Remove off-screen obstacles
for (var i = obstacles.length - 1; i >= 0; i--) {
if (obstacles[i].x < -100) {
obstacles[i].destroy();
obstacles.splice(i, 1);
}
}
// Remove off-screen enemies
for (var j = enemies.length - 1; j >= 0; j--) {
if (enemies[j].x < -100) {
enemies[j].destroy();
enemies.splice(j, 1);
}
}
// Remove off-screen rope obstacles
for (var k = ropeObstacles.length - 1; k >= 0; k--) {
if (ropeObstacles[k].x < -100) {
ropeObstacles[k].destroy();
ropeObstacles.splice(k, 1);
}
}
}
game.update = function () {
// Spawn objects
spawnTimer++;
if (spawnTimer >= 90) {
var rand = Math.random();
if (rand < 0.4) {
spawnObstacle();
} else if (rand < 0.7) {
spawnEnemy();
} else {
spawnRopeObstacle();
}
spawnTimer = 0;
}
// Increase game speed over time
speedIncreaseTimer++;
if (speedIncreaseTimer >= 300) {
updateGameSpeed();
speedIncreaseTimer = 0;
}
// Update score based on survival time
if (LK.ticks % 30 === 0) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
}
// Check collisions
checkCollisions();
// Clean up off-screen objects
cleanupObjects();
};
yuvarlak ve başında siyah bandanası var . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
bir tahta etrafında bıçakları olan bir tahta . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
evler olsun ve sokak lambaları olsun ve hava karanlık olsun . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
güzel bir sokak direği . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
zemin beton zemini olsun ve yanındaki sarı çizgiler düz olsun
kafasında kırmızı bir bandana olan bir sporcu . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat