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