TinyChan

Topic: If anyone wants it, here is the source code for "pong" in HTML5.

+Lalotax !IVGhnqIAoQ5.3 years ago #56,910

<!DOCTYPE html>
<html>
<head>
<title>Basic Pong HTML Game</title>
<meta charset="UTF-8">
<style>
html, body {
height: 100%;
margin: 0;
}

body {
background: black;
display: flex;
align-items: center;
justify-content: center;
}
</style>
</head>
<body>
<canvas width="750" height="585" id="game"></canvas>
<script>
const canvas = document.getElementById('game');
const context = canvas.getContext('2d');
const grid = 15;
const paddleHeight = grid * 5; // 80
const maxPaddleY = canvas.height - grid - paddleHeight;

var paddleSpeed = 6;
var ballSpeed = 5;

const leftPaddle = {
// start in the middle of the game on the left side
x: grid * 2,
y: canvas.height / 2 - paddleHeight / 2,
width: grid,
height: paddleHeight,

// paddle velocity
dy: 0
};
const rightPaddle = {
// start in the middle of the game on the right side
x: canvas.width - grid * 3,
y: canvas.height / 2 - paddleHeight / 2,
width: grid,
height: paddleHeight,

// paddle velocity
dy: 0
};
const ball = {
// start in the middle of the game
x: canvas.width / 2,
y: canvas.height / 2,
width: grid,
height: grid,

// keep track of when need to reset the ball position
resetting: false,

// ball velocity (start going to the top-right corner)
dx: ballSpeed,
dy: -ballSpeed
};

// check for collision between two objects using axis-aligned bounding box (AABB)
// @see https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection
function collides(obj1, obj2) {
return obj1.x < obj2.x + obj2.width &&
obj1.x + obj1.width > obj2.x &&
obj1.y < obj2.y + obj2.height &&
obj1.y + obj1.height > obj2.y;
}

// game loop
function loop() {
requestAnimationFrame(loop);
context.clearRect(0,0,canvas.width,canvas.height);

// move paddles by their velocity
leftPaddle.y += leftPaddle.dy;
rightPaddle.y += rightPaddle.dy;

// prevent paddles from going through walls
if (leftPaddle.y < grid) {
leftPaddle.y = grid;
}
else if (leftPaddle.y > maxPaddleY) {
leftPaddle.y = maxPaddleY;
}

if (rightPaddle.y < grid) {
rightPaddle.y = grid;
}
else if (rightPaddle.y > maxPaddleY) {
rightPaddle.y = maxPaddleY;
}

// draw paddles
context.fillStyle = 'white';
context.fillRect(leftPaddle.x, leftPaddle.y, leftPaddle.width, leftPaddle.height);
context.fillRect(rightPaddle.x, rightPaddle.y, rightPaddle.width, rightPaddle.height);

// move ball by its velocity
ball.x += ball.dx;
ball.y += ball.dy;

// prevent ball from going through walls by changing its velocity
if (ball.y < grid) {
ball.y = grid;
ball.dy *= -1;
}
else if (ball.y + grid > canvas.height - grid) {
ball.y = canvas.height - grid * 2;
ball.dy *= -1;
}

// reset ball if it goes past paddle (but only if we haven't already done so)
if ( (ball.x < 0 || ball.x > canvas.width) && !ball.resetting) {
ball.resetting = true;

// give some time for the player to recover before launching the ball again
setTimeout(() => {
ball.resetting = false;
ball.x = canvas.width / 2;
ball.y = canvas.height / 2;
}, 400);
}

// check to see if ball collides with paddle. if they do change x velocity
if (collides(ball, leftPaddle)) {
ball.dx *= -1;

// move ball next to the paddle otherwise the collision will happen again
// in the next frame
ball.x = leftPaddle.x + leftPaddle.width;
}
else if (collides(ball, rightPaddle)) {
ball.dx *= -1;

// move ball next to the paddle otherwise the collision will happen again
// in the next frame
ball.x = rightPaddle.x - ball.width;
}

// draw ball
context.fillRect(ball.x, ball.y, ball.width, ball.height);

// draw walls
context.fillStyle = 'lightgrey';
context.fillRect(0, 0, canvas.width, grid);
context.fillRect(0, canvas.height - grid, canvas.width, canvas.height);

// draw dotted line down the middle
for (let i = grid; i < canvas.height - grid; i += grid * 2) {
context.fillRect(canvas.width / 2 - grid / 2, i, grid, grid);
}
}

