/**** * Classes ****/ // Coin class: collectible coin between columns var Coin = Container.expand(function () { var self = Container.call(this); var coinAsset = self.attachAsset('gapBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5, alpha: 1 }); coinAsset.tint = 0xFFD700; // gold color self.speed = 7; self.collected = false; self.update = function () { self.lastX = self.x; self.x -= self.speed; }; return self; }); // Gap class: invisible area between pipes for scoring var Gap = Container.expand(function () { var self = Container.call(this); var gapAsset = self.attachAsset('gapBox', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // invisible }); self.speed = 7; self.passed = false; self.update = function () { self.lastX = self.x; self.x -= self.speed; }; return self; }); // Obstacle class: a single vertical pipe (top or bottom) var Obstacle = Container.expand(function () { var self = Container.call(this); var obstacleAsset = self.attachAsset('obstacleRect', { anchorX: 0.5, anchorY: 0.0 }); self.speed = 7; self.passed = false; self.update = function () { self.lastX = self.x; self.x -= self.speed; }; return self; }); // Player class: the flappy square var Player = Container.expand(function () { var self = Container.call(this); var playerAsset = self.attachAsset('playerSquare', { anchorX: 0.5, anchorY: 0.5 }); self.gravity = 1.4; self.jumpStrength = -32; self.velocityY = 0; self.alive = true; self.update = function () { if (!self.alive) return; self.lastY = self.y; self.velocityY += self.gravity; self.y += self.velocityY; }; self.jump = function () { if (!self.alive) return; self.velocityY = self.jumpStrength; }; self.die = function () { self.alive = false; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ ; // --- Add Background Image --- var background = LK.getAsset('backgroundImage', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(background); // --- Flappy Square Game Variables --- var player; var obstacles = []; var gaps = []; var score = 0; var scoreTxt; var gameStarted = false; var spawnInterval = 120; // frames between pipes var ticksSinceLastSpawn = 0; var gapHeight = 700; var pipeWidth = 180; // match obstacleRect width for tall columns var minPipeHeight = 300; var maxPipeHeight = 1800; // --- Initialize Player and Score --- function resetGame() { // Remove old obstacles and gaps for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } for (var j = 0; j < gaps.length; j++) { gaps[j].destroy(); } obstacles = []; gaps = []; // Remove old coins if (window.coins) { for (var i = 0; i < window.coins.length; i++) { window.coins[i].destroy(); } window.coins = []; } // Remove old player if exists if (player) player.destroy(); // Create player player = new Player(); player.x = 600; player.y = 1366; game.addChild(player); // Reset score score = 0; if (!scoreTxt) { scoreTxt = new Text2('0', { size: 180, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); } scoreTxt.setText(score); // Reset state gameStarted = false; ticksSinceLastSpawn = 0; } resetGame(); // --- Tap to Jump --- game.down = function (x, y, obj) { if (!gameStarted) { gameStarted = true; player.velocityY = 0; } if (player.alive) { player.jump(); } }; // --- Main Game Loop --- game.update = function () { if (!player.alive) return; // Only scroll and spawn pipes after first tap if (gameStarted) { // Update player player.update(); // Spawn obstacles and gaps ticksSinceLastSpawn++; if (ticksSinceLastSpawn >= spawnInterval) { ticksSinceLastSpawn = 0; // Randomize gap position var gapY = minPipeHeight + Math.floor(Math.random() * (maxPipeHeight - minPipeHeight - gapHeight)); // Top pipe var topPipe = new Obstacle(); topPipe.x = 2200; topPipe.y = 0; // Use tall obstacle asset, position so bottom aligns with gap topPipe.height = gapY; topPipe.scaleY = gapY / 1600; game.addChild(topPipe); obstacles.push(topPipe); // Bottom pipe var bottomPipe = new Obstacle(); bottomPipe.x = 2200; bottomPipe.y = gapY + gapHeight; // Use tall obstacle asset, position so top aligns with gap bottomPipe.height = 2732 - (gapY + gapHeight); bottomPipe.scaleY = bottomPipe.height / 1600; game.addChild(bottomPipe); obstacles.push(bottomPipe); // Gap var gap = new Gap(); gap.x = 2200; gap.y = gapY + gapHeight / 2; gap.width = pipeWidth; gap.height = gapHeight; game.addChild(gap); gaps.push(gap); // Coin (place in the center of the gap) var coin = new Coin(); coin.x = 2200; coin.y = gapY + gapHeight / 2; game.addChild(coin); if (!window.coins) window.coins = []; window.coins.push(coin); } // Update obstacles and gaps for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.update(); // Remove if off screen if (obs.x < -300) { obs.destroy(); obstacles.splice(i, 1); } // Collision if (player.intersects(obs)) { player.die(); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } for (var j = gaps.length - 1; j >= 0; j--) { var gap = gaps[j]; gap.update(); // Remove if off screen if (gap.x < -300) { gap.destroy(); gaps.splice(j, 1); } // Score if (!gap.passed && player.x > gap.x) { gap.passed = true; score++; scoreTxt.setText(score); } } // Coin update and collection if (!window.coins) window.coins = []; for (var c = window.coins.length - 1; c >= 0; c--) { var coin = window.coins[c]; coin.update(); // Remove if off screen if (coin.x < -300) { coin.destroy(); window.coins.splice(c, 1); continue; } // Collect coin if (!coin.collected && player.intersects(coin)) { coin.collected = true; coin.destroy(); window.coins.splice(c, 1); score++; scoreTxt.setText(score); LK.getSound('s').play(); // Optionally: LK.effects.flashObject(player, 0xFFD700, 300); } } // Check ground/ceiling collision if (player.y > 2732 - 100 || player.y < 0) { player.die(); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } }; // --- Reset on Game Over --- LK.on('gameover', function () { resetGame(); });
/****
* Classes
****/
// Coin class: collectible coin between columns
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinAsset = self.attachAsset('gapBox', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.5,
scaleY: 0.5,
alpha: 1
});
coinAsset.tint = 0xFFD700; // gold color
self.speed = 7;
self.collected = false;
self.update = function () {
self.lastX = self.x;
self.x -= self.speed;
};
return self;
});
// Gap class: invisible area between pipes for scoring
var Gap = Container.expand(function () {
var self = Container.call(this);
var gapAsset = self.attachAsset('gapBox', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0 // invisible
});
self.speed = 7;
self.passed = false;
self.update = function () {
self.lastX = self.x;
self.x -= self.speed;
};
return self;
});
// Obstacle class: a single vertical pipe (top or bottom)
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleAsset = self.attachAsset('obstacleRect', {
anchorX: 0.5,
anchorY: 0.0
});
self.speed = 7;
self.passed = false;
self.update = function () {
self.lastX = self.x;
self.x -= self.speed;
};
return self;
});
// Player class: the flappy square
var Player = Container.expand(function () {
var self = Container.call(this);
var playerAsset = self.attachAsset('playerSquare', {
anchorX: 0.5,
anchorY: 0.5
});
self.gravity = 1.4;
self.jumpStrength = -32;
self.velocityY = 0;
self.alive = true;
self.update = function () {
if (!self.alive) return;
self.lastY = self.y;
self.velocityY += self.gravity;
self.y += self.velocityY;
};
self.jump = function () {
if (!self.alive) return;
self.velocityY = self.jumpStrength;
};
self.die = function () {
self.alive = false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
;
// --- Add Background Image ---
var background = LK.getAsset('backgroundImage', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChild(background);
// --- Flappy Square Game Variables ---
var player;
var obstacles = [];
var gaps = [];
var score = 0;
var scoreTxt;
var gameStarted = false;
var spawnInterval = 120; // frames between pipes
var ticksSinceLastSpawn = 0;
var gapHeight = 700;
var pipeWidth = 180; // match obstacleRect width for tall columns
var minPipeHeight = 300;
var maxPipeHeight = 1800;
// --- Initialize Player and Score ---
function resetGame() {
// Remove old obstacles and gaps
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
for (var j = 0; j < gaps.length; j++) {
gaps[j].destroy();
}
obstacles = [];
gaps = [];
// Remove old coins
if (window.coins) {
for (var i = 0; i < window.coins.length; i++) {
window.coins[i].destroy();
}
window.coins = [];
}
// Remove old player if exists
if (player) player.destroy();
// Create player
player = new Player();
player.x = 600;
player.y = 1366;
game.addChild(player);
// Reset score
score = 0;
if (!scoreTxt) {
scoreTxt = new Text2('0', {
size: 180,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
}
scoreTxt.setText(score);
// Reset state
gameStarted = false;
ticksSinceLastSpawn = 0;
}
resetGame();
// --- Tap to Jump ---
game.down = function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
player.velocityY = 0;
}
if (player.alive) {
player.jump();
}
};
// --- Main Game Loop ---
game.update = function () {
if (!player.alive) return;
// Only scroll and spawn pipes after first tap
if (gameStarted) {
// Update player
player.update();
// Spawn obstacles and gaps
ticksSinceLastSpawn++;
if (ticksSinceLastSpawn >= spawnInterval) {
ticksSinceLastSpawn = 0;
// Randomize gap position
var gapY = minPipeHeight + Math.floor(Math.random() * (maxPipeHeight - minPipeHeight - gapHeight));
// Top pipe
var topPipe = new Obstacle();
topPipe.x = 2200;
topPipe.y = 0;
// Use tall obstacle asset, position so bottom aligns with gap
topPipe.height = gapY;
topPipe.scaleY = gapY / 1600;
game.addChild(topPipe);
obstacles.push(topPipe);
// Bottom pipe
var bottomPipe = new Obstacle();
bottomPipe.x = 2200;
bottomPipe.y = gapY + gapHeight;
// Use tall obstacle asset, position so top aligns with gap
bottomPipe.height = 2732 - (gapY + gapHeight);
bottomPipe.scaleY = bottomPipe.height / 1600;
game.addChild(bottomPipe);
obstacles.push(bottomPipe);
// Gap
var gap = new Gap();
gap.x = 2200;
gap.y = gapY + gapHeight / 2;
gap.width = pipeWidth;
gap.height = gapHeight;
game.addChild(gap);
gaps.push(gap);
// Coin (place in the center of the gap)
var coin = new Coin();
coin.x = 2200;
coin.y = gapY + gapHeight / 2;
game.addChild(coin);
if (!window.coins) window.coins = [];
window.coins.push(coin);
}
// Update obstacles and gaps
for (var i = obstacles.length - 1; i >= 0; i--) {
var obs = obstacles[i];
obs.update();
// Remove if off screen
if (obs.x < -300) {
obs.destroy();
obstacles.splice(i, 1);
}
// Collision
if (player.intersects(obs)) {
player.die();
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
for (var j = gaps.length - 1; j >= 0; j--) {
var gap = gaps[j];
gap.update();
// Remove if off screen
if (gap.x < -300) {
gap.destroy();
gaps.splice(j, 1);
}
// Score
if (!gap.passed && player.x > gap.x) {
gap.passed = true;
score++;
scoreTxt.setText(score);
}
}
// Coin update and collection
if (!window.coins) window.coins = [];
for (var c = window.coins.length - 1; c >= 0; c--) {
var coin = window.coins[c];
coin.update();
// Remove if off screen
if (coin.x < -300) {
coin.destroy();
window.coins.splice(c, 1);
continue;
}
// Collect coin
if (!coin.collected && player.intersects(coin)) {
coin.collected = true;
coin.destroy();
window.coins.splice(c, 1);
score++;
scoreTxt.setText(score);
LK.getSound('s').play();
// Optionally: LK.effects.flashObject(player, 0xFFD700, 300);
}
}
// Check ground/ceiling collision
if (player.y > 2732 - 100 || player.y < 0) {
player.die();
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
};
// --- Reset on Game Over ---
LK.on('gameover', function () {
resetGame();
});
bana dimdik tovalet fırçası tasarla. In-Game asset. 2d. High contrast. No shadows
bok . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
arka plan oluştur tovalet olsun. In-Game asset. 2d. High contrast. No shadows
man. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat