<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Test Canvas Game</title> <style> body { margin: 0; padding: 0; } </style> </head> <body> <canvas id="gc"> </canvas> <script> //setup c = document.getElementById("gc"); cc = c.getContext('2d'); c.height = window.innerHeight; c.width = window.innerWidth; c.addEventListener('mousemove', function(e) { p1y = e.clientY - ph / 2; }); lastTime = Date.now(); deltaTime = 0; fps = 0; //gameplay variables p1y = p2y = 40; pt = 10; ph = 100; bx = by = xv = yv = 500;//just making sure bx and by exist, they'll be reset when the game first starts bd = 12; score1 = score2 = 0; ais = 5; function reset() { bx = c.width / 2; by = c.height / 2; xv = -xv; yv = 4; } function update() { //measure timing now = Date.now(); deltaTime = (now-lastTime)/1000; lastTime = now; fps = 1/deltaTime; //move ball bx += xv * deltaTime; by += yv * deltaTime; if (by < 0 && yv < 0) { yv = -yv; } if (by > c.height && yv > 0) { yv = -yv; } //check collision with sides for scoring if (bx > c.width) { if (by > p2y && by < p2y + ph) { xv = -xv; dy = by - (p2y + ph / 2); yv = dy * 10; } else { score1++; reset(); } } if (bx < 0) { if (by > p1y && by < p1y + ph) { xv = -xv; dy = by - (p1y + ph / 2); yv = dy * 10;//.3 } else { score2++ reset(); } } //ai if (p2y + ph / 2 < by) { p2y += ais; } else { p2y -= ais; } //draw background var gradient=cc.createLinearGradient(0,0,c.width,c.height); gradient.addColorStop("0","#ff146e"); gradient.addColorStop("1","#145aff"); cc.fillStyle=gradient; // cc.fillStyle="white"; cc.fillRect(0, 0, c.width, c.height); //draw paddles cc.fillStyle = 'cyan'; cc.fillRect(0, p1y, pt, ph); cc.fillStyle = 'red'; cc.fillRect(c.width - pt, p2y, pt, ph); //draw ball cc.fillStyle = 'lightgreen'; cc.fillRect(bx - bd / 2, by - bd / 2, bd, bd); //draw scores cc.fillStyle = 'white'; cc.font = '20px Times' cc.fillText(score1, 100, 100); cc.fillText(score2, c.width - 100, 100); //draw framerate cc.fillText("framerate: " + fps, c.width/2 - 100, 100); window.requestAnimationFrame(update); //Keep the game running } reset() //prepare the game update() //start the game </script> </body> </html>