/**** 
* Classes
****/ 
// Assets will be automatically created based on usage in the code.
// Ball class
var Ball = Container.expand(function () {
	var self = Container.call(this);
	var ballGraphics = self.attachAsset('ball', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speedX = 0;
	self.speedY = 0;
	self.isMoving = false;
	self.launch = function (speedX, speedY) {
		self.speedX = speedX;
		self.speedY = speedY;
		self.isMoving = true;
	};
	self.bounceCount = 0; // Initialize bounce counter
	self.update = function () {
		if (self.isMoving) {
			self.x += self.speedX;
			self.y += self.speedY;
			self.speedY += 0.98; // Gravity effect
			// Change the direction of the ball's rotation based on its direction
			if (self.speedX > 0) {
				ballGraphics.rotation += 0.1;
			} else if (self.speedX < 0) {
				ballGraphics.rotation -= 0.1;
			}
			if (self.bounceCount >= 3) {
				// Change the basket's color to green
				basket.attachAsset('basket2', {
					anchorX: 0.5,
					anchorY: 0.5
				});
			}
		}
	};
	self.reset = function () {
		self.x = 400; // Center horizontally
		self.y = 1800; // Start position near bottom
		self.speedX = 0;
		self.speedY = 0;
		self.isMoving = false;
		self.bounceCount = 0; // Reset the bounce counter
		// Change the basket's color back to red
		basket.attachAsset('basket', {
			anchorX: 0.5,
			anchorY: 0.5
		});
	};
});
// Basket class
var Basket = Container.expand(function () {
	var self = Container.call(this);
	var basketGraphics = self.attachAsset('basket', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Player class
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('Player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB // Light blue background
});
/**** 
* Game Code
****/ 
var background = game.addChild(LK.getAsset('Background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 / 2
}));
// Add a swipe image to the center of the screen
var swipe = game.addChild(LK.getAsset('swipe', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 - 1020
}));
var player = game.addChild(new Player());
player.x = player.width / 2; // Position on the left side of the screen
player.y = 2732 - player.height / 2; // Position at the bottom of the screen
var ball = game.addChild(new Ball());
ball.x = 400;
ball.y = 1800;
var baskets = [];
var basket = game.addChild(new Basket());
basket.x = Math.random() * (1800 - 300) + 300; // Random x-coordinate between 300 and 2000
basket.y = Math.random() * (1500 - 500) + 500; // Random y-coordinate between 500 and 1500
baskets.push(basket);
var lastTouchPosition = {
	x: 0,
	y: 0
};
// Initialize countdown timer text
var countdownTimerTxt = new Text2('20', {
	size: 75,
	fill: "#000000"
});
countdownTimerTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(countdownTimerTxt);
countdownTimerTxt.x -= 20;
var countdownTimer = 20;
var countdownInterval = null;
game.on('down', function (obj) {
	var pos = obj.event.getLocalPosition(game);
	lastTouchPosition.x = pos.x;
	lastTouchPosition.y = pos.y;
	// Start countdown timer after game starts
	if (!countdownInterval) {
		countdownInterval = LK.setInterval(function () {
			countdownTimer--;
			countdownTimerTxt.setText(countdownTimer);
			if (countdownTimer <= 0) {
				LK.clearInterval(countdownInterval);
				// Create a text object to display the number of goals scored
				var goalsScoredTxt = new Text2(LK.getScore(), {
					size: 150,
					fill: "#ffffff"
				});
				goalsScoredTxt.anchor.set(0.5, 0);
				// Position the text at the top left of the screen
				goalsScoredTxt.x = 80;
				goalsScoredTxt.y = 80;
				// Add the text to the GUI overlay
				LK.gui.topLeft.addChild(goalsScoredTxt);
				LK.showGameOver();
				// Reset countdown timer when game is over
				countdownTimer = 0;
				countdownTimerTxt.setText(countdownTimer);
				LK.clearInterval(countdownInterval);
				countdownInterval = null;
			}
		}, 1000);
	}
});
game.on('up', function (obj) {
	if (!ball.isMoving) {
		var pos = obj.event.getLocalPosition(game);
		var speedX = (pos.x - lastTouchPosition.x) / 10;
		var speedY = (pos.y - lastTouchPosition.y) / 10;
		ball.launch(speedX, speedY);
	}
});
var ballStoppedTimer = null;
LK.on('tick', function () {
	ball.update();
	// Check for collisions with baskets
	if (Math.sqrt(Math.pow(ball.x - basket.x, 2) + Math.pow(ball.y - basket.y, 2)) <= ball.width / 2 + basket.width / 2) {
		if (ball.bounceCount >= 3) {
			LK.effects.flashScreen(0x00FF00, 500); // Flash green for success
			// Reset the ball to its initial position
			ball.reset();
			// Change the basket's color back to red
			basket.attachAsset('basket', {
				anchorX: 0.5,
				anchorY: 0.5
			});
			// Reset the countdown timer
			countdownTimer = 20;
			countdownTimerTxt.setText(countdownTimer);
			// Move the basket to a random location at the top of the screen
			basket.x = Math.random() * (1800 - 300) + 300; // Random x-coordinate between 300 and 2000
			basket.y = Math.random() * (1500 - 500) + 500; // Random y-coordinate between 500 and 1500
			ball.bounceCount = 0; // Reset the bounce counter
			// Increment the number of goals scored
			LK.setScore(LK.getScore() + 1);
		}
	}
	// Bounce off the walls and ceiling
	if (ball.x < 100 && ball.bounceCount < 20) {
		ball.x = 100; // Move the ball out of the wall
		ball.speedX *= -0.8; // Decrease speed by 10% after bouncing
		ball.speedX *= 0.75; // Decrease the next bounce by 20%
		ball.bounceCount++; // Increment bounce counter
	}
	if (ball.x > 2000 && ball.bounceCount < 20) {
		ball.x = 2000; // Move the ball out of the wall
		ball.speedX *= -0.8; // Decrease speed by 10% after bouncing
		ball.speedX *= 0.75; // Decrease the next bounce by 20%
		ball.bounceCount++; // Increment bounce counter
	}
	if (ball.y < 100 && ball.bounceCount < 20) {
		ball.y = 100; // Move the ball out of the ceiling
		ball.speedY *= -0.8; // Decrease speed by 10% after bouncing
		ball.speedY *= 0.75; // Decrease the next bounce by 20%
		ball.bounceCount++; // Increment bounce counter
	}
	if (ball.y > 2632) {
		if (ball.bounceCount < 20) {
			ball.y = 2632; // Move the ball out of the floor
			ball.speedY *= -0.8; // Decrease speed by 10% after bouncing
			ball.speedY *= 0.75; // Decrease the next bounce by 20%
			ball.bounceCount++; // Increment bounce counter
		} else {
			// Change the basket's color back to red before the ball resets
			basket.attachAsset('basket', {
				anchorX: 0.5,
				anchorY: 0.5
			});
			ball.reset(); // Reset the ball to its initial position after 20 bounces
		}
	}
	// Check if the ball has stopped moving and if it has been launched
	if (ball.speedX === 0 && ball.speedY === 0 && ball.isMoving) {
		// Start a timer if it's not already started
		if (!ballStoppedTimer) {
			ballStoppedTimer = LK.setTimeout(function () {
				// Reset the ball to its initial position if it has been stopped for 1 second
				ball.reset();
			}, 1000);
		}
	} else {
		// Clear the timer if the ball starts moving again
		if (ballStoppedTimer) {
			LK.clearTimeout(ballStoppedTimer);
			ballStoppedTimer = null;
		}
	}
}); /**** 
* Classes
****/ 
// Assets will be automatically created based on usage in the code.
// Ball class
var Ball = Container.expand(function () {
	var self = Container.call(this);
	var ballGraphics = self.attachAsset('ball', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speedX = 0;
	self.speedY = 0;
	self.isMoving = false;
	self.launch = function (speedX, speedY) {
		self.speedX = speedX;
		self.speedY = speedY;
		self.isMoving = true;
	};
	self.bounceCount = 0; // Initialize bounce counter
	self.update = function () {
		if (self.isMoving) {
			self.x += self.speedX;
			self.y += self.speedY;
			self.speedY += 0.98; // Gravity effect
			// Change the direction of the ball's rotation based on its direction
			if (self.speedX > 0) {
				ballGraphics.rotation += 0.1;
			} else if (self.speedX < 0) {
				ballGraphics.rotation -= 0.1;
			}
			if (self.bounceCount >= 3) {
				// Change the basket's color to green
				basket.attachAsset('basket2', {
					anchorX: 0.5,
					anchorY: 0.5
				});
			}
		}
	};
	self.reset = function () {
		self.x = 400; // Center horizontally
		self.y = 1800; // Start position near bottom
		self.speedX = 0;
		self.speedY = 0;
		self.isMoving = false;
		self.bounceCount = 0; // Reset the bounce counter
		// Change the basket's color back to red
		basket.attachAsset('basket', {
			anchorX: 0.5,
			anchorY: 0.5
		});
	};
});
// Basket class
var Basket = Container.expand(function () {
	var self = Container.call(this);
	var basketGraphics = self.attachAsset('basket', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Player class
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('Player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB // Light blue background
});
/**** 
* Game Code
****/ 
var background = game.addChild(LK.getAsset('Background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 / 2
}));
// Add a swipe image to the center of the screen
var swipe = game.addChild(LK.getAsset('swipe', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 - 1020
}));
var player = game.addChild(new Player());
player.x = player.width / 2; // Position on the left side of the screen
player.y = 2732 - player.height / 2; // Position at the bottom of the screen
var ball = game.addChild(new Ball());
ball.x = 400;
ball.y = 1800;
var baskets = [];
var basket = game.addChild(new Basket());
basket.x = Math.random() * (1800 - 300) + 300; // Random x-coordinate between 300 and 2000
basket.y = Math.random() * (1500 - 500) + 500; // Random y-coordinate between 500 and 1500
baskets.push(basket);
var lastTouchPosition = {
	x: 0,
	y: 0
};
// Initialize countdown timer text
var countdownTimerTxt = new Text2('20', {
	size: 75,
	fill: "#000000"
});
countdownTimerTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(countdownTimerTxt);
countdownTimerTxt.x -= 20;
var countdownTimer = 20;
var countdownInterval = null;
game.on('down', function (obj) {
	var pos = obj.event.getLocalPosition(game);
	lastTouchPosition.x = pos.x;
	lastTouchPosition.y = pos.y;
	// Start countdown timer after game starts
	if (!countdownInterval) {
		countdownInterval = LK.setInterval(function () {
			countdownTimer--;
			countdownTimerTxt.setText(countdownTimer);
			if (countdownTimer <= 0) {
				LK.clearInterval(countdownInterval);
				// Create a text object to display the number of goals scored
				var goalsScoredTxt = new Text2(LK.getScore(), {
					size: 150,
					fill: "#ffffff"
				});
				goalsScoredTxt.anchor.set(0.5, 0);
				// Position the text at the top left of the screen
				goalsScoredTxt.x = 80;
				goalsScoredTxt.y = 80;
				// Add the text to the GUI overlay
				LK.gui.topLeft.addChild(goalsScoredTxt);
				LK.showGameOver();
				// Reset countdown timer when game is over
				countdownTimer = 0;
				countdownTimerTxt.setText(countdownTimer);
				LK.clearInterval(countdownInterval);
				countdownInterval = null;
			}
		}, 1000);
	}
});
game.on('up', function (obj) {
	if (!ball.isMoving) {
		var pos = obj.event.getLocalPosition(game);
		var speedX = (pos.x - lastTouchPosition.x) / 10;
		var speedY = (pos.y - lastTouchPosition.y) / 10;
		ball.launch(speedX, speedY);
	}
});
var ballStoppedTimer = null;
LK.on('tick', function () {
	ball.update();
	// Check for collisions with baskets
	if (Math.sqrt(Math.pow(ball.x - basket.x, 2) + Math.pow(ball.y - basket.y, 2)) <= ball.width / 2 + basket.width / 2) {
		if (ball.bounceCount >= 3) {
			LK.effects.flashScreen(0x00FF00, 500); // Flash green for success
			// Reset the ball to its initial position
			ball.reset();
			// Change the basket's color back to red
			basket.attachAsset('basket', {
				anchorX: 0.5,
				anchorY: 0.5
			});
			// Reset the countdown timer
			countdownTimer = 20;
			countdownTimerTxt.setText(countdownTimer);
			// Move the basket to a random location at the top of the screen
			basket.x = Math.random() * (1800 - 300) + 300; // Random x-coordinate between 300 and 2000
			basket.y = Math.random() * (1500 - 500) + 500; // Random y-coordinate between 500 and 1500
			ball.bounceCount = 0; // Reset the bounce counter
			// Increment the number of goals scored
			LK.setScore(LK.getScore() + 1);
		}
	}
	// Bounce off the walls and ceiling
	if (ball.x < 100 && ball.bounceCount < 20) {
		ball.x = 100; // Move the ball out of the wall
		ball.speedX *= -0.8; // Decrease speed by 10% after bouncing
		ball.speedX *= 0.75; // Decrease the next bounce by 20%
		ball.bounceCount++; // Increment bounce counter
	}
	if (ball.x > 2000 && ball.bounceCount < 20) {
		ball.x = 2000; // Move the ball out of the wall
		ball.speedX *= -0.8; // Decrease speed by 10% after bouncing
		ball.speedX *= 0.75; // Decrease the next bounce by 20%
		ball.bounceCount++; // Increment bounce counter
	}
	if (ball.y < 100 && ball.bounceCount < 20) {
		ball.y = 100; // Move the ball out of the ceiling
		ball.speedY *= -0.8; // Decrease speed by 10% after bouncing
		ball.speedY *= 0.75; // Decrease the next bounce by 20%
		ball.bounceCount++; // Increment bounce counter
	}
	if (ball.y > 2632) {
		if (ball.bounceCount < 20) {
			ball.y = 2632; // Move the ball out of the floor
			ball.speedY *= -0.8; // Decrease speed by 10% after bouncing
			ball.speedY *= 0.75; // Decrease the next bounce by 20%
			ball.bounceCount++; // Increment bounce counter
		} else {
			// Change the basket's color back to red before the ball resets
			basket.attachAsset('basket', {
				anchorX: 0.5,
				anchorY: 0.5
			});
			ball.reset(); // Reset the ball to its initial position after 20 bounces
		}
	}
	// Check if the ball has stopped moving and if it has been launched
	if (ball.speedX === 0 && ball.speedY === 0 && ball.isMoving) {
		// Start a timer if it's not already started
		if (!ballStoppedTimer) {
			ballStoppedTimer = LK.setTimeout(function () {
				// Reset the ball to its initial position if it has been stopped for 1 second
				ball.reset();
			}, 1000);
		}
	} else {
		// Clear the timer if the ball starts moving again
		if (ballStoppedTimer) {
			LK.clearTimeout(ballStoppedTimer);
			ballStoppedTimer = null;
		}
	}
});
:quality(85)/https://cdn.frvr.ai/65f6cb1dcc69a147e42160e2.png%3F3) 
 Basket. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65f6ce03cc69a147e4216147.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65f6d3b1cc69a147e42161a8.png%3F3) 
 Стена белая синия. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65f84fbf83c3441be0547568.png%3F3) 
 граффити слово Swipe. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65f9512583c3441be05475fa.png%3F3) 
 Граффити с текстом "after three bounces of the ball, a goal is scored". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65fa0720f4b57e9c6fc39fb2.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65fa0751f4b57e9c6fc39fb6.png%3F3)