File size: 2,915 Bytes
a3b97ad
 
 
 
 
5994a14
 
 
 
 
 
a3b97ad
 
5994a14
 
 
 
 
 
 
 
 
 
fc7647d
5994a14
 
 
 
 
 
a3b97ad
 
 
 
 
 
 
5994a14
a3b97ad
 
 
fc7647d
5994a14
 
fc7647d
5994a14
 
a3b97ad
 
5994a14
fc7647d
5994a14
fc7647d
 
5994a14
 
a3b97ad
 
 
5994a14
 
a3b97ad
 
 
fc7647d
 
 
 
 
 
 
 
 
 
 
 
 
5994a14
a3b97ad
 
 
 
 
 
 
 
 
5994a14
 
 
a3b97ad
 
5994a14
a3b97ad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const gameArea = document.getElementById('gameArea');
const paddleLeft = document.getElementById('paddleLeft');
const paddleRight = document.getElementById('paddleRight');
const ball = document.getElementById('ball');

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

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;
    }
});

function update() {
    // 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 || ballX >= window.innerWidth) {
        resetBall();
    }

    // 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() {
    ballX = window.innerWidth / 2;
    ballY = window.innerHeight / 2;
    ballSpeedX = -ballSpeedX; // Reverse direction
}

// Start the game loop
update();