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