gameloop = {
let {r, x, y, dx, dy} = mutable ball;
while (!mutable gameover) {
x += dx, y += dy;
if (x < r + scale) dx = Math.abs(dx);
if (x + r > w - scale) dx = -Math.abs(dx);
if (y < r + scale) dy = speed;
let px = mutable paddleX;
if (y + r > h - scale && x + r > px && x - r < px + paddleLength) {
dy = -speed;
dx = ((x - px) / paddleLength - 0.5) * Math.PI * speed;
}
eachBrick(bricks, (brick, row, col) => {
let hit;
if (!(hit = collide(mutable ball, brick))) return;
bricks[row][col] = null;
mutable score += brick.points;
hit == "v" ? dy = -dy : dx = -dx;
return true;
});
mutable ball = {r, x, y, dx, dy};
if (y + r > h) mutable gameover = true;
yield true;
}
}