/**** * 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;
}
}
});
Basket. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Стена белая синия. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
граффити слово Swipe. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Граффити с текстом "after three bounces of the ball, a goal is scored". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.