const gameArea = document.getElementById('gameArea'); const paddleLeft = document.getElementById('paddleLeft'); const paddleRight = document.getElementById('paddleRight'); const ball = document.getElementById('ball'); const playerScoreDisplay = document.getElementById('playerScore'); const botScoreDisplay = document.getElementById('botScore'); let paddleLeftY = window.innerHeight / 2 - 40; // Center the paddle let paddleRightY = window.innerHeight / 2 - 40; // Center the paddle let ballX = window.innerWidth / 2; // Center the ball let ballY = window.innerHeight / 2; // Center the ball let ballSpeedX = 3; // Horizontal speed let ballSpeedY = 3; // Vertical speed let playerScore = 0; let botScore = 0; let isGamePaused = true; // Pause the game until the player moves const paddleHeight = 80; const paddleWidth = 10; const ballSize = 15; // Touch controls let touchY = 0; gameArea.addEventListener('touchmove', (e) => { e.preventDefault(); touchY = e.touches[0].clientY; // Move left paddle based on touch position if (e.touches[0].clientX < window.innerWidth / 2) { paddleLeftY = touchY - paddleHeight / 2; if (paddleLeftY < 0) paddleLeftY = 0; if (paddleLeftY > window.innerHeight - paddleHeight) paddleLeftY = window.innerHeight - paddleHeight; // Start the game if it's paused if (isGamePaused) { isGamePaused = false; } } }); function update() { if (!isGamePaused) { // Update ball position ballX += ballSpeedX; ballY += ballSpeedY; // Ball collision with top and bottom walls if (ballY <= 0 || ballY >= window.innerHeight - ballSize) { ballSpeedY = -ballSpeedY; } // Ball collision with left paddle if ( ballX <= paddleWidth + 10 && // Left paddle ballY + ballSize >= paddleLeftY && ballY <= paddleLeftY + paddleHeight ) { ballSpeedX = -ballSpeedX; } // Ball collision with right paddle if ( ballX >= window.innerWidth - paddleWidth - 25 && // Right paddle ballY + ballSize >= paddleRightY && ballY <= paddleRightY + paddleHeight ) { ballSpeedX = -ballSpeedX; } // Ball out of bounds (left or right) if (ballX <= 0) { botScore++; botScoreDisplay.textContent = botScore; resetBall('right'); } else if (ballX >= window.innerWidth) { playerScore++; playerScoreDisplay.textContent = playerScore; resetBall('left'); } } // Bot logic for right paddle if (ballSpeedX > 0) { // Ball is moving towards the right paddle if (paddleRightY + paddleHeight / 2 < ballY) { paddleRightY += 3; // Move paddle down } else if (paddleRightY + paddleHeight / 2 > ballY) { paddleRightY -= 3; // Move paddle up } } // Ensure the right paddle stays within bounds if (paddleRightY < 0) paddleRightY = 0; if (paddleRightY > window.innerHeight - paddleHeight) paddleRightY = window.innerHeight - paddleHeight; // Update ball and paddle positions ball.style.left = ballX + 'px'; ball.style.top = ballY + 'px'; paddleLeft.style.top = paddleLeftY + 'px'; paddleRight.style.top = paddleRightY + 'px'; requestAnimationFrame(update); } function resetBall(side) { isGamePaused = true; // Pause the game if (side === 'left') { ballX = paddleWidth + 10; // Place ball on the left paddle ballY = paddleLeftY + paddleHeight / 2; ballSpeedX = Math.abs(ballSpeedX); // Move ball to the right } else if (side === 'right') { ballX = window.innerWidth - paddleWidth - 25; // Place ball on the right paddle ballY = paddleRightY + paddleHeight / 2; ballSpeedX = -Math.abs(ballSpeedX); // Move ball to the left } ballSpeedY = (Math.random() - 0.5) * 6; // Randomize vertical speed } // Start the game loop update();