/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ // Dino (player) class var Dino = Container.expand(function () { var self = Container.call(this); var dinoSprite = self.attachAsset('dino', { anchorX: 0.5, anchorY: 1 }); self.width = dinoSprite.width; self.height = dinoSprite.height; self.isJumping = false; self.isDucking = false; self.velocityY = 0; self.gravity = 2.2; self.jumpStrength = -48; self.groundY = 0; // Will be set after creation // Jump method self.jump = function () { if (!self.isJumping && !self.isDucking) { self.velocityY = self.jumpStrength; self.isJumping = true; } }; // Duck method self.duck = function () { if (!self.isJumping && !self.isDucking) { self.isDucking = true; // Animate duck (shrink height, move down) tween(self, { scaleY: 0.55, y: self.y + self.height * 0.45 }, { duration: 120, easing: tween.cubicIn }); } }; // Stand up from duck self.stand = function () { if (self.isDucking) { self.isDucking = false; tween(self, { scaleY: 1, y: self.groundY }, { duration: 120, easing: tween.cubicOut }); } }; // Update method self.update = function () { // Jumping physics if (self.isJumping) { self.y += self.velocityY; self.velocityY += self.gravity; if (self.y >= self.groundY) { self.y = self.groundY; self.velocityY = 0; self.isJumping = false; } } }; return self; }); // Obstacle base class var Obstacle = Container.expand(function () { var self = Container.call(this); self.speed = 0; // Will be set on spawn self.type = 'cactus'; // cactus, rock, bird self.passed = false; // For scoring self.update = function () { self.x -= self.speed; }; return self; }); // Rock var Rock = Obstacle.expand(function () { var self = Obstacle.call(this); var rockSprite = self.attachAsset('rock', { anchorX: 0.5, anchorY: 1 }); self.width = rockSprite.width; self.height = rockSprite.height; self.type = 'rock'; return self; }); // Cactus var Cactus = Obstacle.expand(function () { var self = Obstacle.call(this); var cactusSprite = self.attachAsset('cactus', { anchorX: 0.5, anchorY: 1 }); self.width = cactusSprite.width; self.height = cactusSprite.height; self.type = 'cactus'; return self; }); // Bird var Bird = Obstacle.expand(function () { var self = Obstacle.call(this); var birdSprite = self.attachAsset('bird', { anchorX: 0.5, anchorY: 1 }); self.width = birdSprite.width; self.height = birdSprite.height; self.type = 'bird'; // Bird flies at random heights self.flyY = 0; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xffffff }); /**** * Game Code ****/ // Add background image (fills the game area) var background = LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); game.addChild(background); // Ground // Bird obstacle // Rock obstacle // Cactus obstacle // Dino (player) // Game constants var GROUND_Y = 2300; var DINO_START_X = 400; var OBSTACLE_MIN_GAP = 600; var OBSTACLE_MAX_GAP = 1100; var OBSTACLE_TYPES = ['cactus', 'rock', 'bird']; var GAME_SPEED_START = 12; var GAME_SPEED_MAX = 28; var GAME_SPEED_INC = 0.00022; // Per tick var BIRD_HEIGHTS = [GROUND_Y - 120, GROUND_Y - 320, GROUND_Y - 520]; // Game state var dino; var ground; var obstacles = []; var score = 0; var highScore = storage.highScore || 0; var distance = 0; var gameSpeed = GAME_SPEED_START; var lastObstacleX = 0; var isGameOver = false; var scoreTxt, highScoreTxt; // Add ground // Make the ground a perfect square and fit it to the bottom of the screen var groundSize = Math.min(2048, 2732 - GROUND_Y); // Tile the ground square horizontally to fill the screen width var groundTiles = []; var numTiles = Math.ceil(2048 / groundSize); for (var i = 0; i < numTiles; i++) { var groundTile = LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: i * groundSize, y: 2732 - groundSize, width: groundSize, height: groundSize }); game.addChild(groundTile); groundTiles.push(groundTile); } // For compatibility, keep a reference to the first ground tile as 'ground' ground = groundTiles[0]; // Add dino dino = new Dino(); dino.x = DINO_START_X; dino.groundY = GROUND_Y; dino.y = GROUND_Y; game.addChild(dino); // Score text scoreTxt = new Text2('0', { size: 110, fill: "#222" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // High score text highScoreTxt = new Text2('En Yüksek: ' + highScore, { size: 60, fill: "#888" }); highScoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(highScoreTxt); highScoreTxt.y = 120; // Helper: spawn obstacle function spawnObstacle() { var typeIdx = Math.floor(Math.random() * OBSTACLE_TYPES.length); var type = OBSTACLE_TYPES[typeIdx]; var obs; if (type === 'cactus') { obs = new Cactus(); obs.y = GROUND_Y; } else if (type === 'rock') { obs = new Rock(); obs.y = GROUND_Y; } else if (type === 'bird') { obs = new Bird(); var hIdx = Math.floor(Math.random() * BIRD_HEIGHTS.length); obs.y = BIRD_HEIGHTS[hIdx]; obs.flyY = obs.y; } obs.x = 2048 + obs.width; obs.speed = gameSpeed; // Defensive: initialize lastX and lastY for event/collision best practices obs.lastX = obs.x; obs.lastY = obs.y; obstacles.push(obs); game.addChild(obs); lastObstacleX = obs.x; } // Helper: reset game function resetGame() { // Remove obstacles for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } obstacles = []; score = 0; distance = 0; gameSpeed = GAME_SPEED_START; lastObstacleX = 0; isGameOver = false; dino.x = DINO_START_X; dino.y = GROUND_Y; dino.groundY = GROUND_Y; dino.velocityY = 0; dino.isJumping = false; dino.isDucking = false; dino.scaleY = 1; dino.lastX = dino.x; dino.lastY = dino.y; scoreTxt.setText('0'); highScoreTxt.setText('En Yüksek: ' + highScore); } // Touch/press: jump or duck var touchStartY = null; var touchActive = false; game.down = function (x, y, obj) { if (isGameOver) return; touchStartY = y; touchActive = true; }; game.move = function (x, y, obj) { if (isGameOver) return; if (!touchActive) return; // If swipe up, jump if (touchStartY !== null && y < touchStartY - 80) { dino.jump(); touchActive = false; } // If swipe down, duck if (touchStartY !== null && y > touchStartY + 80) { dino.duck(); touchActive = false; } }; game.up = function (x, y, obj) { if (isGameOver) return; dino.stand(); touchStartY = null; touchActive = false; }; // Main update loop game.update = function () { if (isGameOver) return; // Defensive: track dino's lastX and lastY for event/collision best practices if (dino.lastX === undefined) dino.lastX = dino.x; if (dino.lastY === undefined) dino.lastY = dino.y; // Update dino dino.update(); // Ground tiles remain static; no movement for (var g = 0; g < groundTiles.length; g++) { var tile = groundTiles[g]; tile.x = g * groundSize; } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; // Defensive: track lastX and lastY for event/collision best practices if (obs.lastX === undefined) obs.lastX = obs.x; if (obs.lastY === undefined) obs.lastY = obs.y; obs.speed = gameSpeed; obs.update(); // Bird: simple up-down movement if (obs.type === 'bird') { obs.y = obs.flyY + Math.sin(LK.ticks / 12 + i) * 18; } // Remove if off screen if (obs.x < -obs.width) { obs.destroy(); obstacles.splice(i, 1); continue; } // Scoring: passed dino if (!obs.passed && obs.x + obs.width / 2 < dino.x - dino.width / 2) { obs.passed = true; score += 1; scoreTxt.setText('' + score); } // Collision if (dino.intersects(obs)) { // If ducking and bird, allow pass if (obs.type === 'bird' && dino.isDucking && obs.y > dino.y - dino.height * 0.7) { continue; } // Game over isGameOver = true; LK.effects.flashScreen(0xff0000, 800); if (score > highScore) { highScore = score; storage.highScore = highScore; } LK.setTimeout(function () { LK.showGameOver(); }, 900); return; } } // After all movement, update lastX and lastY for obstacles for (var j = 0; j < obstacles.length; j++) { obstacles[j].lastX = obstacles[j].x; obstacles[j].lastY = obstacles[j].y; } // Update dino's lastX and lastY dino.lastX = dino.x; dino.lastY = dino.y; // Increase game speed if (gameSpeed < GAME_SPEED_MAX) { gameSpeed += GAME_SPEED_INC * (1 + score * 0.04); if (gameSpeed > GAME_SPEED_MAX) gameSpeed = GAME_SPEED_MAX; } // Distance for score distance += gameSpeed; // Spawn new obstacle if (obstacles.length === 0 || 2048 - lastObstacleX > OBSTACLE_MIN_GAP + Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP)) { spawnObstacle(); } }; // Listen for game over to reset LK.on('gameover', function () { resetGame(); }); // Listen for you win (not used, but for completeness) LK.on('youwin', function () { resetGame(); });
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0
});
/****
* Classes
****/
// Dino (player) class
var Dino = Container.expand(function () {
var self = Container.call(this);
var dinoSprite = self.attachAsset('dino', {
anchorX: 0.5,
anchorY: 1
});
self.width = dinoSprite.width;
self.height = dinoSprite.height;
self.isJumping = false;
self.isDucking = false;
self.velocityY = 0;
self.gravity = 2.2;
self.jumpStrength = -48;
self.groundY = 0; // Will be set after creation
// Jump method
self.jump = function () {
if (!self.isJumping && !self.isDucking) {
self.velocityY = self.jumpStrength;
self.isJumping = true;
}
};
// Duck method
self.duck = function () {
if (!self.isJumping && !self.isDucking) {
self.isDucking = true;
// Animate duck (shrink height, move down)
tween(self, {
scaleY: 0.55,
y: self.y + self.height * 0.45
}, {
duration: 120,
easing: tween.cubicIn
});
}
};
// Stand up from duck
self.stand = function () {
if (self.isDucking) {
self.isDucking = false;
tween(self, {
scaleY: 1,
y: self.groundY
}, {
duration: 120,
easing: tween.cubicOut
});
}
};
// Update method
self.update = function () {
// Jumping physics
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += self.gravity;
if (self.y >= self.groundY) {
self.y = self.groundY;
self.velocityY = 0;
self.isJumping = false;
}
}
};
return self;
});
// Obstacle base class
var Obstacle = Container.expand(function () {
var self = Container.call(this);
self.speed = 0; // Will be set on spawn
self.type = 'cactus'; // cactus, rock, bird
self.passed = false; // For scoring
self.update = function () {
self.x -= self.speed;
};
return self;
});
// Rock
var Rock = Obstacle.expand(function () {
var self = Obstacle.call(this);
var rockSprite = self.attachAsset('rock', {
anchorX: 0.5,
anchorY: 1
});
self.width = rockSprite.width;
self.height = rockSprite.height;
self.type = 'rock';
return self;
});
// Cactus
var Cactus = Obstacle.expand(function () {
var self = Obstacle.call(this);
var cactusSprite = self.attachAsset('cactus', {
anchorX: 0.5,
anchorY: 1
});
self.width = cactusSprite.width;
self.height = cactusSprite.height;
self.type = 'cactus';
return self;
});
// Bird
var Bird = Obstacle.expand(function () {
var self = Obstacle.call(this);
var birdSprite = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 1
});
self.width = birdSprite.width;
self.height = birdSprite.height;
self.type = 'bird';
// Bird flies at random heights
self.flyY = 0;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffffff
});
/****
* Game Code
****/
// Add background image (fills the game area)
var background = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: 2048,
height: 2732
});
game.addChild(background);
// Ground
// Bird obstacle
// Rock obstacle
// Cactus obstacle
// Dino (player)
// Game constants
var GROUND_Y = 2300;
var DINO_START_X = 400;
var OBSTACLE_MIN_GAP = 600;
var OBSTACLE_MAX_GAP = 1100;
var OBSTACLE_TYPES = ['cactus', 'rock', 'bird'];
var GAME_SPEED_START = 12;
var GAME_SPEED_MAX = 28;
var GAME_SPEED_INC = 0.00022; // Per tick
var BIRD_HEIGHTS = [GROUND_Y - 120, GROUND_Y - 320, GROUND_Y - 520];
// Game state
var dino;
var ground;
var obstacles = [];
var score = 0;
var highScore = storage.highScore || 0;
var distance = 0;
var gameSpeed = GAME_SPEED_START;
var lastObstacleX = 0;
var isGameOver = false;
var scoreTxt, highScoreTxt;
// Add ground
// Make the ground a perfect square and fit it to the bottom of the screen
var groundSize = Math.min(2048, 2732 - GROUND_Y);
// Tile the ground square horizontally to fill the screen width
var groundTiles = [];
var numTiles = Math.ceil(2048 / groundSize);
for (var i = 0; i < numTiles; i++) {
var groundTile = LK.getAsset('ground', {
anchorX: 0,
anchorY: 0,
x: i * groundSize,
y: 2732 - groundSize,
width: groundSize,
height: groundSize
});
game.addChild(groundTile);
groundTiles.push(groundTile);
}
// For compatibility, keep a reference to the first ground tile as 'ground'
ground = groundTiles[0];
// Add dino
dino = new Dino();
dino.x = DINO_START_X;
dino.groundY = GROUND_Y;
dino.y = GROUND_Y;
game.addChild(dino);
// Score text
scoreTxt = new Text2('0', {
size: 110,
fill: "#222"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// High score text
highScoreTxt = new Text2('En Yüksek: ' + highScore, {
size: 60,
fill: "#888"
});
highScoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreTxt);
highScoreTxt.y = 120;
// Helper: spawn obstacle
function spawnObstacle() {
var typeIdx = Math.floor(Math.random() * OBSTACLE_TYPES.length);
var type = OBSTACLE_TYPES[typeIdx];
var obs;
if (type === 'cactus') {
obs = new Cactus();
obs.y = GROUND_Y;
} else if (type === 'rock') {
obs = new Rock();
obs.y = GROUND_Y;
} else if (type === 'bird') {
obs = new Bird();
var hIdx = Math.floor(Math.random() * BIRD_HEIGHTS.length);
obs.y = BIRD_HEIGHTS[hIdx];
obs.flyY = obs.y;
}
obs.x = 2048 + obs.width;
obs.speed = gameSpeed;
// Defensive: initialize lastX and lastY for event/collision best practices
obs.lastX = obs.x;
obs.lastY = obs.y;
obstacles.push(obs);
game.addChild(obs);
lastObstacleX = obs.x;
}
// Helper: reset game
function resetGame() {
// Remove obstacles
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
obstacles = [];
score = 0;
distance = 0;
gameSpeed = GAME_SPEED_START;
lastObstacleX = 0;
isGameOver = false;
dino.x = DINO_START_X;
dino.y = GROUND_Y;
dino.groundY = GROUND_Y;
dino.velocityY = 0;
dino.isJumping = false;
dino.isDucking = false;
dino.scaleY = 1;
dino.lastX = dino.x;
dino.lastY = dino.y;
scoreTxt.setText('0');
highScoreTxt.setText('En Yüksek: ' + highScore);
}
// Touch/press: jump or duck
var touchStartY = null;
var touchActive = false;
game.down = function (x, y, obj) {
if (isGameOver) return;
touchStartY = y;
touchActive = true;
};
game.move = function (x, y, obj) {
if (isGameOver) return;
if (!touchActive) return;
// If swipe up, jump
if (touchStartY !== null && y < touchStartY - 80) {
dino.jump();
touchActive = false;
}
// If swipe down, duck
if (touchStartY !== null && y > touchStartY + 80) {
dino.duck();
touchActive = false;
}
};
game.up = function (x, y, obj) {
if (isGameOver) return;
dino.stand();
touchStartY = null;
touchActive = false;
};
// Main update loop
game.update = function () {
if (isGameOver) return;
// Defensive: track dino's lastX and lastY for event/collision best practices
if (dino.lastX === undefined) dino.lastX = dino.x;
if (dino.lastY === undefined) dino.lastY = dino.y;
// Update dino
dino.update();
// Ground tiles remain static; no movement
for (var g = 0; g < groundTiles.length; g++) {
var tile = groundTiles[g];
tile.x = g * groundSize;
}
// Update obstacles
for (var i = obstacles.length - 1; i >= 0; i--) {
var obs = obstacles[i];
// Defensive: track lastX and lastY for event/collision best practices
if (obs.lastX === undefined) obs.lastX = obs.x;
if (obs.lastY === undefined) obs.lastY = obs.y;
obs.speed = gameSpeed;
obs.update();
// Bird: simple up-down movement
if (obs.type === 'bird') {
obs.y = obs.flyY + Math.sin(LK.ticks / 12 + i) * 18;
}
// Remove if off screen
if (obs.x < -obs.width) {
obs.destroy();
obstacles.splice(i, 1);
continue;
}
// Scoring: passed dino
if (!obs.passed && obs.x + obs.width / 2 < dino.x - dino.width / 2) {
obs.passed = true;
score += 1;
scoreTxt.setText('' + score);
}
// Collision
if (dino.intersects(obs)) {
// If ducking and bird, allow pass
if (obs.type === 'bird' && dino.isDucking && obs.y > dino.y - dino.height * 0.7) {
continue;
}
// Game over
isGameOver = true;
LK.effects.flashScreen(0xff0000, 800);
if (score > highScore) {
highScore = score;
storage.highScore = highScore;
}
LK.setTimeout(function () {
LK.showGameOver();
}, 900);
return;
}
}
// After all movement, update lastX and lastY for obstacles
for (var j = 0; j < obstacles.length; j++) {
obstacles[j].lastX = obstacles[j].x;
obstacles[j].lastY = obstacles[j].y;
}
// Update dino's lastX and lastY
dino.lastX = dino.x;
dino.lastY = dino.y;
// Increase game speed
if (gameSpeed < GAME_SPEED_MAX) {
gameSpeed += GAME_SPEED_INC * (1 + score * 0.04);
if (gameSpeed > GAME_SPEED_MAX) gameSpeed = GAME_SPEED_MAX;
}
// Distance for score
distance += gameSpeed;
// Spawn new obstacle
if (obstacles.length === 0 || 2048 - lastObstacleX > OBSTACLE_MIN_GAP + Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP)) {
spawnObstacle();
}
};
// Listen for game over to reset
LK.on('gameover', function () {
resetGame();
});
// Listen for you win (not used, but for completeness)
LK.on('youwin', function () {
resetGame();
});
3d pixar tarzı kanat çırpan kuş yandan. In-Game asset. 2d. High contrast. No shadows
3d pixar tarzı kirpi yandan bakış. In-Game asset. 2d. High contrast. No shadows
Oyun arka planı gökyüzü 3d pixar. In-Game asset. 2d. High contrast. No shadows
Garip bir oyun karakteri 3d pixar tarzı. In-Game asset. 2d. High contrast. No shadows