// listen to keyboard events to move the paddles
document.addEventListener('keydown', function(e) {

// up arrow key
if (e.which === 38) {
rightPaddle.dy = -paddleSpeed;
}
// down arrow key
else if (e.which === 40) {
rightPaddle.dy = paddleSpeed;
}

// w key
if (e.which === 87) {
leftPaddle.dy = -paddleSpeed;
}
// a key
else if (e.which === 83) {
leftPaddle.dy = paddleSpeed;
}
});

// listen to keyboard events to stop the paddle if key is released
document.addEventListener('keyup', function(e) {
if (e.which

= 38 || e.which

= 40) {
rightPaddle.dy = 0;
}

if (e.which

= 83 || e.which

= 87) {
leftPaddle.dy = 0;
}
});

// start the game
requestAnimationFrame(loop);
</script>
</body>
</html>

(Edited 6 minutes later.)


+Anonymous B5.3 years ago, 45 minutes later[T] [B] #594,695

delete system 32

+Anonymous C5.3 years ago, 22 minutes later, 1 hour after the original post[T] [B] #594,696

youarefag = true

·Lalotax !IVGhnqIAoQ (OP) — 5.3 years ago, 23 minutes later, 1 hour after the original post[T] [B] #594,698

@594,695 (B)
Im using mac

·Lalotax !IVGhnqIAoQ (OP) — 5.3 years ago, 28 seconds later, 1 hour after the original post[T] [B] #594,699

@594,696 (C)
You didn't even declare what programming language you are using. Python? Javascript? HTML???

·Anonymous C5.3 years ago, 1 hour later, 3 hours after the original post[T] [B] #594,703

@previous (Lalotax !IVGhnqIAoQ)
> You didn't even declare what programming language you are using. Python? Javascript? HTML???

Kill yourself

·Anonymous C5.3 years ago, 6 minutes later, 3 hours after the original post[T] [B] #594,704

Shoot a bullet through your mouth

·Lalotax !IVGhnqIAoQ (OP) — 5.3 years ago, 7 hours later, 11 hours after the original post[T] [B] #594,711

@594,703 (C)

not a programming language dude

·Lalotax !IVGhnqIAoQ (OP) — 5.3 years ago, 13 seconds later, 11 hours after the original post[T] [B] #594,712

@594,704 (C)
no

·Anonymous C5.3 years ago, 4 hours later, 15 hours after the original post[T] [B] #594,731

@594,711 (Lalotax !IVGhnqIAoQ)
> not a programming language dude

die

·Lalotax !IVGhnqIAoQ (OP) — 5.3 years ago, 26 minutes later, 15 hours after the original post[T] [B] #594,732

@previous (C)

I take it you cant program?

+Syntax5.3 years ago, 6 minutes later, 15 hours after the original post[T] [B] #594,733

didn_t read.gif@OP

·Lalotax !IVGhnqIAoQ (OP) — 5.3 years ago, 3 minutes later, 15 hours after the original post[T] [B] #594,734

@previous (Syntax)

HOP IN
WERE GOING TO FIND OUT WHO ASKED

+Syntax5.3 years ago, 3 minutes later, 15 hours after the original post[T] [B] #594,735

Clones daz studio perspective origi.png@594,733 (Syntax)

·Anonymous C5.3 years ago, 19 hours later, 1 day after the original post[T] [B] #594,789

@594,732 (Lalotax !IVGhnqIAoQ)
> I take it you cant program?
Shoot yourself

·Lalotax !IVGhnqIAoQ (OP) — 5.3 years ago, 6 minutes later, 1 day after the original post[T] [B] #594,790

@previous (C)

oh so you're an idiot thats desperately trying to act smarter than me, huh.

Start a new topic to continue this conversation.
Or browse the latest topics.

:

You are required to fill in a captcha for your first 5 posts. Sorry, but this is required to stop people from posting while drunk. Please be responsible and don't drink and post!
If you receive this often, consider not clearing your cookies.



Please familiarise yourself with the rules and markup syntax before posting.