/**** * 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